From 5eec8896036da42175f1f58893a87faa8f92d560 Mon Sep 17 00:00:00 2001 From: Ronan Dunklau Date: Thu, 26 Aug 2021 14:05:26 +0200 Subject: [PATCH v2 3/3] Check slot existence in pg_basebackup. Use the newly introduced READ_REPLICATION_SLOT command to check for a slot existence in pg_basebackup. That way, we can fail early. --- src/bin/pg_basebackup/pg_basebackup.c | 9 +++++++++ src/bin/pg_basebackup/t/010_pg_basebackup.pl | 10 ++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 7296eb97d0..6794994c69 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -1867,6 +1867,15 @@ BaseBackup(void) if (!RunIdentifySystem(conn, &sysidentifier, &latesttli, NULL, NULL)) exit(1); + /* + * Check the replication slot exists if applicable + */ + if (replication_slot && !(temp_replication_slot || create_slot) && PQserverVersion(conn) >= 15000) + { + if (!GetSlotInformation(conn, replication_slot, NULL, NULL)) + exit(1); + } + /* * Start the actual backup */ diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index a2cb2a7679..787edd2f4f 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -10,7 +10,7 @@ use File::Path qw(rmtree); use Fcntl qw(:seek); use PostgresNode; use TestLib; -use Test::More tests => 110; +use Test::More tests => 111; program_help_ok('pg_basebackup'); program_version_ok('pg_basebackup'); @@ -465,14 +465,16 @@ $node->command_ok( 'pg_basebackup -X stream runs with --no-slot'); rmtree("$tempdir/backupnoslot"); -$node->command_fails( +command_fails_like( [ 'pg_basebackup', '-D', "$tempdir/backupxs_sl_fail", '-X', 'stream', '-S', - 'slot0' + 'slot0', '-p', + "$port" ], - 'pg_basebackup fails with nonexistent replication slot'); + qr/pg_basebackup: error: could not read replication slot/, + 'pg_basebackup fails early with nonexistent replication slot'); $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C' ], -- 2.32.0