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

Commit 5a61a27

Browse files
knizhnikkelvich
authored andcommitted
Reverted MtmAdjustOldestXid
1 parent a0f28cd commit 5a61a27

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

multimaster.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ bool MtmXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot)
404404
* We collest oldest CSNs from all nodes and choose minimum from them.
405405
* If no such XID can be located, then return previously observed oldest XID
406406
*/
407+
#if 0
407408
static TransactionId
408409
MtmAdjustOldestXid(TransactionId xid)
409410
{
@@ -457,7 +458,53 @@ MtmAdjustOldestXid(TransactionId xid)
457458
}
458459
return xid;
459460
}
461+
#else
462+
static TransactionId
463+
MtmAdjustOldestXid(TransactionId xid)
464+
{
465+
if (TransactionIdIsValid(xid)) {
466+
MtmTransState *ts, *prev = NULL;
467+
int i;
460468

469+
MtmLock(LW_EXCLUSIVE);
470+
ts = (MtmTransState*)hash_search(MtmXid2State, &xid, HASH_FIND, NULL);
471+
if (ts != NULL && ts->status == TRANSACTION_STATUS_COMMITTED) {
472+
csn_t oldestSnapshot = ts->csn;
473+
Mtm->nodes[MtmNodeId-1].oldestSnapshot = oldestSnapshot;
474+
for (i = 0; i < MtmNodes; i++) {
475+
if (!BIT_CHECK(Mtm->disabledNodeMask, i)
476+
&& Mtm->nodes[i].oldestSnapshot < oldestSnapshot)
477+
{
478+
oldestSnapshot = Mtm->nodes[i].oldestSnapshot;
479+
}
480+
}
481+
oldestSnapshot -= MtmVacuumDelay*USEC;
482+
483+
for (ts = Mtm->transListHead;
484+
ts != NULL
485+
&& ts->csn < oldestSnapshot
486+
&& TransactionIdPrecedes(ts->xid, xid)
487+
&& (ts->status == TRANSACTION_STATUS_COMMITTED ||
488+
ts->status == TRANSACTION_STATUS_ABORTED);
489+
prev = ts, ts = ts->next)
490+
{
491+
if (prev != NULL) {
492+
/* Remove information about too old transactions */
493+
hash_search(MtmXid2State, &prev->xid, HASH_REMOVE, NULL);
494+
}
495+
}
496+
}
497+
if (prev != NULL) {
498+
Mtm->transListHead = prev;
499+
Mtm->oldestXid = xid = prev->xid;
500+
} else if (TransactionIdPrecedes(Mtm->oldestXid, xid)) {
501+
xid = Mtm->oldestXid;
502+
}
503+
MtmUnlock();
504+
}
505+
return xid;
506+
}
507+
#endif
461508
/*
462509
* -------------------------------------------
463510
* Transaction list manipulation

0 commit comments

Comments
 (0)