Re: Changing the state of data checksums in a running cluster
Daniel Gustafsson <daniel@yesql.se>
Attachments
- v20260316-0001-Add-proper-WAL-record-for-XLOG_CHECKPOINT_.patch (application/octet-stream) patch v20260316-0001
- v20260316-0002-Online-enabling-and-disabling-of-data-chec.patch (application/octet-stream) patch v20260316-0002
> On 15 Mar 2026, at 23:47, Tomas Vondra <tomas@vondra.me> wrote:
>> * 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.
>
> Makes sense, but it's going to be harder because since d774072f0040 all
> 4 bits in XLR_INFO are used.
Fixed by adding a second XLOG rmgr.
> 1) Is this actually doing the expected thing?
>
> INJECTION_POINT("datachecksumsworker-initial-dblist", DatabaseList);
>
> We're passing a regular pointer to the database list, so can the
> injection point actually modify it? I suppose it happens to work because
> dc_dblist() removes the last item, so the pointer to the list does not
> change. But that's luck.
Fixed.
> 2) ProcessAllDatabases may be misusing processed_databases
Good point, we need to track both the number of processed as well as the
cumulative total.
> 3) DATACHECKSUMSWORKER_MAX_DB_RETRIES / DATACHECKSUMSWORKER_FAILED
>
> What happens if a database reaches the maximum number of retries? We
> mark that entry as failed, but AFAIK we'll still try to process any
> remaining databases. Isn't that already doomed and we won't be able to
> enable checksums? So why not to simply abort the loop right away?
It might be, but it can also fail because it is concurrently dropped, in that
case we don't consider it a failure as it is the expected outcome. This is
tested for at the end of the loop, but maybe it can be detected sooner to error
out early on actual failures.
--
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