Make new replication slot test code even less racy
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 19 Jul 2021 21:21:07 +0000 (17:21 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 19 Jul 2021 21:21:07 +0000 (17:21 -0400)
Further fix the test code in ead9e51e8236, this time by waiting until
the checkpoint has completed before moving on; this ensures that the
WAL segment removal has already happened when we create the next slot.

Author: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Discussion: https://postgr.es/m/20210719.111318.2042379313472032754.horikyota.ntt@gmail.com

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

index 026da02ff15d65db9e84cafb3f14da3b64abb811..54ddcef2bbd734f1b040f13e8914f0d9d0228df2 100644 (file)
@@ -11,7 +11,7 @@ use TestLib;
 use PostgresNode;
 
 use File::Path qw(rmtree);
-use Test::More tests => $TestLib::windows_os ? 15 : 19;
+use Test::More tests => $TestLib::windows_os ? 16 : 20;
 use Time::HiRes qw(usleep);
 
 $ENV{PGDATABASE} = 'postgres';
@@ -201,6 +201,19 @@ $result = $node_primary->safe_psql(
 is($result, "rep1|f|t|lost|",
    'check that the slot became inactive and the state "lost" persists');
 
+# Wait until current checkpoint ends
+my $checkpoint_ended = 0;
+for (my $i = 0; $i < 10000; $i++)
+{
+   if (find_in_log($node_primary, "checkpoint complete: ", $logstart))
+   {
+       $checkpoint_ended = 1;
+       last;
+   }
+   usleep(100_000);
+}
+ok($checkpoint_ended, 'waited for checkpoint to end');
+
 # The invalidated slot shouldn't keep the old-segment horizon back;
 # see bug #17103: https://postgr.es/m/17103-004130e8f27782c9@postgresql.org
 # Test for this by creating a new slot and comparing its restart LSN