Skip to content

Commit f2ce6d4

Browse files
committed
Update 2PC support
1 parent 89b849f commit f2ce6d4

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

contrib/mmts/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
{

contrib/mmts/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);

contrib/mmts/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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy