Skip to content

Commit 6390bc7

Browse files
committed
Improve recently-added test reliability
Commit 59be1c9 already tried to make src/test/recovery/t/033_replay_tsp_drops more reliable, but it wasn't enough. Try to improve on that by making this use of a replication slot to be more like others. Also, don't drop the slot. Make a few other stylistic changes while at it. It's still quite slow, which is another thing that we need to fix in this script. Backpatch to all supported branches. Discussion: https://postgr.es/m/349302.1659191875@sss.pgh.pa.us
1 parent 6303df0 commit 6390bc7

File tree

1 file changed

+12
-25
lines changed

1 file changed

+12
-25
lines changed

src/test/recovery/t/033_replay_tsp_drops.pl

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PostgreSQL::Test::Cluster;
1010
use PostgreSQL::Test::Utils;
1111
use Test::More;
12+
use Time::HiRes qw(usleep);
1213

1314
sub test_tablespace
1415
{
@@ -36,14 +37,13 @@ sub test_tablespace
3637
has_streaming => 1);
3738
$node_standby->append_conf('postgresql.conf',
3839
"allow_in_place_tablespaces = on");
40+
$node_standby->append_conf('postgresql.conf',
41+
"primary_slot_name = slot");
3942
$node_standby->start;
4043

41-
# Make sure connection is made
42-
$node_primary->poll_query_until('postgres',
43-
'SELECT count(*) = 1 FROM pg_stat_replication');
44-
$node_primary->safe_psql('postgres', "SELECT pg_drop_replication_slot('slot')");
45-
46-
$node_standby->safe_psql('postgres', 'CHECKPOINT');
44+
# Make sure the connection is made
45+
$node_primary->wait_for_catchup($node_standby, 'write',
46+
$node_primary->lsn('write'));
4747

4848
# Do immediate shutdown just after a sequence of CREATE DATABASE / DROP
4949
# DATABASE / DROP TABLESPACE. This causes CREATE DATABASE WAL records
@@ -62,10 +62,10 @@ sub test_tablespace
6262
DROP TABLESPACE source_ts;
6363
DROP DATABASE template_db;
6464
];
65-
6665
$query =~ s/<STRATEGY>/$strategy/g;
66+
6767
$node_primary->safe_psql('postgres', $query);
68-
$node_primary->wait_for_catchup($node_standby, 'replay',
68+
$node_primary->wait_for_catchup($node_standby, 'write',
6969
$node_primary->lsn('write'));
7070

7171
# show "create missing directory" log message
@@ -119,7 +119,7 @@ sub test_tablespace
119119
my $tspdir = $node_standby->data_dir . "/pg_tblspc/$tspoid";
120120
File::Path::rmtree($tspdir);
121121

122-
my $logstart = get_log_size($node_standby);
122+
my $logstart = -s $node_standby->logfile;
123123

124124
# Create a database in the tablespace and a table in default tablespace
125125
$node_primary->safe_psql(
@@ -133,39 +133,26 @@ sub test_tablespace
133133
# Standby should fail and should not silently skip replaying the wal
134134
# In this test, PANIC turns into WARNING by allow_in_place_tablespaces.
135135
# Check the log messages instead of confirming standby failure.
136-
my $max_attempts = $PostgreSQL::Test::Utils::timeout_default;
136+
my $max_attempts = $PostgreSQL::Test::Utils::timeout_default * 10;
137137
while ($max_attempts-- >= 0)
138138
{
139139
last
140140
if (
141141
find_in_log(
142142
$node_standby, qr!WARNING: ( [A-Z0-9]+:)? creating missing directory: pg_tblspc/!,
143143
$logstart));
144-
sleep 1;
144+
usleep(100_000);
145145
}
146146
ok($max_attempts > 0, "invalid directory creation is detected");
147147

148148
done_testing();
149149

150-
151-
# return the size of logfile of $node in bytes
152-
sub get_log_size
153-
{
154-
my ($node) = @_;
155-
156-
return (stat $node->logfile)[7];
157-
}
158-
159150
# find $pat in logfile of $node after $off-th byte
160151
sub find_in_log
161152
{
162153
my ($node, $pat, $off) = @_;
163154

164-
$off = 0 unless defined $off;
165-
my $log = PostgreSQL::Test::Utils::slurp_file($node->logfile);
166-
return 0 if (length($log) <= $off);
167-
168-
$log = substr($log, $off);
155+
my $log = PostgreSQL::Test::Utils::slurp_file($node->logfile, $off);
169156

170157
return $log =~ m/$pat/;
171158
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy