Close yet another race condition in replication slot test code
authorAlvaro Herrera
Thu, 29 Jul 2021 21:26:25 +0000 (17:26 -0400)
committerAlvaro Herrera
Thu, 29 Jul 2021 21:26:25 +0000 (17:26 -0400)
Buildfarm shows that this test has a further failure mode when a
checkpoint starts earlier than expected, so we detect a "checkpoint
completed" line that's not the one we want.  Change the config to try
and prevent this.

Per buildfarm

Author: Kyotaro Horiguchi 
Discussion: https://postgr.es/m/20210729.162038.534808353849568395[email protected]

src/test/recovery/t/019_replslot_limit.pl

index fbf4ab432cbc35bee2885910c11cb5126bda9746..d33ca1e35ade96b97aabc2eb2c0b9e0e0bab1023 100644 (file)
@@ -170,11 +170,21 @@ ok( !find_in_log(
        "requested WAL segment [0-9A-F]+ has already been removed"),
    'check that required WAL segments are still available');
 
-# Advance WAL again, the slot loses the oldest segment.
+# Create one checkpoint, to improve stability of the next steps
+$node_master->safe_psql('postgres', "CHECKPOINT;");
+
+# Prevent other checkpoints from occurring while advancing WAL segments
+$node_master->safe_psql('postgres',
+   "ALTER SYSTEM SET max_wal_size='40MB'; SELECT pg_reload_conf()");
+
+# Advance WAL again. The slot loses the oldest segment by the next checkpoint
 my $logstart = get_log_size($node_master);
 advance_wal($node_master, 7);
 
-# wait until the WARNING is issued
+# Now create another checkpoint and wait until the WARNING is issued
+$node_master->safe_psql('postgres',
+   'ALTER SYSTEM RESET max_wal_size; SELECT pg_reload_conf()');
+$node_master->safe_psql('postgres', "CHECKPOINT;");
 my $invalidated = 0;
 for (my $i = 0; $i < 10000; $i++)
 {