v2-0002-add-different-dry-run-logging-for-pg_createsubscr.patch
application/octet-stream
Filename: v2-0002-add-different-dry-run-logging-for-pg_createsubscr.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v2-0002
Subject: add different dry-run logging for pg_createsubscriber
| File | + | − |
|---|---|---|
| src/bin/pg_basebackup/pg_createsubscriber.c | 62 | 27 |
| src/bin/pg_basebackup/t/040_pg_createsubscriber.pl | 3 | 3 |
From 3329e2269ba9a336f17a8a6ad9caf3a57515fdb7 Mon Sep 17 00:00:00 2001
From: Peter Smith <peter.b.smith@fujitsu.com>
Date: Thu, 9 Oct 2025 11:40:44 +1100
Subject: [PATCH v2] add different dry-run logging for pg_createsubscriber
---
src/bin/pg_basebackup/pg_createsubscriber.c | 89 +++++++++++++++-------
src/bin/pg_basebackup/t/040_pg_createsubscriber.pl | 6 +-
2 files changed, 65 insertions(+), 30 deletions(-)
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index 2e8972e..b23c1cd 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -679,13 +679,20 @@ modify_subscriber_sysid(const struct CreateSubscriberOptions *opt)
cf->system_identifier |= ((uint64) tv.tv_usec) << 12;
cf->system_identifier |= getpid() & 0xFFF;
- if (!dry_run)
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise system identifier would be %" PRIu64 " on subscriber",
+ cf->system_identifier);
+ else
+ {
update_controlfile(subscriber_dir, cf, true);
+ pg_log_info("system identifier is %" PRIu64 " on subscriber",
+ cf->system_identifier);
+ }
- pg_log_info("system identifier is %" PRIu64 " on subscriber",
- cf->system_identifier);
-
- pg_log_info("running pg_resetwal on the subscriber");
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would run pg_resetwal on the subscriber");
+ else
+ pg_log_info("running pg_resetwal on the subscriber");
cmd_str = psprintf("\"%s\" -D \"%s\" > \"%s\"", pg_resetwal_path,
subscriber_dir, DEVNULL);
@@ -801,10 +808,7 @@ setup_publisher(struct LogicalRepInfo *dbinfo)
if (lsn)
pg_free(lsn);
lsn = create_logical_replication_slot(conn, &dbinfo[i]);
- if (lsn != NULL || dry_run)
- pg_log_info("create replication slot \"%s\" on publisher",
- dbinfo[i].replslotname);
- else
+ if (lsn == NULL && !dry_run)
exit(1);
/*
@@ -1124,11 +1128,14 @@ drop_existing_subscriptions(PGconn *conn, const char *subname, const char *dbnam
subname);
appendPQExpBuffer(query, " DROP SUBSCRIPTION %s;", subname);
- pg_log_info("dropping subscription \"%s\" in database \"%s\"",
- subname, dbname);
-
- if (!dry_run)
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would drop subscription \"%s\" in database \"%s\"",
+ subname, dbname);
+ else
{
+ pg_log_info("dropping subscription \"%s\" in database \"%s\"",
+ subname, dbname);
+
res = PQexec(conn, query->data);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
@@ -1375,8 +1382,12 @@ create_logical_replication_slot(PGconn *conn, struct LogicalRepInfo *dbinfo)
Assert(conn != NULL);
- pg_log_info("creating the replication slot \"%s\" in database \"%s\"",
- slot_name, dbinfo->dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would create the replication slot \"%s\" in database \"%s\"",
+ slot_name, dbinfo->dbname);
+ else
+ pg_log_info("creating the replication slot \"%s\" in database \"%s\"",
+ slot_name, dbinfo->dbname);
slot_name_esc = PQescapeLiteral(conn, slot_name, strlen(slot_name));
@@ -1424,8 +1435,12 @@ drop_replication_slot(PGconn *conn, struct LogicalRepInfo *dbinfo,
Assert(conn != NULL);
- pg_log_info("dropping the replication slot \"%s\" in database \"%s\"",
- slot_name, dbinfo->dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would drop the replication slot \"%s\" in database \"%s\"",
+ slot_name, dbinfo->dbname);
+ else
+ pg_log_info("dropping the replication slot \"%s\" in database \"%s\"",
+ slot_name, dbinfo->dbname);
slot_name_esc = PQescapeLiteral(conn, slot_name, strlen(slot_name));
@@ -1651,8 +1666,12 @@ create_publication(PGconn *conn, struct LogicalRepInfo *dbinfo)
PQclear(res);
resetPQExpBuffer(str);
- pg_log_info("creating publication \"%s\" in database \"%s\"",
- dbinfo->pubname, dbinfo->dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would create publication \"%s\" in database \"%s\"",
+ dbinfo->pubname, dbinfo->dbname);
+ else
+ pg_log_info("creating publication \"%s\" in database \"%s\"",
+ dbinfo->pubname, dbinfo->dbname);
appendPQExpBuffer(str, "CREATE PUBLICATION %s FOR ALL TABLES",
ipubname_esc);
@@ -1694,8 +1713,12 @@ drop_publication(PGconn *conn, const char *pubname, const char *dbname,
pubname_esc = PQescapeIdentifier(conn, pubname, strlen(pubname));
- pg_log_info("dropping publication \"%s\" in database \"%s\"",
- pubname, dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would drop publication \"%s\" in database \"%s\"",
+ pubname, dbname);
+ else
+ pg_log_info("dropping publication \"%s\" in database \"%s\"",
+ pubname, dbname);
appendPQExpBuffer(str, "DROP PUBLICATION %s", pubname_esc);
@@ -1803,8 +1826,12 @@ create_subscription(PGconn *conn, const struct LogicalRepInfo *dbinfo)
pubconninfo_esc = PQescapeLiteral(conn, dbinfo->pubconninfo, strlen(dbinfo->pubconninfo));
replslotname_esc = PQescapeLiteral(conn, dbinfo->replslotname, strlen(dbinfo->replslotname));
- pg_log_info("creating subscription \"%s\" in database \"%s\"",
- dbinfo->subname, dbinfo->dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would create subscription \"%s\" in database \"%s\"",
+ dbinfo->subname, dbinfo->dbname);
+ else
+ pg_log_info("creating subscription \"%s\" in database \"%s\"",
+ dbinfo->subname, dbinfo->dbname);
appendPQExpBuffer(str,
"CREATE SUBSCRIPTION %s CONNECTION %s PUBLICATION %s "
@@ -1901,8 +1928,12 @@ set_replication_progress(PGconn *conn, const struct LogicalRepInfo *dbinfo, cons
*/
originname = psprintf("pg_%u", suboid);
- pg_log_info("setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"",
- originname, lsnstr, dbinfo->dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise, would set the replication progress (node name \"%s\", LSN %s) in database \"%s\"",
+ originname, lsnstr, dbinfo->dbname);
+ else
+ pg_log_info("setting the replication progress (node name \"%s\", LSN %s) in database \"%s\"",
+ originname, lsnstr, dbinfo->dbname);
resetPQExpBuffer(str);
appendPQExpBuffer(str,
@@ -1947,8 +1978,12 @@ enable_subscription(PGconn *conn, const struct LogicalRepInfo *dbinfo)
subname = PQescapeIdentifier(conn, dbinfo->subname, strlen(dbinfo->subname));
- pg_log_info("enabling subscription \"%s\" in database \"%s\"",
- dbinfo->subname, dbinfo->dbname);
+ if (dry_run)
+ pg_log_info("in dry-run mode, otherwise would enable subscription \"%s\" in database \"%s\"",
+ dbinfo->subname, dbinfo->dbname);
+ else
+ pg_log_info("enabling subscription \"%s\" in database \"%s\"",
+ dbinfo->subname, dbinfo->dbname);
appendPQExpBuffer(str, "ALTER SUBSCRIPTION %s ENABLE", subname);
diff --git a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
index 229fef5..60a8f8c 100644
--- a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
+++ b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
@@ -436,11 +436,11 @@ my ($stdout, $stderr) = run_command(
# Verify that the required logical replication objects are output.
# The expected count 3 refers to postgres, $db1 and $db2 databases.
-is(scalar(() = $stderr =~ /creating publication/g),
+is(scalar(() = $stderr =~ /would create publication/g),
3, "verify publications are created for all databases");
-is(scalar(() = $stderr =~ /creating the replication slot/g),
+is(scalar(() = $stderr =~ /would create the replication slot/g),
3, "verify replication slots are created for all databases");
-is(scalar(() = $stderr =~ /creating subscription/g),
+is(scalar(() = $stderr =~ /would create subscription/g),
3, "verify subscriptions are created for all databases");
# Run pg_createsubscriber on node S. --verbose is used twice
--
1.8.3.1