1 /*------------------------------------------------------------------------- 2 * 3 * standbydef.h 4 * Frontend exposed definitions for hot standby mode. 5 * 6 * 7 * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group 8 * Portions Copyright (c) 1994, Regents of the University of California 9 * 10 * src/include/storage/standbydefs.h 11 * 12 *------------------------------------------------------------------------- 13 */ 14 #ifndef STANDBYDEFS_H 15 #define STANDBYDEFS_H 16 17 #include "access/xlogreader.h" 18 #include "lib/stringinfo.h" 19 #include "storage/lockdefs.h" 20 #include "storage/sinval.h" 21 22 /* Recovery handlers for the Standby Rmgr (RM_STANDBY_ID) */ 23 extern void standby_redo(XLogReaderState *record); 24 extern void standby_desc(StringInfo buf, XLogReaderState *record); 25 extern const char *standby_identify(uint8 info); 26 extern void standby_desc_invalidations(StringInfo buf, 27 int nmsgs, SharedInvalidationMessage *msgs, 28 Oid dbId, Oid tsId, 29 bool relcacheInitFileInval); 30 31 /* 32 * XLOG message types 33 */ 34 #define XLOG_STANDBY_LOCK 0x00 35 #define XLOG_RUNNING_XACTS 0x10 36 #define XLOG_INVALIDATIONS 0x20 37 38 typedef struct xl_standby_locks 39 { 40 int nlocks; /* number of entries in locks array */ 41 xl_standby_lock locks[FLEXIBLE_ARRAY_MEMBER]; 42 } xl_standby_locks; 43 44 /* 45 * When we write running xact data to WAL, we use this structure. 46 */ 47 typedef struct xl_running_xacts 48 { 49 int xcnt; /* # of xact ids in xids[] */ 50 int subxcnt; /* # of subxact ids in xids[] */ 51 bool subxid_overflow; /* snapshot overflowed, subxids missing */ 52 TransactionId nextXid; /* copy of ShmemVariableCache->nextXid */ 53 TransactionId oldestRunningXid; /* *not* oldestXmin */ 54 TransactionId latestCompletedXid; /* so we can set xmax */ 55 56 TransactionId xids[FLEXIBLE_ARRAY_MEMBER]; 57 } xl_running_xacts; 58 59 /* 60 * Invalidations for standby, currently only when transactions without an 61 * assigned xid commit. 62 */ 63 typedef struct xl_invalidations 64 { 65 Oid dbId; /* MyDatabaseId */ 66 Oid tsId; /* MyDatabaseTableSpace */ 67 bool relcacheInitFileInval; /* invalidate relcache init files */ 68 int nmsgs; /* number of shared inval msgs */ 69 SharedInvalidationMessage msgs[FLEXIBLE_ARRAY_MEMBER]; 70 } xl_invalidations; 71 72 #define MinSizeOfInvalidations offsetof(xl_invalidations, msgs) 73 74 #endif /* STANDBYDEFS_H */ 75