aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_basebackup/t/010_pg_basebackup.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_basebackup/t/010_pg_basebackup.pl')
-rw-r--r--src/bin/pg_basebackup/t/010_pg_basebackup.pl138
1 files changed, 76 insertions, 62 deletions
diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
index 0cd510eeea4..1c80ff74917 100644
--- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
+++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
@@ -20,7 +20,7 @@ my $node = get_new_node('main');
umask(0077);
# Initialize node without replication settings
-$node->init(extra => [ '--data-checksums' ]);
+$node->init(extra => ['--data-checksums']);
$node->start;
my $pgdata = $node->data_dir;
@@ -47,7 +47,7 @@ ok(!-d "$tempdir/backup", 'backup directory was cleaned up');
# Create a backup directory that is not empty so the next commnd will fail
# but leave the data directory behind
mkdir("$tempdir/backup")
- or BAIL_OUT("unable to create $tempdir/backup");
+ or BAIL_OUT("unable to create $tempdir/backup");
append_to_file("$tempdir/backup/dir-not-empty.txt", "Some data");
$node->command_fails([ 'pg_basebackup', '-D', "$tempdir/backup", '-n' ],
@@ -86,13 +86,14 @@ my $baseUnloggedPath = $node->safe_psql('postgres',
# Make sure main and init forks exist
ok(-f "$pgdata/${baseUnloggedPath}_init", 'unlogged init fork in base');
-ok(-f "$pgdata/$baseUnloggedPath", 'unlogged main fork in base');
+ok(-f "$pgdata/$baseUnloggedPath", 'unlogged main fork in base');
# Create files that look like temporary relations to ensure they are ignored.
my $postgresOid = $node->safe_psql('postgres',
q{select oid from pg_database where datname = 'postgres'});
-my @tempRelationFiles = qw(t999_999 t9999_999.1 t999_9999_vm t99999_99999_vm.1);
+my @tempRelationFiles =
+ qw(t999_999 t9999_999.1 t999_9999_vm t99999_99999_vm.1);
foreach my $filename (@tempRelationFiles)
{
@@ -107,10 +108,11 @@ ok(-f "$tempdir/backup/PG_VERSION", 'backup was created');
# Permissions on backup should be default
SKIP:
{
- skip "unix-style permissions not supported on Windows", 1 if ($windows_os);
+ skip "unix-style permissions not supported on Windows", 1
+ if ($windows_os);
ok(check_mode_recursive("$tempdir/backup", 0700, 0600),
- "check backup dir permissions");
+ "check backup dir permissions");
}
# Only archive_status directory should be copied in pg_wal/.
@@ -133,8 +135,7 @@ foreach my $dirname (
# These files should not be copied.
foreach my $filename (
qw(postgresql.auto.conf.tmp postmaster.opts postmaster.pid tablespace_map current_logfiles.tmp
- global/pg_internal.init)
- )
+ global/pg_internal.init))
{
ok(!-f "$tempdir/backup/$filename", "$filename not copied");
}
@@ -142,14 +143,14 @@ foreach my $filename (
# Unlogged relation forks other than init should not be copied
ok(-f "$tempdir/backup/${baseUnloggedPath}_init",
'unlogged init fork in backup');
-ok(!-f "$tempdir/backup/$baseUnloggedPath",
+ok( !-f "$tempdir/backup/$baseUnloggedPath",
'unlogged main fork not in backup');
# Temp relations should not be copied.
foreach my $filename (@tempRelationFiles)
{
- ok(!-f "$tempdir/backup/base/$postgresOid/$filename",
- "base/$postgresOid/$filename not copied");
+ ok( !-f "$tempdir/backup/base/$postgresOid/$filename",
+ "base/$postgresOid/$filename not copied");
}
# Make sure existing backup_label was ignored.
@@ -212,7 +213,7 @@ SKIP:
# Move pg_replslot out of $pgdata and create a symlink to it.
$node->stop;
- # Set umask so test directories and files are created with group permissions
+ # Set umask so test directories and files are created with group permissions
umask(0027);
# Enable group permissions on PGDATA
@@ -244,24 +245,27 @@ SKIP:
is(scalar(@tblspc_tars), 1, 'one tablespace tar was created');
rmtree("$tempdir/tarbackup2");
- # Create an unlogged table to test that forks other than init are not copied.
+ # Create an unlogged table to test that forks other than init are not copied.
$node->safe_psql('postgres',
- 'CREATE UNLOGGED TABLE tblspc1_unlogged (id int) TABLESPACE tblspc1;');
+ 'CREATE UNLOGGED TABLE tblspc1_unlogged (id int) TABLESPACE tblspc1;'
+ );
- my $tblspc1UnloggedPath = $node->safe_psql(
- 'postgres', q{select pg_relation_filepath('tblspc1_unlogged')});
+ my $tblspc1UnloggedPath = $node->safe_psql('postgres',
+ q{select pg_relation_filepath('tblspc1_unlogged')});
# Make sure main and init forks exist
- ok(-f "$pgdata/${tblspc1UnloggedPath}_init",
+ ok( -f "$pgdata/${tblspc1UnloggedPath}_init",
'unlogged init fork in tablespace');
- ok(-f "$pgdata/$tblspc1UnloggedPath",
- 'unlogged main fork in tablespace');
+ ok(-f "$pgdata/$tblspc1UnloggedPath", 'unlogged main fork in tablespace');
- # Create files that look like temporary relations to ensure they are ignored
- # in a tablespace.
+ # Create files that look like temporary relations to ensure they are ignored
+ # in a tablespace.
my @tempRelationFiles = qw(t888_888 t888888_888888_vm.1);
- my $tblSpc1Id = basename(dirname(dirname($node->safe_psql('postgres',
- q{select pg_relation_filepath('test1')}))));
+ my $tblSpc1Id = basename(
+ dirname(
+ dirname(
+ $node->safe_psql(
+ 'postgres', q{select pg_relation_filepath('test1')}))));
foreach my $filename (@tempRelationFiles)
{
@@ -284,16 +288,17 @@ SKIP:
-l "$tempdir/backup1/pg_tblspc/$_"
and readlink "$tempdir/backup1/pg_tblspc/$_" eq
"$tempdir/tbackup/tblspc1"
- } readdir($dh)),
+ } readdir($dh)),
"tablespace symlink was updated");
closedir $dh;
# Group access should be enabled on all backup files
ok(check_mode_recursive("$tempdir/backup1", 0750, 0640),
- "check backup dir permissions");
+ "check backup dir permissions");
# Unlogged relation forks other than init should not be copied
- my ($tblspc1UnloggedBackupPath) = $tblspc1UnloggedPath =~ /[^\/]*\/[^\/]*\/[^\/]*$/g;
+ my ($tblspc1UnloggedBackupPath) =
+ $tblspc1UnloggedPath =~ /[^\/]*\/[^\/]*\/[^\/]*$/g;
ok(-f "$tempdir/tbackup/tblspc1/${tblspc1UnloggedBackupPath}_init",
'unlogged init fork in tablespace backup');
@@ -303,15 +308,15 @@ SKIP:
# Temp relations should not be copied.
foreach my $filename (@tempRelationFiles)
{
- ok(!-f "$tempdir/tbackup/tblspc1/$tblSpc1Id/$postgresOid/$filename",
- "[tblspc1]/$postgresOid/$filename not copied");
+ ok( !-f "$tempdir/tbackup/tblspc1/$tblSpc1Id/$postgresOid/$filename",
+ "[tblspc1]/$postgresOid/$filename not copied");
# Also remove temp relation files or tablespace drop will fail.
my $filepath =
- "$shorter_tempdir/tblspc1/$tblSpc1Id/$postgresOid/$filename";
+ "$shorter_tempdir/tblspc1/$tblSpc1Id/$postgresOid/$filename";
unlink($filepath)
- or BAIL_OUT("unable to unlink $filepath");
+ or BAIL_OUT("unable to unlink $filepath");
}
ok( -d "$tempdir/backup1/pg_replslot",
@@ -398,27 +403,35 @@ $node->command_fails(
'pg_basebackup fails with nonexistent replication slot');
$node->command_fails(
- [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C' ],
+ [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C' ],
'pg_basebackup -C fails without slot name');
$node->command_fails(
- [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C', '-S', 'slot0', '--no-slot' ],
+ [ 'pg_basebackup', '-D',
+ "$tempdir/backupxs_slot", '-C',
+ '-S', 'slot0',
+ '--no-slot' ],
'pg_basebackup fails with -C -S --no-slot');
$node->command_ok(
- [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C', '-S', 'slot0' ],
+ [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C', '-S', 'slot0' ],
'pg_basebackup -C runs');
rmtree("$tempdir/backupxs_slot");
-is($node->safe_psql('postgres', q{SELECT slot_name FROM pg_replication_slots WHERE slot_name = 'slot0'}),
- 'slot0',
- 'replication slot was created');
-isnt($node->safe_psql('postgres', q{SELECT restart_lsn FROM pg_replication_slots WHERE slot_name = 'slot0'}),
- '',
- 'restart LSN of new slot is not null');
+is( $node->safe_psql(
+ 'postgres',
+q{SELECT slot_name FROM pg_replication_slots WHERE slot_name = 'slot0'}),
+ 'slot0',
+ 'replication slot was created');
+isnt(
+ $node->safe_psql(
+ 'postgres',
+q{SELECT restart_lsn FROM pg_replication_slots WHERE slot_name = 'slot0'}),
+ '',
+ 'restart LSN of new slot is not null');
$node->command_fails(
- [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot1", '-C', '-S', 'slot0' ],
+ [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot1", '-C', '-S', 'slot0' ],
'pg_basebackup fails with -C -S and a previously existing slot');
$node->safe_psql('postgres',
@@ -455,10 +468,10 @@ rmtree("$tempdir/backupxs_sl_R");
# create tables to corrupt and get their relfilenodes
my $file_corrupt1 = $node->safe_psql('postgres',
- q{SELECT a INTO corrupt1 FROM generate_series(1,10000) AS a; ALTER TABLE corrupt1 SET (autovacuum_enabled=false); SELECT pg_relation_filepath('corrupt1')}
+q{SELECT a INTO corrupt1 FROM generate_series(1,10000) AS a; ALTER TABLE corrupt1 SET (autovacuum_enabled=false); SELECT pg_relation_filepath('corrupt1')}
);
my $file_corrupt2 = $node->safe_psql('postgres',
- q{SELECT b INTO corrupt2 FROM generate_series(1,2) AS b; ALTER TABLE corrupt2 SET (autovacuum_enabled=false); SELECT pg_relation_filepath('corrupt2')}
+q{SELECT b INTO corrupt2 FROM generate_series(1,2) AS b; ALTER TABLE corrupt2 SET (autovacuum_enabled=false); SELECT pg_relation_filepath('corrupt2')}
);
# set page header and block sizes
@@ -473,31 +486,32 @@ syswrite($file, '\0\0\0\0\0\0\0\0\0');
close $file;
system_or_bail 'pg_ctl', '-D', $pgdata, 'start';
-$node->command_checks_all([ 'pg_basebackup', '-D', "$tempdir/backup_corrupt"],
+$node->command_checks_all(
+ [ 'pg_basebackup', '-D', "$tempdir/backup_corrupt" ],
1,
[qr{^$}],
[qr/^WARNING.*checksum verification failed/s],
- 'pg_basebackup reports checksum mismatch'
-);
+ 'pg_basebackup reports checksum mismatch');
rmtree("$tempdir/backup_corrupt");
# induce further corruption in 5 more blocks
system_or_bail 'pg_ctl', '-D', $pgdata, 'stop';
open $file, '+<', "$pgdata/$file_corrupt1";
-for my $i ( 1..5 ) {
- my $offset = $pageheader_size + $i * $block_size;
- seek($file, $offset, 0);
- syswrite($file, '\0\0\0\0\0\0\0\0\0');
+for my $i (1 .. 5)
+{
+ my $offset = $pageheader_size + $i * $block_size;
+ seek($file, $offset, 0);
+ syswrite($file, '\0\0\0\0\0\0\0\0\0');
}
close $file;
system_or_bail 'pg_ctl', '-D', $pgdata, 'start';
-$node->command_checks_all([ 'pg_basebackup', '-D', "$tempdir/backup_corrupt2"],
- 1,
- [qr{^$}],
- [qr/^WARNING.*further.*failures.*will.not.be.reported/s],
- 'pg_basebackup does not report more than 5 checksum mismatches'
-);
+$node->command_checks_all(
+ [ 'pg_basebackup', '-D', "$tempdir/backup_corrupt2" ],
+ 1,
+ [qr{^$}],
+ [qr/^WARNING.*further.*failures.*will.not.be.reported/s],
+ 'pg_basebackup does not report more than 5 checksum mismatches');
rmtree("$tempdir/backup_corrupt2");
# induce corruption in a second file
@@ -508,17 +522,17 @@ syswrite($file, '\0\0\0\0\0\0\0\0\0');
close $file;
system_or_bail 'pg_ctl', '-D', $pgdata, 'start';
-$node->command_checks_all([ 'pg_basebackup', '-D', "$tempdir/backup_corrupt3"],
- 1,
- [qr{^$}],
- [qr/^WARNING.*7 total checksum verification failures/s],
- 'pg_basebackup correctly report the total number of checksum mismatches'
-);
+$node->command_checks_all(
+ [ 'pg_basebackup', '-D', "$tempdir/backup_corrupt3" ],
+ 1,
+ [qr{^$}],
+ [qr/^WARNING.*7 total checksum verification failures/s],
+ 'pg_basebackup correctly report the total number of checksum mismatches');
rmtree("$tempdir/backup_corrupt3");
# do not verify checksums, should return ok
$node->command_ok(
- [ 'pg_basebackup', '-D', "$tempdir/backup_corrupt4", '-k' ],
+ [ 'pg_basebackup', '-D', "$tempdir/backup_corrupt4", '-k' ],
'pg_basebackup with -k does not report checksum mismatch');
rmtree("$tempdir/backup_corrupt4");