Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 41a090d

Browse files
committed
bring xact events back
1 parent b4da6f1 commit 41a090d

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
@@ -1509,6 +1509,12 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
15091509
LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE);
15101510
RemoveGXact(gxact);
15111511
LWLockRelease(TwoPhaseStateLock);
1512+
1513+
if (isCommit)
1514+
CallXactCallbacks(XACT_EVENT_COMMIT_PREPARED);
1515+
else
1516+
CallXactCallbacks(XACT_EVENT_ABORT_PREPARED);
1517+
15121518
MyLockedGxact = NULL;
15131519

15141520
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
@@ -305,7 +305,6 @@ static void AtCommit_Memory(void);
305305
static void AtStart_Cache(void);
306306
static void AtStart_Memory(void);
307307
static void AtStart_ResourceOwner(void);
308-
static void CallXactCallbacks(XactEvent event);
309308
static void CallSubXactCallbacks(SubXactEvent event,
310309
SubTransactionId mySubid,
311310
SubTransactionId parentSubid);
@@ -1928,6 +1927,7 @@ StartTransaction(void)
19281927
*/
19291928
s->state = TRANS_INPROGRESS;
19301929

1930+
CallXactCallbacks(XACT_EVENT_START);
19311931
ShowTransactionState("StartTransaction");
19321932
}
19331933

@@ -3339,7 +3339,7 @@ UnregisterXactCallback(XactCallback callback, void *arg)
33393339
}
33403340
}
33413341

3342-
static void
3342+
void
33433343
CallXactCallbacks(XactEvent event)
33443344
{
33453345
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);
@@ -403,5 +406,6 @@ extern void ParseAbortRecord(uint8 info, xl_xact_abort *xlrec, xl_xact_parsed_ab
403406
extern void EnterParallelMode(void);
404407
extern void ExitParallelMode(void);
405408
extern bool IsInParallelMode(void);
409+
extern void CallXactCallbacks(XactEvent event);
406410

407411
#endif /* XACT_H */

0 commit comments

Comments
 (0)