Adjust cutoff points in newly-added sanity tests.

Per recommendation from Andres.
This commit is contained in:
Tom Lane 2014-07-21 12:58:41 -04:00
parent 78db307bb2
commit 87f830e0ce
1 changed files with 15 additions and 7 deletions

View File

@ -745,13 +745,13 @@ vac_update_relstats(Relation relation,
* which case we don't want to forget the work it already did. However, * which case we don't want to forget the work it already did. However,
* if the stored relfrozenxid is "in the future", then it must be corrupt * if the stored relfrozenxid is "in the future", then it must be corrupt
* and it seems best to overwrite it with the cutoff we used this time. * and it seems best to overwrite it with the cutoff we used this time.
* See vac_update_datfrozenxid() concerning what we consider to be "in the * This should match vac_update_datfrozenxid() concerning what we consider
* future". * to be "in the future".
*/ */
if (TransactionIdIsNormal(frozenxid) && if (TransactionIdIsNormal(frozenxid) &&
pgcform->relfrozenxid != frozenxid && pgcform->relfrozenxid != frozenxid &&
(TransactionIdPrecedes(pgcform->relfrozenxid, frozenxid) || (TransactionIdPrecedes(pgcform->relfrozenxid, frozenxid) ||
TransactionIdPrecedes(GetOldestXmin(NULL, true), TransactionIdPrecedes(ReadNewTransactionId(),
pgcform->relfrozenxid))) pgcform->relfrozenxid)))
{ {
pgcform->relfrozenxid = frozenxid; pgcform->relfrozenxid = frozenxid;
@ -762,7 +762,7 @@ vac_update_relstats(Relation relation,
if (MultiXactIdIsValid(minmulti) && if (MultiXactIdIsValid(minmulti) &&
pgcform->relminmxid != minmulti && pgcform->relminmxid != minmulti &&
(MultiXactIdPrecedes(pgcform->relminmxid, minmulti) || (MultiXactIdPrecedes(pgcform->relminmxid, minmulti) ||
MultiXactIdPrecedes(GetOldestMultiXactId(), pgcform->relminmxid))) MultiXactIdPrecedes(ReadNextMultiXactId(), pgcform->relminmxid)))
{ {
pgcform->relminmxid = minmulti; pgcform->relminmxid = minmulti;
dirty = true; dirty = true;
@ -803,8 +803,8 @@ vac_update_datfrozenxid(void)
SysScanDesc scan; SysScanDesc scan;
HeapTuple classTup; HeapTuple classTup;
TransactionId newFrozenXid; TransactionId newFrozenXid;
TransactionId lastSaneFrozenXid;
MultiXactId newMinMulti; MultiXactId newMinMulti;
TransactionId lastSaneFrozenXid;
MultiXactId lastSaneMinMulti; MultiXactId lastSaneMinMulti;
bool bogus = false; bool bogus = false;
bool dirty = false; bool dirty = false;
@ -815,13 +815,21 @@ vac_update_datfrozenxid(void)
* committed pg_class entries for new tables; see AddNewRelationTuple(). * committed pg_class entries for new tables; see AddNewRelationTuple().
* So we cannot produce a wrong minimum by starting with this. * So we cannot produce a wrong minimum by starting with this.
*/ */
newFrozenXid = lastSaneFrozenXid = GetOldestXmin(NULL, true); newFrozenXid = GetOldestXmin(NULL, true);
/* /*
* Similarly, initialize the MultiXact "min" with the value that would be * Similarly, initialize the MultiXact "min" with the value that would be
* used on pg_class for new tables. See AddNewRelationTuple(). * used on pg_class for new tables. See AddNewRelationTuple().
*/ */
newMinMulti = lastSaneMinMulti = GetOldestMultiXactId(); newMinMulti = GetOldestMultiXactId();
/*
* Identify the latest relfrozenxid and relminmxid values that we could
* validly see during the scan. These are conservative values, but it's
* not really worth trying to be more exact.
*/
lastSaneFrozenXid = ReadNewTransactionId();
lastSaneMinMulti = ReadNextMultiXactId();
/* /*
* We must seqscan pg_class to find the minimum Xid, because there is no * We must seqscan pg_class to find the minimum Xid, because there is no