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 * 25a506a34cSth * 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 #if RPC_HDR 307c478bd9Sstevel@tonic-gate %#ifndef _DB_LOG_H 317c478bd9Sstevel@tonic-gate %#define _DB_LOG_H 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate #ifdef USINGC 347c478bd9Sstevel@tonic-gate %#include "db_log_entry_c.h" 357c478bd9Sstevel@tonic-gate #else 367c478bd9Sstevel@tonic-gate %#include "db_pickle.h" 377c478bd9Sstevel@tonic-gate %#include "db_log_entry.h" 38a506a34cSth #endif /* USINGC */ 39a506a34cSth #endif /* RPC_HDR */ 407c478bd9Sstevel@tonic-gate % 417c478bd9Sstevel@tonic-gate %#include "nisdb_rw.h" 427c478bd9Sstevel@tonic-gate % 437c478bd9Sstevel@tonic-gate #ifndef USINGC 447c478bd9Sstevel@tonic-gate #ifdef RPC_HDR 457c478bd9Sstevel@tonic-gate %class db_log: public pickle_file { 467c478bd9Sstevel@tonic-gate % private: 477c478bd9Sstevel@tonic-gate % int syncstate; /* 0 if changes xfrd to <table>.log */ 487c478bd9Sstevel@tonic-gate % char *tmplog; /* <table>.log.tmp */ 497c478bd9Sstevel@tonic-gate % char *stablelog; /* <table>.log.stable */ 507c478bd9Sstevel@tonic-gate % char *oldlog; /* remember name of <table>.log */ 517c478bd9Sstevel@tonic-gate % STRUCTRWLOCK(log); 527c478bd9Sstevel@tonic-gate % 537c478bd9Sstevel@tonic-gate % public: 547c478bd9Sstevel@tonic-gate % 557c478bd9Sstevel@tonic-gate %/* Constructor: create log file; default is PICKLE_READ mode. */ 567c478bd9Sstevel@tonic-gate % db_log( char* f, pickle_mode m = PICKLE_READ ): pickle_file(f, m) { 577c478bd9Sstevel@tonic-gate % syncstate = 0; 587c478bd9Sstevel@tonic-gate % tmplog = stablelog = oldlog = 0; 597c478bd9Sstevel@tonic-gate % INITRW(log); 607c478bd9Sstevel@tonic-gate % } 617c478bd9Sstevel@tonic-gate % 627c478bd9Sstevel@tonic-gate % ~db_log(void) { 637c478bd9Sstevel@tonic-gate % DESTROYRW(log); 647c478bd9Sstevel@tonic-gate % } 657c478bd9Sstevel@tonic-gate % 667c478bd9Sstevel@tonic-gate %/* Execute given function 'func' on log. 677c478bd9Sstevel@tonic-gate % function takes as arguments: pointer to log entry, character pointer to 687c478bd9Sstevel@tonic-gate % another argument, and pointer to an integer, which is used as a counter. 697c478bd9Sstevel@tonic-gate % 'func' should increment this value for each successful application. 707c478bd9Sstevel@tonic-gate % The log is traversed until either 'func' returns FALSE, or when the log 717c478bd9Sstevel@tonic-gate % is exhausted. The second argument to 'execute_on_log' is passed as the 727c478bd9Sstevel@tonic-gate % second argument to 'func'. The third argument, 'clean' determines whether 737c478bd9Sstevel@tonic-gate % the log entry is deleted after the function has been applied. 747c478bd9Sstevel@tonic-gate % Returns the number of times that 'func' incremented its third argument. */ 757c478bd9Sstevel@tonic-gate % int execute_on_log( bool_t(* f) (db_log_entry *, char *, int *), 767c478bd9Sstevel@tonic-gate % char *, bool_t = TRUE ); 777c478bd9Sstevel@tonic-gate % 787c478bd9Sstevel@tonic-gate % 797c478bd9Sstevel@tonic-gate %/* Print contents of log file to stdout */ 807c478bd9Sstevel@tonic-gate % int print(); 817c478bd9Sstevel@tonic-gate % 827c478bd9Sstevel@tonic-gate %/* Make copy of current log to log pointed to by 'f'. */ 837c478bd9Sstevel@tonic-gate % int copy( db_log*); 847c478bd9Sstevel@tonic-gate % 857c478bd9Sstevel@tonic-gate %/*Rewinds current log */ 867c478bd9Sstevel@tonic-gate % int rewind(); 877c478bd9Sstevel@tonic-gate % 887c478bd9Sstevel@tonic-gate %/*Append given log entry to log. */ 897c478bd9Sstevel@tonic-gate % int append( db_log_entry * ); 907c478bd9Sstevel@tonic-gate % 917c478bd9Sstevel@tonic-gate %/* Flush and sync log file. */ 927c478bd9Sstevel@tonic-gate % int sync_log(); 937c478bd9Sstevel@tonic-gate % 947c478bd9Sstevel@tonic-gate %/* Return the next element in current log; return NULL if end of log or error. 957c478bd9Sstevel@tonic-gate % Log must have been opened for READ. */ 967c478bd9Sstevel@tonic-gate % db_log_entry *get(); 977c478bd9Sstevel@tonic-gate % 987c478bd9Sstevel@tonic-gate %/* bool_t dump( pptr ) {return TRUE;}*/ // does nothing. 997c478bd9Sstevel@tonic-gate % 1007c478bd9Sstevel@tonic-gate %/* Open log file */ 101*bc30fb4cSToomas Soome % bool_t open(void); 1027c478bd9Sstevel@tonic-gate %/* Close log file */ 1037c478bd9Sstevel@tonic-gate % int close(); 1047c478bd9Sstevel@tonic-gate %/* Do we need to copy the log file */ 1057c478bd9Sstevel@tonic-gate % bool_t copylog; 1067c478bd9Sstevel@tonic-gate % 1077c478bd9Sstevel@tonic-gate %/* Locking methods */ 1087c478bd9Sstevel@tonic-gate % 1097c478bd9Sstevel@tonic-gate % int acqexcl(void) { 1107c478bd9Sstevel@tonic-gate % return (WLOCK(log)); 1117c478bd9Sstevel@tonic-gate % } 1127c478bd9Sstevel@tonic-gate % 1137c478bd9Sstevel@tonic-gate % int relexcl(void) { 1147c478bd9Sstevel@tonic-gate % return (WULOCK(log)); 1157c478bd9Sstevel@tonic-gate % } 1167c478bd9Sstevel@tonic-gate % 1177c478bd9Sstevel@tonic-gate % int acqnonexcl(void) { 1187c478bd9Sstevel@tonic-gate % return (RLOCK(log)); 1197c478bd9Sstevel@tonic-gate % } 1207c478bd9Sstevel@tonic-gate % 1217c478bd9Sstevel@tonic-gate % int relnonexcl(void) { 1227c478bd9Sstevel@tonic-gate % return (RULOCK(log)); 1237c478bd9Sstevel@tonic-gate % } 1247c478bd9Sstevel@tonic-gate %}; 125a506a34cSth #endif /* RPC_HDR */ 126a506a34cSth #endif /* USINGC */ 1277c478bd9Sstevel@tonic-gate 1287c478bd9Sstevel@tonic-gate #if RPC_HDR 129a506a34cSth %#endif /* _DB_LOG_H */ 130a506a34cSth #endif /* RPC_HDR */ 131