Commit 802bde87 authored by Simon Riggs's avatar Simon Riggs

Remove cut-off bug from RunningTransactionData

32ac7a11 tried to fix a Hot Standby issue
reported by Greg Stark, but in doing so caused
a different bug to appear, noted by Andres Freund.

Revoke the core changes from 32ac7a11,
leaving in its place a minor change in code
ordering and comments to explain for the future.
parent 91781335
......@@ -1907,7 +1907,7 @@ ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc)
* GetRunningTransactionData -- returns information about running transactions.
*
* Similar to GetSnapshotData but returns more information. We include
* all PGXACTs with an assigned TransactionId, but not VACUUM processes.
* all PGXACTs with an assigned TransactionId, even VACUUM processes.
*
* We acquire XidGenLock and ProcArrayLock, but the caller is responsible for
* releasing them. Acquiring XidGenLock ensures that no new XIDs enter the proc
......@@ -1995,10 +1995,6 @@ GetRunningTransactionData(void)
volatile PGXACT *pgxact = &allPgXact[pgprocno];
TransactionId xid;
/* Ignore procs running LAZY VACUUM */
if (pgxact->vacuumFlags & PROC_IN_VACUUM)
continue;
/* Fetch xid just once - see GetNewTransactionId */
xid = pgxact->xid;
......@@ -2009,13 +2005,26 @@ GetRunningTransactionData(void)
if (!TransactionIdIsValid(xid))
continue;
xids[count++] = xid;
/*
* Be careful not to exclude any xids before calculating the values of
* oldestRunningXid and suboverflowed, since these are used to clean
* up transaction information held on standbys.
*/
if (TransactionIdPrecedes(xid, oldestRunningXid))
oldestRunningXid = xid;
if (pgxact->overflowed)
suboverflowed = true;
/*
* If we wished to exclude xids this would be the right place for it.
* Procs with the PROC_IN_VACUUM flag set don't usually assign xids,
* but they do during truncation at the end when they get the lock
* and truncate, so it is not much of a problem to include them if they
* are seen and it is cleaner to include them.
*/
xids[count++] = xid;
}
/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment