At Mon, 2 Aug 2021 22:21:56 -0700, Soumyadeep Chakraborty <soumyadeep2007@gmail.com> wrote in
> Hello,
>
> I came across this issue while I was tweaking a TAP test with Ashwin for
> this thread [1].
>
> We noticed that while the startup process waits for a recovery delay, it does
> not respect changes to the recovery_min_apply_delay GUC. So:
>
> // Standby is waiting on recoveryWakeupLatch with a large
> recovery_min_apply_delay value
> node_standby->safe_psql('postgres', 'ALTER SYSTEM SET
> recovery_min_apply_delay TO 0;');
> node_standby->reload;
> // Standby is still waiting, it does not proceed until the old timeout
> is elapsed.
>
> I attached a small patch to fix this. It makes it so that
> recovery_min_apply_delay is reconsulted in the loop to redetermine the wait
> interval. This makes it similar to the loop in CheckpointerMain, where
> CheckPointTimeout is consulted after interrupts are handled:
>
> if (elapsed_secs >= CheckPointTimeout)
> continue; /* no sleep for us ... */
>
> I have also added a test to 005_replay_delay.pl.
>
> Regards,
> Soumyadeep(VMware)
>
> [1] https://www.postgresql.org/message-id/flat/CANXE4Tc3FNvZ_xAimempJWv_RH9pCvsZH7Yq93o1VuNLjUT-mQ%40mail.gmail.com
Sounds reasonable and the patch looks fine as a whole. Applied cleanly
and works as expected. The added test properly catches the issue.
One comment from me.
+$node_standby->safe_psql('postgres', "ALTER SYSTEM SET recovery_min_apply_delay TO 0;");
It might be better do "SET reco.. TO DEFAULT" instead.
And how about adding the new test at the end of existing tests. We can
get rid of the extra lines in the diff.
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center