]> granicus.if.org Git - postgresql/blobdiff - src/include/storage/standby.h
Introduce timeout handling framework
[postgresql] / src / include / storage / standby.h
index 081fa51ba00b799757a46f7404d21151bfd90a8a..7024fc4f3c2d2d105ab6d5898b5e362a59937148 100644 (file)
@@ -4,10 +4,10 @@
  *       Definitions for hot standby mode.
  *
  *
- * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/storage/standby.h,v 1.8 2010/02/13 01:32:20 sriggs Exp $
+ * src/include/storage/standby.h
  *
  *-------------------------------------------------------------------------
  */
 #include "storage/procsignal.h"
 #include "storage/relfilenode.h"
 
+/* User-settable GUC parameters */
 extern int     vacuum_defer_cleanup_age;
+extern int     max_standby_archive_delay;
+extern int     max_standby_streaming_delay;
 
 extern void InitRecoveryTransactionEnvironment(void);
 extern void ShutdownRecoveryTransactionEnvironment(void);
 
 extern void ResolveRecoveryConflictWithSnapshot(TransactionId latestRemovedXid,
-                                                                                               RelFileNode node);
-extern void ResolveRecoveryConflictWithRemovedTransactionId(void);
+                                                                       RelFileNode node);
 extern void ResolveRecoveryConflictWithTablespace(Oid tsid);
 extern void ResolveRecoveryConflictWithDatabase(Oid dbid);
 
 extern void ResolveRecoveryConflictWithBufferPin(void);
-extern void SendRecoveryConflictWithBufferPin(ProcSignalReason reason);
-extern void CheckRecoveryConflictDeadlock(LWLockId partitionLock);
+extern void CheckRecoveryConflictDeadlock(void);
+extern void StandbyDeadLockHandler(void);
+extern void StandbyTimeoutHandler(void);
 
 /*
  * Standby Rmgr (RM_STANDBY_ID)
@@ -43,9 +46,9 @@ extern void CheckRecoveryConflictDeadlock(LWLockId partitionLock);
  */
 extern void StandbyAcquireAccessExclusiveLock(TransactionId xid, Oid dbOid, Oid relOid);
 extern void StandbyReleaseLockTree(TransactionId xid,
-                                                                  int nsubxids, TransactionId *subxids);
+                                          int nsubxids, TransactionId *subxids);
 extern void StandbyReleaseAllLocks(void);
-extern void StandbyReleaseOldLocks(TransactionId removeXid);
+extern void StandbyReleaseOldLocks(int nxids, TransactionId *xids);
 
 /*
  * XLOG message types
@@ -55,8 +58,8 @@ extern void StandbyReleaseOldLocks(TransactionId removeXid);
 
 typedef struct xl_standby_locks
 {
-       int                             nlocks;         /* number of entries in locks array */
-       xl_standby_lock locks[1];       /* VARIABLE LENGTH ARRAY */
+       int                     nlocks;                 /* number of entries in locks array */
+       xl_standby_lock locks[1];       /* VARIABLE LENGTH ARRAY */
 } xl_standby_locks;
 
 /*
@@ -64,12 +67,13 @@ typedef struct xl_standby_locks
  */
 typedef struct xl_running_xacts
 {
-       int                             xcnt;                           /* # of xact ids in xids[] */
-       bool                    subxid_overflow;        /* snapshot overflowed, subxids missing */
-       TransactionId   nextXid;                        /* copy of ShmemVariableCache->nextXid */
-       TransactionId   oldestRunningXid;       /* *not* oldestXmin */
+       int                     xcnt;                   /* # of xact ids in xids[] */
+       bool            subxid_overflow;        /* snapshot overflowed, subxids missing */
+       TransactionId nextXid;          /* copy of ShmemVariableCache->nextXid */
+       TransactionId oldestRunningXid;         /* *not* oldestXmin */
+       TransactionId latestCompletedXid;       /* so we can set xmax */
 
-       TransactionId   xids[1];                /* VARIABLE LENGTH ARRAY */
+       TransactionId xids[1];          /* VARIABLE LENGTH ARRAY */
 } xl_running_xacts;
 
 #define MinSizeOfXactRunningXacts offsetof(xl_running_xacts, xids)
@@ -82,7 +86,7 @@ extern void standby_desc(StringInfo buf, uint8 xl_info, char *rec);
 /*
  * Declarations for GetRunningTransactionData(). Similar to Snapshots, but
  * not quite. This has nothing at all to do with visibility on this server,
- * so this is completely separate from snapmgr.c and snapmgr.h
+ * so this is completely separate from snapmgr.c and snapmgr.h.
  * This data is important for creating the initial snapshot state on a
  * standby server. We need lots more information than a normal snapshot,
  * hence we use a specific data structure for our needs. This data
@@ -93,18 +97,20 @@ extern void standby_desc(StringInfo buf, uint8 xl_info, char *rec);
 
 typedef struct RunningTransactionsData
 {
-       int                             xcnt;                           /* # of xact ids in xids[] */
-       bool                    subxid_overflow;        /* snapshot overflowed, subxids missing */
-       TransactionId   nextXid;                        /* copy of ShmemVariableCache->nextXid */
-       TransactionId   oldestRunningXid;       /* *not* oldestXmin */
+       int                     xcnt;                   /* # of xact ids in xids[] */
+       bool            subxid_overflow;        /* snapshot overflowed, subxids missing */
+       TransactionId nextXid;          /* copy of ShmemVariableCache->nextXid */
+       TransactionId oldestRunningXid;         /* *not* oldestXmin */
+       TransactionId latestCompletedXid;       /* so we can set xmax */
 
-       TransactionId  *xids;                           /* array of (sub)xids still running */
+       TransactionId *xids;            /* array of (sub)xids still running */
 } RunningTransactionsData;
 
 typedef RunningTransactionsData *RunningTransactions;
 
 extern void LogAccessExclusiveLock(Oid dbOid, Oid relOid);
+extern void LogAccessExclusiveLockPrepare(void);
 
-extern void LogStandbySnapshot(TransactionId *oldestActiveXid, TransactionId *nextXid);
+extern void LogStandbySnapshot(TransactionId *nextXid);
 
 #endif   /* STANDBY_H */