Re: collect_corrupt_items_vacuum.patch

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Noah Misch <noah@leadboat.com>, Alexander Korotkov <aekorotkov@gmail.com>
Cc: Dmitry Koval <d.koval@postgrespro.ru>, pgsql-hackers@lists.postgresql.org
Date: 2024-08-13T18:39:11Z
Lists: pgsql-hackers
This causes an assertion failure when executed in a hot standby server:

  select * from pg_check_visible('pg_database');

TRAP: failed Assert("!RecoveryInProgress()"), File: 
"../src/backend/storage/ipc/procarray.c", Line: 2710, PID: 1142572

GetStrictOldestNonRemovableTransactionId does this:

> 	if (rel == NULL || rel->rd_rel->relisshared || RecoveryInProgress())
> 	{
> 		/* Shared relation: take into account all running xids */
> 		runningTransactions = GetRunningTransactionData();
> 		LWLockRelease(ProcArrayLock);
> 		LWLockRelease(XidGenLock);
> 		return runningTransactions->oldestRunningXid;
> 	}

And GetRunningTransactionData() has this:

> 	Assert(!RecoveryInProgress());

So it's easy to see that you will hit that assertion.

-- 
Heikki Linnakangas
Neon (https://neon.tech)




Commits

  1. Fix GetStrictOldestNonRemovableTransactionId() on standby

  2. Fix typo in GetRunningTransactionData()

  3. Optimize memory access in GetRunningTransactionData()

  4. Fix false reports in pg_visibility

  5. Fix indentation