Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix new recovery test for use under msys
authorAndrew Dunstan <andrew@dunslane.net>
Sat, 12 Jun 2021 12:37:16 +0000 (08:37 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Sat, 12 Jun 2021 12:55:29 +0000 (08:55 -0400)
Commit caba8f0d43 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.

src/test/recovery/t/025_stuck_on_old_timeline.pl
src/test/recovery/t/cp_history_files

index 6fca25b7095d18dd519dc9235b65467bec538588..7a6d7a8062b4490758ae7af4716bca647e0cbeb7 100644 (file)
@@ -10,6 +10,8 @@ use strict;
 use warnings;
 use PostgresNode;
 use TestLib;
+
+use File::Basename;
 use FindBin;
 use Test::More tests => 1;
 
@@ -23,12 +25,17 @@ my $node_primary = get_new_node('primary');
 # get there.
 $node_primary->init(allows_streaming => 1, has_archiving => 1);
 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;
 $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_segments=8
 ));
+local $ENV{PERL_BADLANG}=0;
 $node_primary->start;
 
 # Take backup from primary
@@ -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
 # archived.
 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)
   or die "Timed out while waiting for WAL segment to be archived";
 my $last_archived_wal_file = $walfile_to_be_archived;
index cfeea41e5b918ed51fe62878558c2f5401de4e32..66f1b598fea81e70549a1a2727a822a663c10288 100644 (file)
@@ -7,4 +7,11 @@ use warnings;
 die "wrong number of arguments" if @ARGV != 2;
 my ($source, $target) = @ARGV;
 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: $!";