]> granicus.if.org Git - postgresql/commitdiff
Adjust cutoff points in newly-added sanity tests.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 21 Jul 2014 16:58:44 +0000 (12:58 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 21 Jul 2014 16:58:44 +0000 (12:58 -0400)
Per recommendation from Andres.

src/backend/commands/vacuum.c

index ec9a7b65874a4697faadd15c1666de03153a9eae..e5fefa35a41614d2a85bcdb4c482e1cfc708e7e4 100644 (file)
@@ -745,13 +745,13 @@ vac_update_relstats(Relation relation,
         * 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
         * 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
-        * future".
+        * This should match vac_update_datfrozenxid() concerning what we consider
+        * to be "in the future".
         */
        if (TransactionIdIsNormal(frozenxid) &&
                pgcform->relfrozenxid != frozenxid &&
                (TransactionIdPrecedes(pgcform->relfrozenxid, frozenxid) ||
-                TransactionIdPrecedes(GetOldestXmin(NULL, true),
+                TransactionIdPrecedes(ReadNewTransactionId(),
                                                           pgcform->relfrozenxid)))
        {
                pgcform->relfrozenxid = frozenxid;
@@ -762,7 +762,7 @@ vac_update_relstats(Relation relation,
        if (MultiXactIdIsValid(minmulti) &&
                pgcform->relminmxid != minmulti &&
                (MultiXactIdPrecedes(pgcform->relminmxid, minmulti) ||
-                MultiXactIdPrecedes(GetOldestMultiXactId(), pgcform->relminmxid)))
+                MultiXactIdPrecedes(ReadNextMultiXactId(), pgcform->relminmxid)))
        {
                pgcform->relminmxid = minmulti;
                dirty = true;
@@ -803,8 +803,8 @@ vac_update_datfrozenxid(void)
        SysScanDesc scan;
        HeapTuple       classTup;
        TransactionId newFrozenXid;
-       TransactionId lastSaneFrozenXid;
        MultiXactId newMinMulti;
+       TransactionId lastSaneFrozenXid;
        MultiXactId lastSaneMinMulti;
        bool            bogus = false;
        bool            dirty = false;
@@ -815,13 +815,21 @@ vac_update_datfrozenxid(void)
         * committed pg_class entries for new tables; see AddNewRelationTuple().
         * 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
         * 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