Skip to content

Commit bfa7286

Browse files
committed
Reverted MtmAdjustOldestXid
1 parent 3ccc08f commit bfa7286

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

contrib/mmts/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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy