Use pg_ctl promote -w in TAP tests

Switch TAP tests to use the new wait mode of pg_ctl promote.  This
allows avoiding extra logic with poll_query_until() to be sure that a
promoted standby is ready for read-write queries.

From: Michael Paquier <michael.paquier@gmail.com>
This commit is contained in:
Peter Eisentraut 2016-10-19 12:00:00 -04:00
parent 5d58c07a44
commit e5a9bcb529
3 changed files with 5 additions and 11 deletions

View File

@ -161,12 +161,8 @@ sub promote_standby
or die "Timed out while waiting for standby to receive and write WAL"; or die "Timed out while waiting for standby to receive and write WAL";
# Now promote slave and insert some new data on master, this will put # Now promote slave and insert some new data on master, this will put
# the master out-of-sync with the standby. Wait until the standby is # the master out-of-sync with the standby.
# out of recovery mode, and is ready to accept read-write connections.
$node_standby->promote; $node_standby->promote;
$node_standby->poll_query_until('postgres',
"SELECT NOT pg_is_in_recovery()")
or die "Timed out while waiting for promotion of standby";
# Force a checkpoint after the promotion. pg_rewind looks at the control # Force a checkpoint after the promotion. pg_rewind looks at the control
# file to determine what timeline the server is on, and that isn't updated # file to determine what timeline the server is on, and that isn't updated

View File

@ -723,7 +723,7 @@ sub restart
=item $node->promote() =item $node->promote()
Wrapper for pg_ctl promote Wrapper for pg_ctl promote -w
=cut =cut
@ -735,7 +735,8 @@ sub promote
my $logfile = $self->logfile; my $logfile = $self->logfile;
my $name = $self->name; my $name = $self->name;
print "### Promoting node \"$name\"\n"; print "### Promoting node \"$name\"\n";
TestLib::system_log('pg_ctl', '-D', $pgdata, '-l', $logfile, 'promote'); TestLib::system_log('pg_ctl', '-D', $pgdata, '-w', '-l', $logfile,
'promote');
} }
# Internal routine to enable streaming replication on a standby node. # Internal routine to enable streaming replication on a standby node.

View File

@ -57,10 +57,7 @@ recovery_target_timeline='latest'
$node_standby_2->restart; $node_standby_2->restart;
# Insert some data in standby 1 and check its presence in standby 2 # Insert some data in standby 1 and check its presence in standby 2
# to ensure that the timeline switch has been done. Standby 1 needs # to ensure that the timeline switch has been done.
# to exit recovery first before moving on with the test.
$node_standby_1->poll_query_until('postgres',
"SELECT pg_is_in_recovery() <> true");
$node_standby_1->safe_psql('postgres', $node_standby_1->safe_psql('postgres',
"INSERT INTO tab_int VALUES (generate_series(1001,2000))"); "INSERT INTO tab_int VALUES (generate_series(1001,2000))");
$until_lsn = $node_standby_1->safe_psql('postgres', $until_lsn = $node_standby_1->safe_psql('postgres',