Re: Changing the state of data checksums in a running cluster
Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Hi, On Thu, 23 Apr 2026 at 15:47, Daniel Gustafsson <daniel@yesql.se> wrote: > While performing extensive post-commit testing using the built-in TAP > tests in > checksum_extended mode, Tomas observed a couple issues. The testing was > done > on multiple machines, ranging from a fast x86 machine to a much slower > rpi4, > but they all performed a very large number of iterations. The combination > of > hardware and the large number of tests executed is likely why some of the > issues went unnoticed. > > Thanks for the patchset. I applied the eight proposed patches on top of current master and did a review/test pass. I do have one concern about the duplicate-launcher race discussed earlier, though. I don't think 0006 fully addresses the duplicate-launcher exit race [1]. I was able to reproduce the issue with a deterministic test using the existing test_checksums delay hooks: delay the initial StartDataChecksumsWorkerLauncher() path so two quick pg_enable_data_checksums() calls can queue two launchers, delay the final transition to on, then fire follow-up pg_enable_data_checksums() calls while the real launcher is still active. The relevant logs from that run: [37940] DEBUG: background worker "datachecksums launcher" started [37941] DEBUG: background worker "datachecksums launcher" started [37940] LOG: enabling data checksums requested, starting data checksum calculation [37941] LOG: background worker "datachecksums launcher" already running, exiting [37940] LOG: initiating data checksum processing in database "postgres" [37952] DEBUG: background worker "datachecksums launcher" started [37952] LOG: enabling data checksums requested, starting data checksum calculation [37952] LOG: initiating data checksum processing in database "postgres" [37952] WARNING: cannot set data checksums to "on", current state is not "inprogress-on", disabling [37989] DEBUG: background worker "datachecksums launcher" started [37989] LOG: enabling data checksums requested, starting data checksum calculation [38006] DEBUG: background worker "datachecksums launcher" started [38006] LOG: enabling data checksums requested, starting data checksum calculation So, at least the duplicate-launcher part is still reproducible after the fixup series. The warning also suggests the state can be perturbed by the duplicate launcher, although in my run the final state still ended up as on. A few other smaller comments/nits: 1. In src/backend/access/transam/xlog.c, the comment in SetDataChecksumsOff() says the branch implies the state is inprogress-on or inprogress-off, but after the patch inprogress-on is handled by the preceding if condition. It looks like this should probably only mention inprogress-off. 2. There is a repeated typo in comments: src/backend/utils/init/postinit.c: "interrups" -> "interrupts" src/backend/postmaster/auxprocess.c: "interrups" -> "interrupts" 3. A few commit messages could use a quick polish pass: 0002: "onine" -> "online" 0004: "Additionelly" -> "Additionally" 0006: "being enabled of disabled" -> "being enabled or disabled" 0006: "change it's operation" -> "change its operation" 0006: "ss now avoided" -> "is now avoided" 4. One minor question on 0006: the runtime cost-parameter update path is only meaningful while checksums are being enabled. That looks fine from the current control flow, but would it be worth adding a short comment or assertion near that update path to make the assumption explicit? Other than the above concern and cleanup items, the approach and behavior looked good to me. Regards, Ayush [1] PostgreSQL: [BUG] Race in online checksums launcher_exit() <https://www.postgresql.org/message-id/CAJTYsWWg6tFrdMhWs5PkwESTNeeUUsMuY17O4UmPPh771c3stA%40mail.gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Use correct datatype for PID
- 0ca1b3010597 19 (unreleased) landed
-
Improve comments in online checksums code
- cd857dec0e0a 19 (unreleased) landed
-
Fix checksum state transition during promotion
- 5fee7cab1b87 19 (unreleased) landed
-
Fix regex searching for page verification failures in tests
- 486b9a9b9eb4 19 (unreleased) landed
-
Apply data-checksum worker throttling parameters
- 9a39056c418c 19 (unreleased) landed
-
Skip WAL for unlogged main fork during online checksum enable
- 2018bd616790 19 (unreleased) landed
-
Fix data_checksum GUC show_hook
- 75152c5dc5d3 19 (unreleased) landed
-
Improve database detection logic in datachecksumsworker
- 1df361e3d82c 19 (unreleased) landed
-
Improve handling of concurrent checksum requests
- bf25e5571b32 19 (unreleased) landed
-
Typo and spelling fixups for online checksums
- 381d19da1536 19 (unreleased) landed
-
Fix invalid checksum state transition in checkpoints
- 25b922ec5825 19 (unreleased) landed
-
Handle data_checksum state changes during launcher_exit
- 8fb8ded88956 19 (unreleased) landed
-
Test improvements for online checksums
- a0d8f4c1ae16 19 (unreleased) landed
-
Prevent pg_enable/disable_data_checksums() on standby
- b120358c612d 19 (unreleased) landed
-
Test stabilization for online checksums
- 07009121c235 19 (unreleased) landed
-
Make data checksum tests more resilient for slow machines
- 0036232ba8fb 19 (unreleased) landed
-
Formalize WAL record for XLOG_CHECKPOINT_REDO
- 097ab69d17f7 19 (unreleased) landed
-
Revert "Get rid of WALBufMappingLock"
- c13070a27b63 19 (unreleased) cited
-
Get rid of WALBufMappingLock
- bc22dc0e0ddc 18.0 cited
-
Improve grammar of options for command arrays in TAP tests
- ce1b0f9da03e 18.0 cited