Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit66ee06f

Browse files
knizhnikkelvich
authored andcommitted
Yet another version of MtmAdjustOldestXid
1 parentbf168d6 commit66ee06f

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

‎multimaster.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ csn_t MtmTransactionSnapshot(TransactionId xid)
329329

330330
MtmLock(LW_SHARED);
331331
ts=hash_search(MtmXid2State,&xid,HASH_FIND,NULL);
332-
if (ts!=NULL) {
332+
if (ts!=NULL&& !ts->isLocal) {
333333
snapshot=ts->snapshot;
334334
}
335335
MtmUnlock();
@@ -451,8 +451,8 @@ MtmAdjustOldestXid(TransactionId xid)
451451

452452
MtmLock(LW_EXCLUSIVE);
453453
ts= (MtmTransState*)hash_search(MtmXid2State,&xid,HASH_FIND,NULL);
454-
if (ts!=NULL&&ts->status==TRANSACTION_STATUS_COMMITTED) {
455-
csn_toldestSnapshot=ts->csn;
454+
if (ts!=NULL) {
455+
csn_toldestSnapshot=ts->snapshot;
456456
Mtm->nodes[MtmNodeId-1].oldestSnapshot=oldestSnapshot;
457457
for (i=0;i<Mtm->nAllNodes;i++) {
458458
if (!BIT_CHECK(Mtm->disabledNodeMask,i)
@@ -482,8 +482,7 @@ MtmAdjustOldestXid(TransactionId xid)
482482
if (prev!=NULL) {
483483
Mtm->transListHead=prev;
484484
Mtm->oldestXid=xid=prev->xid;
485-
}else {
486-
Assert(TransactionIdPrecedesOrEquals(Mtm->oldestXid,xid));
485+
}elseif (TransactionIdPrecedes(Mtm->oldestXid,xid)) {
487486
xid=Mtm->oldestXid;
488487
}
489488
}else {
@@ -649,6 +648,7 @@ MtmCreateTransState(MtmCurrentTrans* x)
649648
if (!found) {
650649
ts->status=TRANSACTION_STATUS_IN_PROGRESS;
651650
ts->snapshot=x->snapshot;
651+
ts->isLocal= true;
652652
if (TransactionIdIsValid(x->gtid.xid)) {
653653
Assert(x->gtid.node!=MtmNodeId);
654654
ts->gtid=x->gtid;
@@ -703,7 +703,8 @@ MtmPrePrepareTransaction(MtmCurrentTrans* x)
703703
/*
704704
* Invalid CSN prevent replication of transaction by logical replication
705705
*/
706-
ts->snapshot=x->isReplicated|| !x->containsDML ?INVALID_CSN :x->snapshot;
706+
ts->isLocal=x->isReplicated|| !x->containsDML;
707+
ts->snapshot=x->snapshot;
707708
ts->csn=MtmAssignCSN();
708709
ts->procno=MyProc->pgprocno;
709710
ts->nVotes=1;/* I am voted myself */
@@ -833,7 +834,8 @@ MtmEndTransaction(MtmCurrentTrans* x, bool commit)
833834
Assert(TransactionIdIsValid(x->xid));
834835
ts=hash_search(MtmXid2State,&x->xid,HASH_ENTER,NULL);
835836
ts->status=TRANSACTION_STATUS_ABORTED;
836-
ts->snapshot=INVALID_CSN;
837+
ts->isLocal= true;
838+
ts->snapshot=x->snapshot;
837839
ts->csn=MtmAssignCSN();
838840
ts->gtid=x->gtid;
839841
ts->nSubxids=0;

‎multimaster.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ typedef struct MtmTransState
145145
structMtmTransState*nextVoting;/* Next element in L1-list of voting transactions. */
146146
structMtmTransState*next;/* Next element in L1 list of all finished transaction present in xid2state hash */
147147
boolvotingCompleted;/* 2PC voting is completed */
148+
boolisLocal;/* Transaction is either replicated, either doesn't contain DML statements, so it shoudl be ignored by pglogical replication */
148149
TransactionIdxids[1];/* [Mtm->nAllNodes]: transaction ID at replicas */
149150
}MtmTransState;
150151

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp