mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Test that invalidated logical slots doesn't retain WAL.
Author: Bertrand Drouvot Reviewed-by: Shi yu, Amit Kapila, Vignesh C Discussion: https://postgr.es/m/2fefa454-5a70-2174-ddbf-4a0e41537139@gmail.com
This commit is contained in:
@ -500,9 +500,43 @@ $node_standby->restart;
|
|||||||
check_slots_conflicting_status(1);
|
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.
|
||||||
##################################################
|
##################################################
|
||||||
# XXXXX TODO
|
|
||||||
|
# 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
|
||||||
|
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;"
|
||||||
|
);
|
||||||
|
|
||||||
|
chomp($restart_lsn);
|
||||||
|
|
||||||
|
# As pg_walfile_name() can not be executed on the standby,
|
||||||
|
# get the WAL file name associated to this lsn from the primary
|
||||||
|
my $walfile_name = $node_primary->safe_psql('postgres',
|
||||||
|
"SELECT pg_walfile_name('$restart_lsn')");
|
||||||
|
|
||||||
|
chomp($walfile_name);
|
||||||
|
|
||||||
|
# Generate some activity and switch WAL file on the primary
|
||||||
|
$node_primary->safe_psql(
|
||||||
|
'postgres', "create table retain_test(a int);
|
||||||
|
select pg_switch_wal();
|
||||||
|
insert into retain_test values(1);
|
||||||
|
checkpoint;");
|
||||||
|
|
||||||
|
# Wait for the standby to catch up
|
||||||
|
$node_primary->wait_for_replay_catchup($node_standby);
|
||||||
|
|
||||||
|
# Request a checkpoint on the standby to trigger the WAL file(s) removal
|
||||||
|
$node_standby->safe_psql('postgres', 'checkpoint;');
|
||||||
|
|
||||||
|
# Verify that the WAL file has not been retained on the standby
|
||||||
|
my $standby_walfile = $node_standby->data_dir . '/pg_wal/' . $walfile_name;
|
||||||
|
ok(!-f "$standby_walfile",
|
||||||
|
"invalidated logical slots do not lead to retaining WAL");
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
# Recovery conflict: Invalidate conflicting slots, including in-use slots
|
# Recovery conflict: Invalidate conflicting slots, including in-use slots
|
||||||
|
Reference in New Issue
Block a user