Skip to content

Commit 996d273

Browse files
committed
Avoid consuming an XID during vac_truncate_clog().
vac_truncate_clog() uses its own transaction ID as the comparison point in a sanity check that no database's datfrozenxid has already wrapped around "into the future". That was probably fine when written, but in a lazy vacuum we won't have assigned an XID, so calling GetCurrentTransactionId() causes an XID to be assigned when otherwise one would not be. Most of the time that's not a big problem ... but if we are hard up against the wraparound limit, consuming XIDs during antiwraparound vacuums is a very bad thing. Instead, use ReadNewTransactionId(), which not only avoids this problem but is in itself a better comparison point to test whether wraparound has already occurred. Report and patch by Alexander Korotkov. Back-patch to all versions. Report: <CAPpHfdspOkmiQsxh-UZw2chM6dRMwXAJGEmmbmqYR=yvM7-s6A@mail.gmail.com>
1 parent 0c7cd45 commit 996d273

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/backend/commands/vacuum.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ vac_truncate_clog(TransactionId frozenXID,
10511051
TransactionId lastSaneFrozenXid,
10521052
MultiXactId lastSaneMinMulti)
10531053
{
1054-
TransactionId myXID = GetCurrentTransactionId();
1054+
TransactionId nextXID = ReadNewTransactionId();
10551055
Relation relation;
10561056
HeapScanDesc scan;
10571057
HeapTuple tuple;
@@ -1100,7 +1100,7 @@ vac_truncate_clog(TransactionId frozenXID,
11001100
MultiXactIdPrecedes(lastSaneMinMulti, dbform->datminmxid))
11011101
bogus = true;
11021102

1103-
if (TransactionIdPrecedes(myXID, dbform->datfrozenxid))
1103+
if (TransactionIdPrecedes(nextXID, dbform->datfrozenxid))
11041104
frozenAlreadyWrapped = true;
11051105
else if (TransactionIdPrecedes(dbform->datfrozenxid, frozenXID))
11061106
{

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