Commit c3652f97 authored by Andrew Dunstan's avatar Andrew Dunstan

Fix new recovery test for use under msys

Commit caba8f0d wasn't quite right for msys, as demonstrated by
several buildfarm animals, including jacana and fairywren. We need to
use the msys perl in the archive command, but call it in such a way that
Windows will understand the path. Furthermore, inside the copy script we
need to convert a Windows path to an msys path.
parent b56b83aa
...@@ -10,6 +10,8 @@ use strict; ...@@ -10,6 +10,8 @@ use strict;
use warnings; use warnings;
use PostgresNode; use PostgresNode;
use TestLib; use TestLib;
use File::Basename;
use FindBin; use FindBin;
use Test::More tests => 1; use Test::More tests => 1;
...@@ -23,12 +25,17 @@ my $node_primary = get_new_node('primary'); ...@@ -23,12 +25,17 @@ my $node_primary = get_new_node('primary');
# get there. # get there.
$node_primary->init(allows_streaming => 1, has_archiving => 1); $node_primary->init(allows_streaming => 1, has_archiving => 1);
my $perlbin = $^X; my $perlbin = $^X;
$perlbin =~ s{\\}{\\\\}g if ($TestLib::windows_os); if ($^O eq 'msys')
{
$perlbin = TestLib::perl2host(dirname($^X)) . '\\' . basename($^X);
}
$perlbin =~ s!\\!/!g if $TestLib::windows_os;
my $archivedir_primary = $node_primary->archive_dir; my $archivedir_primary = $node_primary->archive_dir;
$node_primary->append_conf('postgresql.conf', qq( $node_primary->append_conf('postgresql.conf', qq(
archive_command = '$perlbin "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"' archive_command = '"$perlbin" "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"'
wal_keep_size=128MB wal_keep_size=128MB
)); ));
local $ENV{PERL_BADLANG}=0;
$node_primary->start; $node_primary->start;
# Take backup from primary # Take backup from primary
...@@ -74,7 +81,8 @@ $node_standby->safe_psql('postgres', 'SELECT pg_switch_wal()'); ...@@ -74,7 +81,8 @@ $node_standby->safe_psql('postgres', 'SELECT pg_switch_wal()');
# WAL segment, this is enough to guarantee that the history file was # WAL segment, this is enough to guarantee that the history file was
# archived. # archived.
my $archive_wait_query = my $archive_wait_query =
"SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;"; "SELECT coalesce('$walfile_to_be_archived' <= last_archived_wal, false) " .
"FROM pg_stat_archiver";
$node_standby->poll_query_until('postgres', $archive_wait_query) $node_standby->poll_query_until('postgres', $archive_wait_query)
or die "Timed out while waiting for WAL segment to be archived"; or die "Timed out while waiting for WAL segment to be archived";
my $last_archived_wal_file = $walfile_to_be_archived; my $last_archived_wal_file = $walfile_to_be_archived;
......
...@@ -7,4 +7,11 @@ use warnings; ...@@ -7,4 +7,11 @@ use warnings;
die "wrong number of arguments" if @ARGV != 2; die "wrong number of arguments" if @ARGV != 2;
my ($source, $target) = @ARGV; my ($source, $target) = @ARGV;
exit if $source !~ /history/; exit if $source !~ /history/;
if ($^O eq 'msys')
{
# make a windows path look like an msys path if necessary
$source =~ s!^([A-Za-z]):!'/' . lc($1)!e;
$source =~ s!\\!/!g;
}
copy($source, $target) or die "couldn't copy $source to $target: $!"; copy($source, $target) or die "couldn't copy $source to $target: $!";
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment