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

Commit f7ac918

Browse files
knizhnikkelvich
authored andcommitted
Some 2pc fixes
1 parent 522f183 commit f7ac918

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

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;

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:

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)