Re: Changing the state of data checksums in a running cluster
Daniel Gustafsson <daniel@yesql.se>
Attachments
- v20260312-0001-Online-enabling-and-disabling-of-data-chec.patch (application/octet-stream) patch v20260312-0001
> On 6 Feb 2026, at 18:15, Tomas Vondra <tomas@vondra.me> wrote: > I spent a bit more time looking at this today, and I figured out a > simpler way to "cause trouble" by using PITR. I don't know if this has > the same root cause as the failures in the 006 TAP test, but I find it > interesting and I think it highlights some issues with the new patch. I've encoded some of this into a new test suite in the attached patchset, having it in a repeatable test should make it easier to reproduce and reason about. Attached is a rebase of the patchset which further refines the switch to using XLOG_CHECKPOINT_* records which was proposed by Andres upstream. The errors I encountered could be traced to replay across multiple state transitions (with at least one case of ON->OFF), and re-introducing checkpoints at on and off state transitions helped removing those. * A lot of code has been moved out from xlog.c and into the file which contains the code for the datachecksumsworker. This file has in turn been renamed to signal what it's used for. It should probably be moved from backend/postmaster but it's not clear to me where it should go. * Improved signalhandling in the worker code. * A new testsuite for PITR is added, which is based on Tomas' findings. This can be further increased and refined but it's at least a start. * Another new testsuite which changes full_page_writes settings is also added. This one should perhaps be rolled into 001_basic, not sure. * Tests 006 and 007, the pgbench "torture test" suites, are now being run in a pared-down fashion when PG_TEST_EXTRA isn't defined, rather than being skipped entirely * The minimum max_wal_size in tests is now 32 instead of 64. * Lots of polish and small tweaking and new comments There are a few TODOs, the more interesting ones include: * The change to XLOG_CHECKPOINT_REDO to move the wal_level into a proper record structure should be pulled out as a 0001 patch as it's an cleanup that has value on its own. * Try to move even more code awy from xlog.c * Address, and remove, all XXX comments (most of which stem from a much earlier version of the patchset). * The code for emitting, and waiting on, the procsignalbarrier exists in multiple copies which needs to be refactored into a single one. * Tests failed in Autoconf on CI, which I need to fix. My next step will be addressing these TODOs, but I wanted to get a new version on the list sooner rather than later. -- Daniel Gustafsson
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