Skip to content

Commit d83d922

Browse files
committed
bring xact events back
1 parent 0e5b8ef commit d83d922

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

src/backend/access/transam/twophase.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,12 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
15101510
LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE);
15111511
RemoveGXact(gxact);
15121512
LWLockRelease(TwoPhaseStateLock);
1513+
1514+
if (isCommit)
1515+
CallXactCallbacks(XACT_EVENT_COMMIT_PREPARED);
1516+
else
1517+
CallXactCallbacks(XACT_EVENT_ABORT_PREPARED);
1518+
15131519
MyLockedGxact = NULL;
15141520

15151521
pfree(buf);
@@ -2408,3 +2414,13 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning)
24082414

24092415
return;
24102416
}
2417+
2418+
2419+
/*
2420+
* Return identified of current global transaction
2421+
*/
2422+
const char*
2423+
GetLockedGlobalTransactionId(void)
2424+
{
2425+
return MyLockedGxact ? MyLockedGxact->gid : NULL;
2426+
}

src/backend/access/transam/xact.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,6 @@ static void AtCommit_Memory(void);
306306
static void AtStart_Cache(void);
307307
static void AtStart_Memory(void);
308308
static void AtStart_ResourceOwner(void);
309-
static void CallXactCallbacks(XactEvent event);
310309
static void CallSubXactCallbacks(SubXactEvent event,
311310
SubTransactionId mySubid,
312311
SubTransactionId parentSubid);
@@ -1922,6 +1921,7 @@ StartTransaction(void)
19221921
*/
19231922
s->state = TRANS_INPROGRESS;
19241923

1924+
CallXactCallbacks(XACT_EVENT_START);
19251925
ShowTransactionState("StartTransaction");
19261926
}
19271927

@@ -3335,7 +3335,7 @@ UnregisterXactCallback(XactCallback callback, void *arg)
33353335
}
33363336
}
33373337

3338-
static void
3338+
void
33393339
CallXactCallbacks(XactEvent event)
33403340
{
33413341
XactCallbackItem *item;

src/include/access/twophase.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,7 @@ extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
5757
XLogRecPtr end_lsn);
5858
extern void PrepareRedoRemove(TransactionId xid, bool giveWarning);
5959
extern void restoreTwoPhaseData(void);
60+
61+
extern const char *GetLockedGlobalTransactionId(void);
62+
6063
#endif /* TWOPHASE_H */

src/include/access/xact.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,17 @@ extern int MyXactFlags;
9797
*/
9898
typedef enum
9999
{
100+
XACT_EVENT_START,
100101
XACT_EVENT_COMMIT,
101102
XACT_EVENT_PARALLEL_COMMIT,
102103
XACT_EVENT_ABORT,
103104
XACT_EVENT_PARALLEL_ABORT,
104105
XACT_EVENT_PREPARE,
105106
XACT_EVENT_PRE_COMMIT,
106107
XACT_EVENT_PARALLEL_PRE_COMMIT,
107-
XACT_EVENT_PRE_PREPARE
108+
XACT_EVENT_PRE_PREPARE,
109+
XACT_EVENT_COMMIT_PREPARED,
110+
XACT_EVENT_ABORT_PREPARED
108111
} XactEvent;
109112

110113
typedef void (*XactCallback) (XactEvent event, void *arg);
@@ -405,5 +408,6 @@ extern void ParseAbortRecord(uint8 info, xl_xact_abort *xlrec, xl_xact_parsed_ab
405408
extern void EnterParallelMode(void);
406409
extern void ExitParallelMode(void);
407410
extern bool IsInParallelMode(void);
411+
extern void CallXactCallbacks(XactEvent event);
408412

409413
#endif /* XACT_H */

0 commit comments

Comments
 (0)