Make new replication slot test code even less racy

Further fix the test code in ead9e51e82, 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
This commit is contained in:
Alvaro Herrera 2021-07-19 17:21:07 -04:00
parent 40295d158f
commit 1e87513808
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE

View 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