17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 57c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 67c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 77c478bd9Sstevel@tonic-gate * with the License. 87c478bd9Sstevel@tonic-gate * 97c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate * and limitations under the License. 137c478bd9Sstevel@tonic-gate * 147c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate * 207c478bd9Sstevel@tonic-gate * CDDL HEADER END 217c478bd9Sstevel@tonic-gate */ 227c478bd9Sstevel@tonic-gate /* 237c478bd9Sstevel@tonic-gate * db_log_c.x 247c478bd9Sstevel@tonic-gate * 25*a506a34cSth160488 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 267c478bd9Sstevel@tonic-gate * Use is subject to license terms. 277c478bd9Sstevel@tonic-gate */ 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate %#pragma ident "%Z%%M% %I% %E% SMI" 307c478bd9Sstevel@tonic-gate 317c478bd9Sstevel@tonic-gate #if RPC_HDR 327c478bd9Sstevel@tonic-gate %#ifndef _DB_LOG_H 337c478bd9Sstevel@tonic-gate %#define _DB_LOG_H 347c478bd9Sstevel@tonic-gate 357c478bd9Sstevel@tonic-gate #ifdef USINGC 367c478bd9Sstevel@tonic-gate %#include "db_log_entry_c.h" 377c478bd9Sstevel@tonic-gate #else 387c478bd9Sstevel@tonic-gate %#include "db_pickle.h" 397c478bd9Sstevel@tonic-gate %#include "db_log_entry.h" 40*a506a34cSth160488 #endif /* USINGC */ 41*a506a34cSth160488 #endif /* RPC_HDR */ 427c478bd9Sstevel@tonic-gate % 437c478bd9Sstevel@tonic-gate %#include "nisdb_rw.h" 447c478bd9Sstevel@tonic-gate % 457c478bd9Sstevel@tonic-gate #ifndef USINGC 467c478bd9Sstevel@tonic-gate #ifdef RPC_HDR 477c478bd9Sstevel@tonic-gate %class db_log: public pickle_file { 487c478bd9Sstevel@tonic-gate % private: 497c478bd9Sstevel@tonic-gate % int syncstate; /* 0 if changes xfrd to <table>.log */ 507c478bd9Sstevel@tonic-gate % char *tmplog; /* <table>.log.tmp */ 517c478bd9Sstevel@tonic-gate % char *stablelog; /* <table>.log.stable */ 527c478bd9Sstevel@tonic-gate % char *oldlog; /* remember name of <table>.log */ 537c478bd9Sstevel@tonic-gate % STRUCTRWLOCK(log); 547c478bd9Sstevel@tonic-gate % 557c478bd9Sstevel@tonic-gate % public: 567c478bd9Sstevel@tonic-gate % 577c478bd9Sstevel@tonic-gate %/* Constructor: create log file; default is PICKLE_READ mode. */ 587c478bd9Sstevel@tonic-gate % db_log( char* f, pickle_mode m = PICKLE_READ ): pickle_file(f, m) { 597c478bd9Sstevel@tonic-gate % syncstate = 0; 607c478bd9Sstevel@tonic-gate % tmplog = stablelog = oldlog = 0; 617c478bd9Sstevel@tonic-gate % INITRW(log); 627c478bd9Sstevel@tonic-gate % } 637c478bd9Sstevel@tonic-gate % 647c478bd9Sstevel@tonic-gate % ~db_log(void) { 657c478bd9Sstevel@tonic-gate % DESTROYRW(log); 667c478bd9Sstevel@tonic-gate % } 677c478bd9Sstevel@tonic-gate % 687c478bd9Sstevel@tonic-gate %/* Execute given function 'func' on log. 697c478bd9Sstevel@tonic-gate % function takes as arguments: pointer to log entry, character pointer to 707c478bd9Sstevel@tonic-gate % another argument, and pointer to an integer, which is used as a counter. 717c478bd9Sstevel@tonic-gate % 'func' should increment this value for each successful application. 727c478bd9Sstevel@tonic-gate % The log is traversed until either 'func' returns FALSE, or when the log 737c478bd9Sstevel@tonic-gate % is exhausted. The second argument to 'execute_on_log' is passed as the 747c478bd9Sstevel@tonic-gate % second argument to 'func'. The third argument, 'clean' determines whether 757c478bd9Sstevel@tonic-gate % the log entry is deleted after the function has been applied. 767c478bd9Sstevel@tonic-gate % Returns the number of times that 'func' incremented its third argument. */ 777c478bd9Sstevel@tonic-gate % int execute_on_log( bool_t(* f) (db_log_entry *, char *, int *), 787c478bd9Sstevel@tonic-gate % char *, bool_t = TRUE ); 797c478bd9Sstevel@tonic-gate % 807c478bd9Sstevel@tonic-gate % 817c478bd9Sstevel@tonic-gate %/* Print contents of log file to stdout */ 827c478bd9Sstevel@tonic-gate % int print(); 837c478bd9Sstevel@tonic-gate % 847c478bd9Sstevel@tonic-gate %/* Make copy of current log to log pointed to by 'f'. */ 857c478bd9Sstevel@tonic-gate % int copy( db_log*); 867c478bd9Sstevel@tonic-gate % 877c478bd9Sstevel@tonic-gate %/*Rewinds current log */ 887c478bd9Sstevel@tonic-gate % int rewind(); 897c478bd9Sstevel@tonic-gate % 907c478bd9Sstevel@tonic-gate %/*Append given log entry to log. */ 917c478bd9Sstevel@tonic-gate % int append( db_log_entry * ); 927c478bd9Sstevel@tonic-gate % 937c478bd9Sstevel@tonic-gate %/* Flush and sync log file. */ 947c478bd9Sstevel@tonic-gate % int sync_log(); 957c478bd9Sstevel@tonic-gate % 967c478bd9Sstevel@tonic-gate %/* Return the next element in current log; return NULL if end of log or error. 977c478bd9Sstevel@tonic-gate % Log must have been opened for READ. */ 987c478bd9Sstevel@tonic-gate % db_log_entry *get(); 997c478bd9Sstevel@tonic-gate % 1007c478bd9Sstevel@tonic-gate %/* bool_t dump( pptr ) {return TRUE;}*/ // does nothing. 1017c478bd9Sstevel@tonic-gate % 1027c478bd9Sstevel@tonic-gate %/* Open log file */ 1037c478bd9Sstevel@tonic-gate % int open(void); 1047c478bd9Sstevel@tonic-gate %/* Close log file */ 1057c478bd9Sstevel@tonic-gate % int close(); 1067c478bd9Sstevel@tonic-gate %/* Do we need to copy the log file */ 1077c478bd9Sstevel@tonic-gate % bool_t copylog; 1087c478bd9Sstevel@tonic-gate % 1097c478bd9Sstevel@tonic-gate %/* Locking methods */ 1107c478bd9Sstevel@tonic-gate % 1117c478bd9Sstevel@tonic-gate % int acqexcl(void) { 1127c478bd9Sstevel@tonic-gate % return (WLOCK(log)); 1137c478bd9Sstevel@tonic-gate % } 1147c478bd9Sstevel@tonic-gate % 1157c478bd9Sstevel@tonic-gate % int relexcl(void) { 1167c478bd9Sstevel@tonic-gate % return (WULOCK(log)); 1177c478bd9Sstevel@tonic-gate % } 1187c478bd9Sstevel@tonic-gate % 1197c478bd9Sstevel@tonic-gate % int acqnonexcl(void) { 1207c478bd9Sstevel@tonic-gate % return (RLOCK(log)); 1217c478bd9Sstevel@tonic-gate % } 1227c478bd9Sstevel@tonic-gate % 1237c478bd9Sstevel@tonic-gate % int relnonexcl(void) { 1247c478bd9Sstevel@tonic-gate % return (RULOCK(log)); 1257c478bd9Sstevel@tonic-gate % } 1267c478bd9Sstevel@tonic-gate %}; 127*a506a34cSth160488 #endif /* RPC_HDR */ 128*a506a34cSth160488 #endif /* USINGC */ 1297c478bd9Sstevel@tonic-gate 1307c478bd9Sstevel@tonic-gate #if RPC_HDR 131*a506a34cSth160488 %#endif /* _DB_LOG_H */ 132*a506a34cSth160488 #endif /* RPC_HDR */ 133