]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Fix checksum state transition during promotion
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Fri, 29 May 2026 19:26:18 +0000 (21:26 +0200)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Fri, 29 May 2026 19:26:18 +0000 (21:26 +0200)
commit5fee7cab1b8746c9e1bc25b20158cb074c7a76da
tree2ea547f0353c1332e15494aecb5b0a070876322c
parent38470c2c1ea7dc0971d7abf65ef1dde80824ef43
Fix checksum state transition during promotion

When a standby is promoted to primary during checksum enabling when the
state is inprogress-on, the standby shall revert the state to off since
checksums weren't fully enabled at the time of the crash.  Consider the
following scenario:

  1) primary/standby cluster has checksums off
  2) primary starts enabling checksums
  3) primary moves to inprogress-on
  4) standby receives that and moves to inprogress-on too
  5) primary crashes
  6) standby gets promoted, and does the StartupXLOG thing
  7) standby moves from inprogress-on back to off

Any processes in the standby need to be informed at step 6 to change
state with a procsignalbarrier, else they will stay in inprogress-on
while new backends will see the state as off.  StartupXLOG failed to
emit a procsignalbarrier which caused inconsistent state in the node
promoted to primary.

Fixed by emitting a procsignalbarrier during promotion, and adding a
new test for this scenario.

Author: Daniel Gustafsson <daniel@yesql.se>
Reported-by: Tomas Vondra <tomas@vondra.me>
Discussion: https://postgr.es/m/f1281cf3-89a3-4936-9bc5-2a5a6291229f@vondra.me
src/backend/access/transam/xlog.c
src/test/modules/test_checksums/t/003_standby_restarts.pl