Fix a test in failover slots regression test.
authorAmit Kapila
Wed, 10 Apr 2024 03:14:17 +0000 (08:44 +0530)
committerAmit Kapila
Wed, 10 Apr 2024 03:14:17 +0000 (08:44 +0530)
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

index 048aef10176c5ce42d371a270cf9116539e48945..76545e3c74aceac40ef7e46ee7894d67c0b418bb 100644 (file)
@@ -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.)