Skip to content

Commit 7764ed7

Browse files
committed
Some 2pc fixes
1 parent 2236c04 commit 7764ed7

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

contrib/mmts/multimaster.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ static void MtmBeginTransaction(MtmCurrentTrans* x);
103103
static void MtmPrecommitTransaction(MtmCurrentTrans* x);
104104
static bool MtmCommitTransaction(TransactionId xid, int nsubxids, TransactionId *subxids);
105105
static void MtmPrepareTransaction(MtmCurrentTrans* x);
106+
static void MtmCommitPreparedTransaction(MtmCurrentTrans* x);
106107
static void MtmEndTransaction(MtmCurrentTrans* x, bool commit);
107108
static TransactionId MtmGetOldestXmin(Relation rel, bool ignoreVacuum);
108109
static bool MtmXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot);
@@ -494,6 +495,9 @@ MtmXactCallback(XactEvent event, void *arg)
494495
case XACT_EVENT_PREPARE:
495496
MtmPrepareTransaction(&dtmTx);
496497
break;
498+
case XACT_EVENT_COMMIT_PREPARED:
499+
MtmCommitPreparedTransaction(&dtmTx);
500+
break;
497501
case XACT_EVENT_COMMIT:
498502
MtmEndTransaction(&dtmTx, true);
499503
break;
@@ -652,10 +656,15 @@ static void MtmPrecommitTransaction(MtmCurrentTrans* x)
652656
static void
653657
MtmPrepareTransaction(MtmCurrentTrans* x)
654658
{
655-
TransactionId *subxids;
656-
int nSubxids;
657659
MtmPrecommitTransaction(x);
658660
x->isPrepared = true;
661+
}
662+
663+
static void
664+
MtmCommitPreparedTransaction(MtmCurrentTrans* x)
665+
{
666+
TransactionId *subxids;
667+
int nSubxids;
659668
nSubxids = xactGetCommittedChildren(&subxids);
660669
if (!MtmCommitTransaction(x->xid, nSubxids, subxids))
661670
{
@@ -1536,12 +1545,15 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
15361545
char* gid = MtmGenerateGid();
15371546
if (!PrepareTransactionBlock(gid))
15381547
{
1548+
elog(WARNING, "Failed to prepare transaction %s", gid);
15391549
/* report unsuccessful commit in completionTag */
15401550
if (completionTag) {
15411551
strcpy(completionTag, "ROLLBACK");
15421552
}
15431553
/* ??? Should we do explicit rollback */
15441554
} else {
1555+
CommitTransactionCommand();
1556+
StartTransactionCommand();
15451557
FinishPreparedTransaction(gid, true);
15461558
}
15471559
return;

contrib/mmts/pglogical_apply.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ static void
467467
process_remote_commit(StringInfo in)
468468
{
469469
uint8 flags;
470-
const char *gid;
470+
const char *gid = NULL;
471471

472472
/* read flags */
473473
flags = pq_getmsgbyte(in);
@@ -480,6 +480,8 @@ process_remote_commit(StringInfo in)
480480
if (PGLOGICAL_XACT_EVENT(flags) != PGLOGICAL_COMMIT)
481481
gid = pq_getmsgstring(in);
482482

483+
MTM_TRACE("PGLOGICAL_RECV commit: flags=%d, gid=%s\n", flags, gid);
484+
483485
switch(PGLOGICAL_XACT_EVENT(flags))
484486
{
485487
case PGLOGICAL_COMMIT:

contrib/mmts/pglogical_proto.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ pglogical_write_commit(StringInfo out, PGLogicalOutputData *data,
145145
else
146146
Assert(false);
147147

148+
MTM_TRACE("PGLOGICAL_SEND commit: event=%d, gid=%s\n", flags, txn->gid);
149+
148150
/* send the flags field */
149151
pq_sendbyte(out, flags);
150152

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