aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/test/recovery/t/042_low_level_backup.pl120
1 files changed, 0 insertions, 120 deletions
diff --git a/src/test/recovery/t/042_low_level_backup.pl b/src/test/recovery/t/042_low_level_backup.pl
deleted file mode 100644
index 213b85dbfd1..00000000000
--- a/src/test/recovery/t/042_low_level_backup.pl
+++ /dev/null
@@ -1,120 +0,0 @@
-
-# Copyright (c) 2024, PostgreSQL Global Development Group
-
-# Test low-level backup method by using pg_backup_start() and pg_backup_stop()
-# to create backups.
-
-use strict;
-use warnings;
-
-use File::Copy qw(copy);
-use File::Path qw(rmtree);
-use PostgreSQL::Test::Cluster;
-use PostgreSQL::Test::Utils;
-use Test::More;
-
-# Start primary node with archiving.
-my $node_primary = PostgreSQL::Test::Cluster->new('primary');
-$node_primary->init(has_archiving => 1, allows_streaming => 1);
-$node_primary->start;
-
-# Start backup.
-my $backup_name = 'backup1';
-my $psql = $node_primary->background_psql('postgres');
-
-$psql->query_safe("SET client_min_messages TO WARNING");
-$psql->set_query_timer_restart;
-$psql->query_safe("select pg_backup_start('test label')");
-
-# Copy files.
-my $backup_dir = $node_primary->backup_dir . '/' . $backup_name;
-
-PostgreSQL::Test::RecursiveCopy::copypath($node_primary->data_dir,
- $backup_dir);
-
-# Cleanup some files/paths that should not be in the backup. There is no
-# attempt to handle all the exclusions done by pg_basebackup here, in part
-# because these are not required, but also to keep the test simple.
-#
-# Also remove pg_control because it needs to be copied later.
-unlink("$backup_dir/postmaster.pid")
- or BAIL_OUT("unable to unlink $backup_dir/postmaster.pid");
-unlink("$backup_dir/postmaster.opts")
- or BAIL_OUT("unable to unlink $backup_dir/postmaster.opts");
-unlink("$backup_dir/global/pg_control")
- or BAIL_OUT("unable to unlink $backup_dir/global/pg_control");
-
-rmtree("$backup_dir/pg_wal")
- or BAIL_OUT("unable to unlink contents of $backup_dir/pg_wal");
-mkdir("$backup_dir/pg_wal");
-
-# Create a table that will be used to verify that recovery started at the
-# correct location, rather than a location recorded in the control file.
-$psql->query_safe("create table canary (id int)");
-
-# Advance the checkpoint location in pg_control past the location where the
-# backup started. Switch WAL to make it really clear that the location is
-# different and to put the checkpoint in a new WAL segment.
-$psql->query_safe("select pg_switch_wal()");
-$psql->query_safe("checkpoint");
-
-# Copy pg_control last so it contains the new checkpoint.
-copy($node_primary->data_dir . '/global/pg_control',
- "$backup_dir/global/pg_control")
- or BAIL_OUT("unable to copy global/pg_control");
-
-# Stop backup and get backup_label
-my $backup_label =
- $psql->query_safe("select labelfile from pg_backup_stop()");
-
-$psql->quit;
-
-# Rather than writing out backup_label, try to recover the backup without
-# backup_label to demonstrate that recovery will not work correctly without it,
-# i.e. the canary table will be missing and the cluster will be corrupted.
-# Provide only the WAL segment that recovery will think it needs.
-#
-# The point of this test is to explicitly demonstrate that backup_label is
-# being used in a later test to get the correct recovery info.
-my $node_replica = PostgreSQL::Test::Cluster->new('replica_fail');
-$node_replica->init_from_backup($node_primary, $backup_name);
-my $canary_query = "select count(*) from pg_class where relname = 'canary'";
-
-copy(
- $node_primary->archive_dir . '/000000010000000000000003',
- $node_replica->data_dir . '/pg_wal/000000010000000000000003'
-) or BAIL_OUT("unable to copy 000000010000000000000003");
-
-$node_replica->start;
-
-ok($node_replica->safe_psql('postgres', $canary_query) == 0,
- 'canary is missing');
-
-# Check log to ensure that crash recovery was used as there is no
-# backup_label.
-ok( $node_replica->log_contains(
- 'database system was not properly shut down; automatic recovery in progress'
- ),
- 'verify backup recovery performed with crash recovery');
-
-$node_replica->teardown_node;
-$node_replica->clean_node;
-
-# Save backup_label into the backup directory and recover using the primary's
-# archive. This time recovery will succeed and the canary table will be
-# present.
-append_to_file("$backup_dir/backup_label", $backup_label);
-
-$node_replica = PostgreSQL::Test::Cluster->new('replica_success');
-$node_replica->init_from_backup($node_primary, $backup_name,
- has_restoring => 1);
-$node_replica->start;
-
-ok($node_replica->safe_psql('postgres', $canary_query) == 1,
- 'canary is present');
-
-# Check log to ensure that backup_label was used for recovery.
-ok($node_replica->log_contains('starting backup recovery with redo LSN'),
- 'verify backup recovery performed with backup_label');
-
-done_testing();