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