aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2022-08-06 15:52:10 +0200
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2022-08-06 15:52:10 +0200
commit8c5d9ccca9670e8d7eda35e08b35e4e16bcf600c (patch)
tree6704107363bda83c1a18f18e3bd4a40fe5d18df9
parent476f9d533084f2ad3f625b5092021b6c23c8e196 (diff)
downloadpostgresql-8c5d9ccca9670e8d7eda35e08b35e4e16bcf600c.tar.gz
postgresql-8c5d9ccca9670e8d7eda35e08b35e4e16bcf600c.zip
Improve recently-added test reliability
Commit 59be1c942a47 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
-rw-r--r--src/test/recovery/t/033_replay_tsp_drops.pl35
1 files changed, 11 insertions, 24 deletions
diff --git a/src/test/recovery/t/033_replay_tsp_drops.pl b/src/test/recovery/t/033_replay_tsp_drops.pl
index 4d2832e51bb..140d94db312 100644
--- a/src/test/recovery/t/033_replay_tsp_drops.pl
+++ b/src/test/recovery/t/033_replay_tsp_drops.pl
@@ -9,6 +9,7 @@ use warnings;
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
+use Time::HiRes qw(usleep);
sub test_tablespace
{
@@ -34,14 +35,13 @@ sub test_tablespace
has_streaming => 1);
$node_standby->append_conf('postgresql.conf',
"allow_in_place_tablespaces = on");
+ $node_standby->append_conf('postgresql.conf',
+ "primary_slot_name = slot");
$node_standby->start;
- # Make sure connection is made
- $node_primary->poll_query_until('postgres',
- 'SELECT count(*) = 1 FROM pg_stat_replication');
- $node_primary->safe_psql('postgres', "SELECT pg_drop_replication_slot('slot')");
-
- $node_standby->safe_psql('postgres', 'CHECKPOINT');
+ # Make sure the connection is made
+ $node_primary->wait_for_catchup($node_standby, 'write',
+ $node_primary->lsn('write'));
# Do immediate shutdown just after a sequence of CREATE DATABASE / DROP
# DATABASE / DROP TABLESPACE. This causes CREATE DATABASE WAL records
@@ -62,7 +62,7 @@ sub test_tablespace
];
$node_primary->safe_psql('postgres', $query);
- $node_primary->wait_for_catchup($node_standby, 'replay',
+ $node_primary->wait_for_catchup($node_standby, 'write',
$node_primary->lsn('write'));
# show "create missing directory" log message
@@ -113,7 +113,7 @@ my $tspoid = $node_standby->safe_psql('postgres',
my $tspdir = $node_standby->data_dir . "/pg_tblspc/$tspoid";
File::Path::rmtree($tspdir);
-my $logstart = get_log_size($node_standby);
+my $logstart = -s $node_standby->logfile;
# Create a database in the tablespace and a table in default tablespace
$node_primary->safe_psql(
@@ -127,7 +127,7 @@ $node_primary->safe_psql(
# Standby should fail and should not silently skip replaying the wal
# In this test, PANIC turns into WARNING by allow_in_place_tablespaces.
# Check the log messages instead of confirming standby failure.
-my $max_attempts = $PostgreSQL::Test::Utils::timeout_default;
+my $max_attempts = $PostgreSQL::Test::Utils::timeout_default * 10;
while ($max_attempts-- >= 0)
{
last
@@ -135,31 +135,18 @@ while ($max_attempts-- >= 0)
find_in_log(
$node_standby, qr!WARNING: ( [A-Z0-9]+:)? creating missing directory: pg_tblspc/!,
$logstart));
- sleep 1;
+ usleep(100_000);
}
ok($max_attempts > 0, "invalid directory creation is detected");
done_testing();
-
-# return the size of logfile of $node in bytes
-sub get_log_size
-{
- my ($node) = @_;
-
- return (stat $node->logfile)[7];
-}
-
# find $pat in logfile of $node after $off-th byte
sub find_in_log
{
my ($node, $pat, $off) = @_;
- $off = 0 unless defined $off;
- my $log = PostgreSQL::Test::Utils::slurp_file($node->logfile);
- return 0 if (length($log) <= $off);
-
- $log = substr($log, $off);
+ my $log = PostgreSQL::Test::Utils::slurp_file($node->logfile, $off);
return $log =~ m/$pat/;
}