]> granicus.if.org Git - postgresql/blobdiff - src/include/storage/standby.h
Introduce timeout handling framework
[postgresql] / src / include / storage / standby.h
index 45d44f60f6b47fa0623593df97c10a4ad83e9904..7024fc4f3c2d2d105ab6d5898b5e362a59937148 100644 (file)
@@ -4,10 +4,10 @@
  *       Definitions for hot standby mode.
  *
  *
- * Portions Copyright (c) 1996-2009, 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.1 2009/12/19 01:32:44 sriggs Exp $
+ * src/include/storage/standby.h
  *
  *-------------------------------------------------------------------------
  */
 
 #include "access/xlog.h"
 #include "storage/lock.h"
+#include "storage/procsignal.h"
+#include "storage/relfilenode.h"
 
+/* User-settable GUC parameters */
 extern int     vacuum_defer_cleanup_age;
-
-/* cancel modes for ResolveRecoveryConflictWithVirtualXIDs */
-#define CONFLICT_MODE_NOT_SET          0
-#define CONFLICT_MODE_ERROR                    1       /* Conflict can be resolved by canceling query */
-#define CONFLICT_MODE_FATAL                    2       /* Conflict can only be resolved by disconnecting session */
-
-extern void ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
-                                                                          char *reason, int cancel_mode);
+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 ResolveRecoveryConflictWithTablespace(Oid tsid);
+extern void ResolveRecoveryConflictWithDatabase(Oid dbid);
+
+extern void ResolveRecoveryConflictWithBufferPin(void);
+extern void CheckRecoveryConflictDeadlock(void);
+extern void StandbyDeadLockHandler(void);
+extern void StandbyTimeoutHandler(void);
+
 /*
  * Standby Rmgr (RM_STANDBY_ID)
  *
@@ -39,9 +46,9 @@ extern void ShutdownRecoveryTransactionEnvironment(void);
  */
 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
@@ -51,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;
 
 /*
@@ -60,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)
@@ -78,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
@@ -89,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 */