1 /*------------------------------------------------------------------------- 2 * 3 * twophase.h 4 * Two-phase-commit related declarations. 5 * 6 * 7 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group 8 * Portions Copyright (c) 1994, Regents of the University of California 9 * 10 * src/include/access/twophase.h 11 * 12 *------------------------------------------------------------------------- 13 */ 14 #ifndef TWOPHASE_H 15 #define TWOPHASE_H 16 17 #include "access/xact.h" 18 #include "access/xlogdefs.h" 19 #include "datatype/timestamp.h" 20 #include "storage/lock.h" 21 22 /* 23 * GlobalTransactionData is defined in twophase.c; other places have no 24 * business knowing the internal definition. 25 */ 26 typedef struct GlobalTransactionData *GlobalTransaction; 27 28 /* GUC variable */ 29 extern PGDLLIMPORT int max_prepared_xacts; 30 31 extern Size TwoPhaseShmemSize(void); 32 extern void TwoPhaseShmemInit(void); 33 34 extern void AtAbort_Twophase(void); 35 extern void PostPrepare_Twophase(void); 36 37 extern TransactionId TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid, 38 bool *have_more); 39 extern PGPROC *TwoPhaseGetDummyProc(TransactionId xid, bool lock_held); 40 extern BackendId TwoPhaseGetDummyBackendId(TransactionId xid, bool lock_held); 41 42 extern GlobalTransaction MarkAsPreparing(TransactionId xid, const char *gid, 43 TimestampTz prepared_at, 44 Oid owner, Oid databaseid); 45 46 extern void StartPrepare(GlobalTransaction gxact); 47 extern void EndPrepare(GlobalTransaction gxact); 48 extern bool StandbyTransactionIdIsPrepared(TransactionId xid); 49 50 extern TransactionId PrescanPreparedTransactions(TransactionId **xids_p, 51 int *nxids_p); 52 extern void StandbyRecoverPreparedTransactions(void); 53 extern void RecoverPreparedTransactions(void); 54 55 extern void CheckPointTwoPhase(XLogRecPtr redo_horizon); 56 57 extern void FinishPreparedTransaction(const char *gid, bool isCommit); 58 59 extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, 60 XLogRecPtr end_lsn, RepOriginId origin_id); 61 extern void PrepareRedoRemove(TransactionId xid, bool giveWarning); 62 extern void restoreTwoPhaseData(void); 63 #endif /* TWOPHASE_H */ 64