From 6b3bf2d2f7353d7519248e0338d2d06c23710fde Mon Sep 17 00:00:00 2001
From: Peter Smith <peter.b.smith@fujitsu.com>
Date: Mon, 19 Sep 2022 12:21:56 +1000
Subject: [PATCH v2 2/2] Add common function ReplicationOriginName()

Replace common snprintf() expression with a wrapper function similar to
ReplicationOriginNameForTablesync().

Peter Smith, reviewed by Aleksander Alekseev
Discussion: https://postgr.es/m/CAHut%2BPsa8hhfSE6ozUK-ih7GkQziAVAf4f3bqiXEj2nQiu-43g%40mail.gmail.com
---
 src/backend/commands/subscriptioncmds.c   |  6 +++---
 src/backend/replication/logical/worker.c  | 13 ++++++++++++-
 src/include/replication/worker_internal.h |  1 +
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index d042abe341..8166b3c1b2 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -659,7 +659,7 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
 
 	recordDependencyOnOwner(SubscriptionRelationId, subid, owner);
 
-	snprintf(originname, sizeof(originname), "pg_%u", subid);
+	ReplicationOriginName(subid, originname, sizeof(originname));
 	replorigin_create(originname);
 
 	/*
@@ -1317,7 +1317,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
 					char		originname[NAMEDATALEN];
 					XLogRecPtr	remote_lsn;
 
-					snprintf(originname, sizeof(originname), "pg_%u", subid);
+					ReplicationOriginName(subid, originname, sizeof(originname));
 					originid = replorigin_by_name(originname, false);
 					remote_lsn = replorigin_get_progress(originid, false);
 
@@ -1535,7 +1535,7 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
 	RemoveSubscriptionRel(subid, InvalidOid);
 
 	/* Remove the origin tracking if exists. */
-	snprintf(originname, sizeof(originname), "pg_%u", subid);
+	ReplicationOriginName(subid, originname, sizeof(originname));
 	replorigin_drop_by_name(originname, true, false);
 
 	/*
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index 56f753d987..b2db7861c2 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -364,6 +364,17 @@ static void apply_error_callback(void *arg);
 static inline void set_apply_error_context_xact(TransactionId xid, XLogRecPtr lsn);
 static inline void reset_apply_error_context_info(void);
 
+/*
+ * Form the origin name for subscription.
+ *
+ * Return the name in the supplied buffer.
+ */
+void
+ReplicationOriginName(Oid suboid, char *originname, Size szname)
+{
+	snprintf(originname, szname, "pg_%u", suboid);
+}
+
 /*
  * Should this worker apply changes for given relation.
  *
@@ -3707,7 +3718,7 @@ ApplyWorkerMain(Datum main_arg)
 
 		/* Setup replication origin tracking. */
 		StartTransactionCommand();
-		snprintf(originname, sizeof(originname), "pg_%u", MySubscription->oid);
+		ReplicationOriginName(MySubscription->oid, originname, sizeof(originname));
 		originid = replorigin_by_name(originname, true);
 		if (!OidIsValid(originid))
 			originid = replorigin_create(originname);
diff --git a/src/include/replication/worker_internal.h b/src/include/replication/worker_internal.h
index f82bc518c3..8c22c08bf9 100644
--- a/src/include/replication/worker_internal.h
+++ b/src/include/replication/worker_internal.h
@@ -92,6 +92,7 @@ extern void logicalrep_worker_wakeup_ptr(LogicalRepWorker *worker);
 
 extern int	logicalrep_sync_worker_count(Oid subid);
 
+extern void ReplicationOriginName(Oid suboid, char *originname, Size szname);
 extern void ReplicationOriginNameForTablesync(Oid suboid, Oid relid,
 											  char *originname, Size szorgname);
 extern char *LogicalRepSyncTableStart(XLogRecPtr *origin_startpos);
-- 
2.37.2

