From 7e85d1c75f299b0772fbeb145706e019629530bd Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 10 Apr 2024 08:44:17 +0530 Subject: [PATCH] Fix a test in failover slots regression test. Wait for the standby to catch up before syncing the slots with pg_sync_replication_slots(), otherwise, the logical slot could be ahead and the sync would fail. The other way to fix the test is to change it to use slotsync worker and poll for the sync to get finished but the current approach is better as this is a predictable way to write the test. Per buildfarm Author: Hou Zhijie Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/OS0PR01MB571665359F2F5DCD3ADABC9F94002@OS0PR01MB5716.jpnprd01.prod.outlook.com --- src/test/recovery/t/040_standby_failover_slots_sync.pl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/test/recovery/t/040_standby_failover_slots_sync.pl b/src/test/recovery/t/040_standby_failover_slots_sync.pl index 048aef1017..76545e3c74 100644 --- a/src/test/recovery/t/040_standby_failover_slots_sync.pl +++ b/src/test/recovery/t/040_standby_failover_slots_sync.pl @@ -400,6 +400,10 @@ $primary->safe_psql('postgres', "SELECT pg_create_logical_replication_slot('snap_test_slot', 'test_decoding', false, false, true);" ); +# Wait for the standby to catch up so that the standby is not lagging behind +# the failover slots. +$primary->wait_for_replay_catchup($standby1); + $standby1->safe_psql('postgres', "SELECT pg_sync_replication_slots();"); # Two xl_running_xacts logs are generated here. When decoding the first log, it @@ -420,8 +424,6 @@ $primary->safe_psql( COMMIT; )); -$primary->wait_for_replay_catchup($standby1); - # Advance the restart_lsn to the position of the first xl_running_xacts log # generated above. Note that there might be concurrent xl_running_xacts logs # written by the bgwriter, which could cause the position to be advanced to an @@ -431,6 +433,10 @@ $primary->safe_psql('postgres', "SELECT pg_replication_slot_advance('snap_test_slot', pg_current_wal_lsn());" ); +# Wait for the standby to catch up so that the standby is not lagging behind +# the failover slots. +$primary->wait_for_replay_catchup($standby1); + # Log a message that will be consumed on the standby after promotion using the # synced slot. See the test where we promote standby (Promote the standby1 to # primary.)