diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-05-04 15:24:44 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-05-04 18:23:58 -0300 |
commit | e1d634758e487fdec117ab4e1679240e48f2092c (patch) | |
tree | 25d8484ad61910f1db7dd91fb1383f6ffa67f2ab /src/backend/access/transam/xlog.c | |
parent | 56a45646d49b6c033adc42469f8e4361f82440a2 (diff) | |
download | postgresql-e1d634758e487fdec117ab4e1679240e48f2092c.tar.gz postgresql-e1d634758e487fdec117ab4e1679240e48f2092c.zip |
Don't mark pages all-visible spuriously
Dan Wood diagnosed a long-standing problem that pages containing tuples
that are locked by multixacts containing live lockers may spuriously end
up as candidates for getting their all-visible flag set. This has the
long-term effect that multixacts remain unfrozen; this may previously
pass undetected, but since commit XYZ it would be reported as
"ERROR: found multixact 134100944 from before relminmxid 192042633"
because when a later vacuum tries to freeze the page it detects that a
multixact that should have gotten frozen, wasn't.
Dan proposed a (correct) patch that simply sets a variable to its
correct value, after a bogus initialization. But, per discussion, it
seems better coding to avoid the bogus initializations altogether, since
they could give rise to more bugs later. Therefore this fix rewrites
the logic a little bit to avoid depending on the bogus initializations.
This bug was part of a family introduced in 9.6 by commit a892234f830e;
later, commit 38e9f90a227d fixed most of them, but this one was
unnoticed.
Authors: Dan Wood, Pavan Deolasee, Álvaro Herrera
Reviewed-by: Masahiko Sawada, Pavan Deolasee, Álvaro Herrera
Discussion: https://postgr.es/m/84EBAC55-F06D-4FBE-A3F3-8BDA093CE3E3@amazon.com
Diffstat (limited to 'src/backend/access/transam/xlog.c')
0 files changed, 0 insertions, 0 deletions