0002-Remove-unnecessary-Windows-specific-basebackup-code.patch

text/x-patch

Filename: 0002-Remove-unnecessary-Windows-specific-basebackup-code.patch
Type: text/x-patch
Part: 1
Message: Re: pg_tablespace_location() failure with allow_in_place_tablespaces

Patch

Format: format-patch
Series: patch 0002
Subject: Remove unnecessary Windows-specific basebackup code.
File+
src/backend/access/transam/xlog.c 0 5
src/bin/pg_basebackup/t/010_pg_basebackup.pl 17 0
From f0d1dc19fd340e6206cf7b8e26d1ca6edeb62c7c Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Wed, 30 Mar 2022 16:52:26 +1300
Subject: [PATCH 2/2] Remove unnecessary Windows-specific basebackup code.

Commit c6f2f016 added an explicit check for a Windows "junction point",
instead of the get_dirent_type() check we use for Unix.  That was
necessary at the time, but that turned out to be because
get_dirent_type() was not working as originally intended.  That's been
fixed, so now we can remove the special Windows code.

Add a TAP-test to demonstrate that in-place tablespaces are copied by
pg_basebackup.

Discussion: https://postgr.es/m/CA%2BhUKGLzLK4PUPx0_AwXEWXOYAejU%3D7XpxnYE55Y%2Be7hB2N3FA%40mail.gmail.com
---
 src/backend/access/transam/xlog.c            |  5 -----
 src/bin/pg_basebackup/t/010_pg_basebackup.pl | 17 +++++++++++++++++
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 17a56152f1..3fd253413f 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -8325,13 +8325,8 @@ do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p,
 			 * we sometimes use allow_in_place_tablespaces to create
 			 * directories directly under pg_tblspc, which would fail below.
 			 */
-#ifdef WIN32
-			if (!pgwin32_is_junction(fullpath))
-				continue;
-#else
 			if (get_dirent_type(fullpath, de, false, ERROR) != PGFILETYPE_LNK)
 				continue;
-#endif
 
 #if defined(HAVE_READLINK) || defined(WIN32)
 			rllen = readlink(fullpath, linkpath, sizeof(linkpath));
diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
index 47f3d00ac4..107aa8a3d8 100644
--- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
+++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
@@ -856,4 +856,21 @@ ok(pump_until($sigchld_bb, $sigchld_bb_timeout, \$sigchld_bb_stderr,
   'background process exit message');
 $sigchld_bb->finish();
 
+# Test that we can back up an in-place tablespace
+$node->safe_psql('postgres',
+	"SET allow_in_place_tablespaces = on; CREATE TABLESPACE tblspc2 LOCATION '';");
+$node->safe_psql('postgres',
+	    "CREATE TABLE test2 (a int) TABLESPACE tblspc2;"
+	  . "INSERT INTO test2 VALUES (1234);");
+my $tblspc_oid = $node->safe_psql('postgres',
+	"SELECT oid FROM pg_tablespace WHERE spcname = 'tblspc2';");
+$node->backup('backup3');
+$node->safe_psql('postgres', "DROP TABLE test2;");
+$node->safe_psql('postgres', "DROP TABLESPACE tblspc2;");
+
+# check that the in-place tablespace exists in the backup
+my $backupdir = $node->backup_dir . '/backup3';
+my @dst_tblspc = glob "$backupdir/pg_tblspc/$tblspc_oid/PG_*";
+is(@dst_tblspc, 1, 'tblspc directory copied');
+
 done_testing();
-- 
2.35.1