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

Commit c9f6ec1

Browse files
knizhnikkelvich
authored andcommitted
Update 2PC support
1 parent 1200b6a commit c9f6ec1

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

multimaster.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,11 @@ MtmGetState(void)
11161116
return dtm;
11171117
}
11181118

1119+
TransactionId MtmGetCurrentTransaction(void)
1120+
{
1121+
return dtmTx.xid;
1122+
}
1123+
11191124
static void
11201125
MtmShmemStartup(void)
11211126
{

multimaster.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ extern void MtmSleep(timestamp_t interval);
157157
extern void MtmSetCurrentTransactionGID(char const* gid);
158158
extern void MtmSetCurrentTransactionCSN(csn_t csn);
159159
extern csn_t MtmGetTransactionCSN(TransactionId xid);
160+
extern TransactionId MtmGetCurrentTransactionId(void);
160161
extern bool MtmIsRecoveredNode(int nodeId);
161162
extern void MtmRefreshClusterStatus(bool nowait);
162163
extern void MtmSwitchClusterMode(MtmNodeStatus mode);

pglogical_apply.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,12 +484,15 @@ process_remote_commit(StringInfo in)
484484
{
485485
case PGLOGICAL_COMMIT:
486486
{
487-
if (IsTransactionState())
487+
if (IsTransactionState()) {
488+
Assert(TransactionIdIsValid(MtmGetCurrentTransactionId()));
488489
CommitTransactionCommand();
490+
}
489491
break;
490492
}
491493
case PGLOGICAL_PREPARE:
492494
{
495+
Assert(IsTransactionState() && TransactionIdIsValid(MtmGetCurrentTransactionId()));
493496
gid = pq_getmsgstring(in);
494497
/* prepare TBLOCK_INPROGRESS state for PrepareTransactionBlock() */
495498
BeginTransactionBlock();
@@ -503,6 +506,7 @@ process_remote_commit(StringInfo in)
503506
}
504507
case PGLOGICAL_COMMIT_PREPARED:
505508
{
509+
Assert(!TransactionIdIsValid(MtmGetCurrentTransactionId()));
506510
csn = pq_getmsgint64(in);
507511
gid = pq_getmsgstring(in);
508512
StartTransactionCommand();
@@ -514,6 +518,7 @@ process_remote_commit(StringInfo in)
514518
}
515519
case PGLOGICAL_ABORT_PREPARED:
516520
{
521+
Assert(!TransactionIdIsValid(MtmGetCurrentTransactionId()));
517522
gid = pq_getmsgstring(in);
518523
StartTransactionCommand();
519524
MtmSetCurrentTransactionGID(gid);
@@ -889,8 +894,9 @@ void MtmExecutor(int id, void* work, size_t size)
889894
{
890895
EmitErrorReport();
891896
FlushErrorState();
892-
MTM_TRACE("%d: REMOTE abort transaction %d\n", MyProcPid, GetCurrentTransactionId());
897+
MTM_TRACE("%d: REMOTE begin abort transaction %d\n", MyProcPid, MtmGetCurrentTransactionId());
893898
AbortCurrentTransaction();
899+
MTM_TRACE("%d: REMOTE end abort transaction %d\n", MyProcPid, MtmGetCurrentTransactionId());
894900
}
895901
PG_END_TRY();
896902

0 commit comments

Comments
 (0)