#ifndef h_clog #define h_clog /****************************************************************************** * * LOG.h - standard Logging daemon data definitions * * Module %M% Version %I% Date %H% * * (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved * This is unpublished proprietary source code of Ardent Software Inc. * The copyright notice above does not evidence any actual or intented * publication of such source code. * ******************************************************************************* * * Maintenence log - insert most recent change descriptions at top * * Date.... GTAR# WHO Description......................................... * 10/14/98 23801 SAP Change copyrights. * 06/26/98 23161 RGA Add 'raw' device support. * 05/29/97 20607 DJD Added NLS support. * 03/17/97 20246 DJD Added support for the deadlock process. * 03/25/96 18212 LAG Windows NT port. * 03/01/96 18074 CSM Added syncmode bit to shared memory, LGWSTXMSG * 04/26/95 16198 GMH Add archive tape support * 02/27/95 16051 AGM Revert name to LOG.h * 01/23/95 15386 CSM Added LG_STALE_ERR, PRseen for CPD, use of last_log * 12/13/94 15078 SJM Moved to clog.h * 10/20/94 15120 CSM Susp/Shut in progress, 15040 new err codes LG*ERR * 10/06/94 14995 CSM make log number an unsigned int * 08/24/94 14757 CSM replace staletbl with staletx, use new log tuneables * 07/07/94 14392 FAI #define SEMUN, if not already defined. * 07/06/94 14357 EAP Added LOGOP_NOBF * 07/06/94 14133 CSM Added LOGOP_DLDATA, exit codes, structs for CP, RF * 06/23/94 14173 EAP Added WARM_START_LOGGING macro * 06/15/94 13286 DTM Added eof * 06/07/94 14173 EAP Added LOGOP_TXWARM * 06/06/94 13286 DTM Added defines for RECIO functionality * 04/16/94 13511 JKW Add TXPR * 04/13/94 13524 CSM Changed R8 defines * 04/08/94 13524 CSM More R8 defines * 03/04/94 13179 JKW Added R8 defines * 01/12/94 9404 GMH Added new state CACHE_DUMPED * 03/18/93 11217 CSM Added a new state IOS_STARTING for lognoio * 11/07/91 8800 GMH Changed define values * 11/04/91 8782 GMH Added defines * 01/19/90 7868 TMC #ifndef semun should be #ifndef SEMUN * 05/15/90 7025 KIS Initial code. * *****************************************************************************/ #define TRUE 1 #define FALSE 0 #define LOGTRYS 10 #define LOGBUFADD 512 /* Message Queue structures */ #define MB (struct msgbuf *) #define MQ (struct msqid_ds *) #define LOGQUEUE 0xaced0651 /* Logging Message Queue Key */ #define LMsk 0666 /* Logging protection mask */ #define LOGSHBUF 10 /* Buffer shift */ #define LOGPKTBUF (1< current buf space */ to_tape:1, /* Archive bit set, 0 disk, 1 tape */ syncmode:1; /* 1 open disk log file in sync mode */ pid_t logd; /* log daemon's pid */ pid_t chkd; /* checkpoint daemon's pid */ unsigned int chkd_syncd;/* last log fsynced */ unsigned int chkd_done; /* last log checkpointed */ pid_t rollfwd; /* rollfwd pid during warm start */ int user_request; /* state change request by user */ unsigned int active_log; /* sequence number of log */ unsigned int next_to_chkp;/* sequence number of log */ /* this is set whenever DBsetup runs */ int low_tx; /* lowest valid TX id */ int stale_tx; /* all txids >= low_tx & <= stale_tx are stale */ /* these are set at the first boot up of Universe */ int semid; /* semaphore id */ char *buf_start; /* start of data buffer */ int buf_size; /* precomputed for ease of use */ int block_size; /* block size of log files */ /* these are set whenever a log file is opened */ int prev_bytes_put; /* used for prev lsn in rec hdr */ int bytes_put; /* bytes in log file bytes_put modulus buf_size = current buffer position */ int bytes_written; /* last byte written, always on a block boundary */ int filesize; /* size of current log file */ }; #define LGCONTROL DBshmseg->LGcontrol typedef struct { unsigned int logid; int attributes; }LG_files; typedef struct { unsigned int log_seqno; int rba; }LG_lsn; typedef struct { #ifdef MSWIN HANDLE fdesc; /* OS descriptor */ #else int fdesc; /* OS descriptor */ #endif int attributes; /* from header */ unsigned int seqno; /* sequence number */ LG_lsn lsn; /* current lsn, used when reading */ int rdpos; /* current read position */ char *write_start; /* start of active write */ char *write_end; /* end of active write */ int written; /* set if file is written */ int buf_size; /* size for reads */ int eof; /* logical eof */ int file_size; int NLSflag; } LG_openfile; typedef struct { int version; /* magic number and version */ char name[14]; /* file name */ unsigned int seqno; /* log sequence number */ int eof; /* logical eof */ int peof; /* physical eof */ unsigned int /* log file attributes */ empty:1, inuse:1, need_sync:1, has_tx:1, need_archive:1, crashed:1; /* all open tx discarded at end of log */ int NLSflag; }LG_header; #define LG_HEADER_SIZE 512 #define LGWSTXMSG 0x1 /* bit indicating a WS tx message */ #define LGCMTXMSG 0x2 /* bit indicating a commit tx message */ #define LGNLSFLAG 0x4 /* bit indicating that NLS was on when record stored */ typedef struct { LG_lsn prev_lsn; int size; char rmid; char fillerc; short fillers; /* will contain indication of WS tx message */ char data[1]; }LG_record; #define LOGOP_TXBG 5 /* TX begin */ #define LOGOP_TXCM 6 /* TX commit */ #define LOGOP_TXRB 7 /* TX rollback */ #define LOGOP_TXWR 8 /* TX write */ #define LOGOP_TXDL 9 /* TX delete */ #define LOGOP_TXCF 10 /* TX clearfile not implemented */ #define LOGOP_TXBF 11 /* TX before image */ #define LOGOP_TXPR 12 #define LOGOP_TXWARM 13 /* Warm Start Transaction */ #define LOGOP_DLDATA 14 /* Delete data part of a file */ #define LOGOP_TXNOBF 15 /* TX NO before image */ #define MAX_LOGOP 15 /* Highest opcode */ #define LG_OK 0 #define LG_FAILURE -1 #define LG_EOF -2 #define LG_STATE_ERR -3 #define LG_TX_ERR -4 /* Low tx or stale tx or tx entry size > log size */ #define LG_SIZE_ERR -5 /* non-tx log entry size > log file size */ #define LG_SEM_ERR -6 #define LG_STALE_ERR -7 #define LG_BADRAW_OFFSET -8 /* creation of new log failed/bad offset */ /* key for log semaphores */ #define LG_SEM_KEY 0xaced0652 /* Log subsystem states */ #define LG_UNINIT 1 #define LG_INACTIVE 2 #define LG_INITING 3 #define LG_WARM_START 4 #define LG_ENABLED 5 #define LG_SUSPENDED 6 #define LG_FULL 8 #define LG_CRASHED 9 #define LG_SHUTDOWN 10 #define LG_SUSP_PROG 11 #define LG_SHUT_PROG 12 /* exit codes */ #define LG_EXIT1 -1 /* unix initialization failed */ #define LG_EXIT2 -2 /* LG_init failed */ #define LG_EXIT3 -3 /* daemon in crashed state */ #define LG_EXIT4 0 /* normal shutdown */ #define LG_EXIT5 -5 /* can't flush log file */ #define LG_EXIT6 -6 /* can't flush log buffer */ #define LG_EXIT7 -7 /* maintenance fcn aborted */ #define LG_EXIT8 -8 /* can't create trace file */ #define LG_EXIT9 -9 /* can't open next log */ #define LG_EXIT10 -10 /* semaphore problem */ #define LG_EXIT11 -11 /* unable to fork */ #define LG_EXIT12 12 /* not superuser */ #define LG_EXIT13 -13 /* No empty logs */ #define LG_EXIT14 -14 /* daemon in crashed state */ #define LG_EXIT15 -15 /* log file open/close/access/info problem */ #define LG_EXIT16 -16 /* same transaction begun more than once */ #define LG_EXIT17 -17 /* log file checksum, opcode problem */ #define LG_EXIT18 -18 /* Process initialization failed */ #define LG_EXIT19 -19 /* error with UV.TRANS, UV.ACCOUNT to get file path */ #define LG_EXIT20 -20 /* can't fsync a data file or sys file table full */ #define LG_EXIT21 -21 /* unused */ #define LG_EXIT22 -22 /* cannot reuse a log file */ #define LG_EXIT23 -23 /* error opening data file */ #define LG_EXIT24 -24 /* RF called with invalid arguments */ #define LG_EXIT25 -25 /* Transaction commit failed */ #define LG_EXIT26 -26 /* Checkpoint daemon disappeared */ #define LG_EXIT27 -27 /* Failure applying warm-start transaction */ #define LG_MAINT_CYCLE 10 /* passes till LG_maintenance */ #define LG_TRACE_DIR "traces" #define LG_TRACE_FILE "logd.trace" /* codes for LG_next_log */ #define LG_EMPTY_LOG 0x1 #define LG_NEED_CHKPNT 0x6 #define LG_NEED_ARCHIVE 0x8 /* codes for retrieving attributes */ #define LG_ARCHIVE_ON 0x1 #define LG_CHECKPOINT_ON 0x2 /* Gtar 16198 */ #define LG_ARCHIVE_TAPE 0x4 /* log daemons */ #ifdef MSWIN #define LG_LOGD "uvlogd.exe" #define LG_CHKD "uvchkd.exe" #define LG_ROLLF "uvrolf.exe" #else #define LG_LOGD "uvlogd" #define LG_CHKD "uvchkd" #define LG_ROLLF "uvrolf" #endif /* trace files */ #define LG_LOGD_TRC "uvlogd.info" #define LG_CHKD_TRC "uvchkd.info" #define LG_ROLLF_TRC "uvrolf.info" #define LG_PATH_BUF 512 #define LG_EXEC_WAIT 60 * 2 #define LG_SUSPEND_SLEEP 5 /* log file bits */ #define LG_F_EMPTY 0x1 #define LG_F_NEED_FSYNC 0x2 #define LG_F_HAS_TX 0x4 #define LG_F_ARCHIVE 0x8 #define LG_F_CRASHED 0x10 #define LG_F_INUSE 0x20 /* Keys for RECIO ATTR */ #define LG_CHECKPOINT 0 #define LG_ARCHIVE 1 /* Keys for BASIC RECIO parser */ #define RECIO_FINFO 1 #define RECIO_PATH 2 #define RECIO_STATE 3 #define RECIO_CLEAR 4 #define RECIO_CREATE 5 #define RECIO_ATTR 6 #define RECIO_CHECKPOINT 7 #define RECIO_CONSISTENT 8 #define RECIO_DEVICELIST 9 #define RECIO_DLINFO 10 #define RECIO_RPINFO 11 #define RECIO_RAWPATH 12 #define RECIO_RAWCREATE 13 #define FINFO_AI_STATE 11 #define FINFO_AI_FIRSTSEQ 12 #define FINFO_AI_SEQUENCE 13 #define FINFO_AI_PEOF 14 #define FINFO_AI_EOF 15 #define FINFO_AI_ARCHIVE 16 #define FINFO_AI_CHECKPOINT 17 #define FINFO_AI_LASTSEQ 18 #define FINFO_AI_ARCHIVE_TAPE 19 #define DLINFO_AI_STATE 1 #define RPINFO_LOG_STATE 1 #define RPINFO_REP_STATE 2 #define RMID_UVFS 1 #define RMID_UVAUDIT 2 #define LG_DEBUG_LOGFILE 9 #define LG_WATCHDOG 5 #define WARM_START_LOGGING(fdesc) (LGCONTROL.chkpnt && fdesc->tlfilenum) #ifdef LG_CHECKPOINTING /* begin of CHECKPOINT definitions */ struct tid_node { struct tid_node *next; struct tid_node *parent; struct tid_node *child; int txid; STRING fillst; unsigned int currl:1, /* 1: tx was started in curr log file */ prseen:1; /* 1: TXprepare seen for transaction */ }; typedef struct tid_node TID_NODE; struct log_file { struct log_file *next; unsigned int lognum; STRING tidsleft; int hastx; /* # of active transactions in this log file */ int filactvn_err; /* if 1, err getting a data file path */ }; typedef struct log_file LOG_FILE; #endif /* end of CHECKPOINT definitions */ #ifdef LG_ROLLFORWARD /* begin of ROLLFORWARD definitions */ struct tid_node { struct tid_node *next; int txid; int prseen; /* TXprepare seen */ void *ptx; /* pointer to Transaction descriptor */ }; typedef struct tid_node TID_NODE; struct ftentry { char *fpath; char *fname; DBFILE *fdesc; int ftype; }; typedef struct ftentry FTENTRY; /* Files_table entry */ #endif /* end of ROLLFORWARD definitions */ #endif /* LG_R8 */ #endif /* end of clog.h */