Apply data-checksum worker throttling parameters

The DataChecksumsWorker accepts cost_delay and cost_limit parameters
from pg_enable_data_checksums() so users can throttle the I/O caused
by enabling checksums.  Due to the API for setting the cost parameters
changing between when the code was written, and when it was committed
the new cost update function call was omitted and thus the parameters
were silently ignored.

Fix by calling VacuumUpdateCosts() after assigning the parameters
(both during worker startup and on the runtime cost-update path), and
by leaving the page-cost weights at their GUC-controlled defaults.

Author: Satyanarayana Narlapuram <satyanarlapuram@gmail.com>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Discussion: https://postgr.es/m/CAHg+QDeevH6aTyWdXYBJW0wOmfoZy66gDi5TfinK_dXeCrHQLg@mail.gmail.com
This commit is contained in:
Daniel Gustafsson 2026-05-06 12:38:12 +02:00
parent 2018bd6167
commit 9a39056c41

View file

@ -1549,14 +1549,14 @@ DataChecksumsWorkerMain(Datum arg)
* provides rather than inventing something bespoke. This is an internal
* implementation detail and care should be taken to avoid it bleeding
* through to the user to avoid confusion.
*
* VacuumUpdateCosts() propagates the values to the variables actually
* read by vacuum_delay_point().
*/
VacuumCostDelay = DataChecksumState->cost_delay;
VacuumCostLimit = DataChecksumState->cost_limit;
VacuumCostActive = (VacuumCostDelay > 0);
VacuumUpdateCosts();
VacuumCostBalance = 0;
VacuumCostPageHit = 0;
VacuumCostPageMiss = 0;
VacuumCostPageDirty = 0;
/*
* Create and set the vacuum strategy as our buffer strategy.
@ -1613,7 +1613,7 @@ DataChecksumsWorkerMain(Datum arg)
costs_updated = true;
VacuumCostDelay = DataChecksumState->launch_cost_delay;
VacuumCostLimit = DataChecksumState->launch_cost_limit;
VacuumCostActive = (VacuumCostDelay > 0);
VacuumUpdateCosts();
DataChecksumState->cost_delay = DataChecksumState->launch_cost_delay;
DataChecksumState->cost_limit = DataChecksumState->launch_cost_limit;