@@ -329,7 +329,7 @@ csn_t MtmTransactionSnapshot(TransactionId xid)
329
329
330
330
MtmLock (LW_SHARED );
331
331
ts = hash_search (MtmXid2State , & xid , HASH_FIND , NULL );
332
- if (ts != NULL ) {
332
+ if (ts != NULL && ! ts -> isLocal ) {
333
333
snapshot = ts -> snapshot ;
334
334
}
335
335
MtmUnlock ();
@@ -451,8 +451,8 @@ MtmAdjustOldestXid(TransactionId xid)
451
451
452
452
MtmLock (LW_EXCLUSIVE );
453
453
ts = (MtmTransState * )hash_search (MtmXid2State , & xid , HASH_FIND , NULL );
454
- if (ts != NULL && ts -> status == TRANSACTION_STATUS_COMMITTED ) {
455
- csn_t oldestSnapshot = ts -> csn ;
454
+ if (ts != NULL ) {
455
+ csn_t oldestSnapshot = ts -> snapshot ;
456
456
Mtm -> nodes [MtmNodeId - 1 ].oldestSnapshot = oldestSnapshot ;
457
457
for (i = 0 ; i < Mtm -> nAllNodes ; i ++ ) {
458
458
if (!BIT_CHECK (Mtm -> disabledNodeMask , i )
@@ -482,8 +482,7 @@ MtmAdjustOldestXid(TransactionId xid)
482
482
if (prev != NULL ) {
483
483
Mtm -> transListHead = prev ;
484
484
Mtm -> oldestXid = xid = prev -> xid ;
485
- } else {
486
- Assert (TransactionIdPrecedesOrEquals (Mtm -> oldestXid , xid ));
485
+ } else if (TransactionIdPrecedes (Mtm -> oldestXid , xid )) {
487
486
xid = Mtm -> oldestXid ;
488
487
}
489
488
} else {
@@ -649,6 +648,7 @@ MtmCreateTransState(MtmCurrentTrans* x)
649
648
if (!found ) {
650
649
ts -> status = TRANSACTION_STATUS_IN_PROGRESS ;
651
650
ts -> snapshot = x -> snapshot ;
651
+ ts -> isLocal = true;
652
652
if (TransactionIdIsValid (x -> gtid .xid )) {
653
653
Assert (x -> gtid .node != MtmNodeId );
654
654
ts -> gtid = x -> gtid ;
@@ -703,7 +703,8 @@ MtmPrePrepareTransaction(MtmCurrentTrans* x)
703
703
/*
704
704
* Invalid CSN prevent replication of transaction by logical replication
705
705
*/
706
- ts -> snapshot = x -> isReplicated || !x -> containsDML ? INVALID_CSN : x -> snapshot ;
706
+ ts -> isLocal = x -> isReplicated || !x -> containsDML ;
707
+ ts -> snapshot = x -> snapshot ;
707
708
ts -> csn = MtmAssignCSN ();
708
709
ts -> procno = MyProc -> pgprocno ;
709
710
ts -> nVotes = 1 ; /* I am voted myself */
@@ -833,7 +834,8 @@ MtmEndTransaction(MtmCurrentTrans* x, bool commit)
833
834
Assert (TransactionIdIsValid (x -> xid ));
834
835
ts = hash_search (MtmXid2State , & x -> xid , HASH_ENTER , NULL );
835
836
ts -> status = TRANSACTION_STATUS_ABORTED ;
836
- ts -> snapshot = INVALID_CSN ;
837
+ ts -> isLocal = true;
838
+ ts -> snapshot = x -> snapshot ;
837
839
ts -> csn = MtmAssignCSN ();
838
840
ts -> gtid = x -> gtid ;
839
841
ts -> nSubxids = 0 ;
0 commit comments