Add retry logic to pg_sync_replication_slots(). Previously, pg_sync_replication_slots() would finish without synchronizing slots that didn't meet requirements, rather than failing outright. This could leave some failover slots unsynchronized if required catalog rows or WAL segments were missing or at risk of removal, while the standby continued removing needed data.
To address this, the function now waits for the primary slot to advance to a position where all required data is available on the standby before completing synchronization. It retries cyclically until all failover slots that existed on the primary at the start of the call are synchronized. Slots created after the function begins are not included. If the standby is promoted during this wait, the function exits gracefully and the temporary slots will be removed. Author: Ajin Cherian <[email protected]> Author: Hou Zhijie <[email protected]> Reviewed-by: Shveta Malik <[email protected]> Reviewed-by: Japin Li <[email protected]> Reviewed-by: Ashutosh Bapat <[email protected]> Reviewed-by: Ashutosh Sharma <[email protected]> Reviewed-by: Chao Li <[email protected]> Reviewed-by: Yilin Zhang <[email protected]> Reviewed-by: Amit Kapila <[email protected]> Discussion: https://postgr.es/m/CAFPTHDZAA%2BgWDntpa5ucqKKba41%3DtXmoXqN3q4rpjO9cdxgQrw%40mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/0d2d4a0ec3eca64e7f5ce7f7630b56a561b2663c Modified Files -------------- doc/src/sgml/func/func-admin.sgml | 4 +- doc/src/sgml/logicaldecoding.sgml | 16 +- src/backend/replication/logical/slotsync.c | 226 +++++++++++++++++---- src/backend/utils/activity/wait_event_names.txt | 2 +- .../recovery/t/040_standby_failover_slots_sync.pl | 57 ++++-- 5 files changed, 245 insertions(+), 60 deletions(-)
