]> granicus.if.org Git - postgresql/commit
Fix corner case in autovacuum-forcing logic for multixact wraparound.
authorRobert Haas <rhaas@postgresql.org>
Fri, 19 Jun 2015 15:28:30 +0000 (11:28 -0400)
committerRobert Haas <rhaas@postgresql.org>
Fri, 19 Jun 2015 15:28:30 +0000 (11:28 -0400)
commited16f73c574660aa0902caa1c0adeba07f8c70a5
tree3ebcb63f3cccf45c711414dda3de69dc8457a2b2
parent86e4751786bb0dcb29528ef49b067d0e393e4934
Fix corner case in autovacuum-forcing logic for multixact wraparound.

Since find_multixact_start() relies on SimpleLruDoesPhysicalPageExist(),
and that function looks only at the on-disk state, it's possible for it
to fail to find a page that exists in the in-memory SLRU that has not
been written yet.  If that happens, SetOffsetVacuumLimit() will
erroneously decide to force emergency autovacuuming immediately.

We should probably fix find_multixact_start() to consider the data
cached in memory as well as on the on-disk state, but that's no excuse
for SetOffsetVacuumLimit() to be stupid about the case where it can
no longer read the value after having previously succeeded in doing so.

Report by Andres Freund.
src/backend/access/transam/multixact.c