12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*-------------------------------------------------------------------------
- *
- * standby.h
- * Definitions for hot standby mode.
- *
- *
- * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/storage/standby.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef STANDBY_H
- #define STANDBY_H
- #include "storage/standbydefs.h"
- #include "storage/lock.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 ResolveRecoveryConflictWithTablespace(Oid tsid);
- extern void ResolveRecoveryConflictWithDatabase(Oid dbid);
- extern void ResolveRecoveryConflictWithLock(LOCKTAG locktag);
- extern void ResolveRecoveryConflictWithBufferPin(void);
- extern void CheckRecoveryConflictDeadlock(void);
- extern void StandbyDeadLockHandler(void);
- extern void StandbyTimeoutHandler(void);
- extern void StandbyLockTimeoutHandler(void);
- /*
- * Standby Rmgr (RM_STANDBY_ID)
- *
- * Standby recovery manager exists to perform actions that are required
- * to make hot standby work. That includes logging AccessExclusiveLocks taken
- * by transactions and running-xacts snapshots.
- */
- extern void StandbyAcquireAccessExclusiveLock(TransactionId xid, Oid dbOid, Oid relOid);
- extern void StandbyReleaseLockTree(TransactionId xid,
- int nsubxids, TransactionId *subxids);
- extern void StandbyReleaseAllLocks(void);
- extern void StandbyReleaseOldLocks(int nxids, TransactionId *xids);
- #define MinSizeOfXactRunningXacts offsetof(xl_running_xacts, xids)
- /*
- * 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.
- * 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
- * is written to WAL as a separate record immediately after each
- * checkpoint. That means that wherever we start a standby from we will
- * almost immediately see the data we need to begin executing queries.
- */
- typedef struct RunningTransactionsData
- {
- int xcnt; /* # of xact ids in xids[] */
- int subxcnt; /* # of subxact 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 */
- } RunningTransactionsData;
- typedef RunningTransactionsData *RunningTransactions;
- extern void LogAccessExclusiveLock(Oid dbOid, Oid relOid);
- extern void LogAccessExclusiveLockPrepare(void);
- extern XLogRecPtr LogStandbySnapshot(void);
- extern void LogStandbyInvalidations(int nmsgs, SharedInvalidationMessage *msgs,
- bool relcacheInitFileInval);
- #endif /* STANDBY_H */
|