Fix the race condition in the test case added by commit a6e04b1d20.
The commit a6e04b1d20 added a test to ensure that the invalidated logical slots don't retain WAL. The test was ensuring that the checkpoint removes the WAL files corresponding to invalidated logical slots on the standby node but missed the point that the standby node also had a physical slot which led to the prevention of WAL file removal. Move the creation of physical slot on the standby and initialization of cascading standby closer to the test case that actually required it so that other tests don't get affected by the presence of the physical slot on standby. Author: Bertrand Drouvot Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com
This commit is contained in:
parent
3d144c6c86
commit
c5b7f67fcc
@ -276,20 +276,6 @@ $node_standby->append_conf('postgresql.conf',
|
|||||||
max_replication_slots = 5]);
|
max_replication_slots = 5]);
|
||||||
$node_standby->start;
|
$node_standby->start;
|
||||||
$node_primary->wait_for_replay_catchup($node_standby);
|
$node_primary->wait_for_replay_catchup($node_standby);
|
||||||
$node_standby->safe_psql('testdb', qq[SELECT * FROM pg_create_physical_replication_slot('$standby_physical_slotname');]);
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Initialize cascading standby node
|
|
||||||
#######################
|
|
||||||
$node_standby->backup($backup_name);
|
|
||||||
$node_cascading_standby->init_from_backup(
|
|
||||||
$node_standby, $backup_name,
|
|
||||||
has_streaming => 1,
|
|
||||||
has_restoring => 1);
|
|
||||||
$node_cascading_standby->append_conf('postgresql.conf',
|
|
||||||
qq[primary_slot_name = '$standby_physical_slotname']);
|
|
||||||
$node_cascading_standby->start;
|
|
||||||
$node_standby->wait_for_replay_catchup($node_cascading_standby, $node_primary);
|
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Initialize subscriber node
|
# Initialize subscriber node
|
||||||
@ -503,9 +489,6 @@ check_slots_conflicting_status(1);
|
|||||||
# Verify that invalidated logical slots do not lead to retaining WAL.
|
# Verify that invalidated logical slots do not lead to retaining WAL.
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
# Wait for the cascading standby to catchup before removing the WAL file(s)
|
|
||||||
$node_standby->wait_for_replay_catchup($node_cascading_standby, $node_primary);
|
|
||||||
|
|
||||||
# Get the restart_lsn from an invalidated slot
|
# Get the restart_lsn from an invalidated slot
|
||||||
my $restart_lsn = $node_standby->safe_psql('postgres',
|
my $restart_lsn = $node_standby->safe_psql('postgres',
|
||||||
"SELECT restart_lsn from pg_replication_slots WHERE slot_name = 'vacuum_full_activeslot' and conflicting is true;"
|
"SELECT restart_lsn from pg_replication_slots WHERE slot_name = 'vacuum_full_activeslot' and conflicting is true;"
|
||||||
@ -777,9 +760,26 @@ $node_standby->reload;
|
|||||||
$node_primary->psql('postgres', q[CREATE DATABASE testdb]);
|
$node_primary->psql('postgres', q[CREATE DATABASE testdb]);
|
||||||
$node_primary->safe_psql('testdb', qq[CREATE TABLE decoding_test(x integer, y text);]);
|
$node_primary->safe_psql('testdb', qq[CREATE TABLE decoding_test(x integer, y text);]);
|
||||||
|
|
||||||
# Wait for the standby to catchup before creating the slots
|
# Wait for the standby to catchup before initializing the cascading standby
|
||||||
$node_primary->wait_for_replay_catchup($node_standby);
|
$node_primary->wait_for_replay_catchup($node_standby);
|
||||||
|
|
||||||
|
# Create a physical replication slot on the standby.
|
||||||
|
# Keep this step after the "Verify that invalidated logical slots do not lead
|
||||||
|
# to retaining WAL" test (as the physical slot on the standby could prevent the
|
||||||
|
# WAL file removal).
|
||||||
|
$node_standby->safe_psql('testdb', qq[SELECT * FROM pg_create_physical_replication_slot('$standby_physical_slotname');]);
|
||||||
|
|
||||||
|
# Initialize cascading standby node
|
||||||
|
$node_standby->backup($backup_name);
|
||||||
|
$node_cascading_standby->init_from_backup(
|
||||||
|
$node_standby, $backup_name,
|
||||||
|
has_streaming => 1,
|
||||||
|
has_restoring => 1);
|
||||||
|
$node_cascading_standby->append_conf('postgresql.conf',
|
||||||
|
qq[primary_slot_name = '$standby_physical_slotname'
|
||||||
|
hot_standby_feedback = on]);
|
||||||
|
$node_cascading_standby->start;
|
||||||
|
|
||||||
# create the logical slots
|
# create the logical slots
|
||||||
create_logical_slots($node_standby, 'promotion_');
|
create_logical_slots($node_standby, 'promotion_');
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user