From 6b3bf2d2f7353d7519248e0338d2d06c23710fde Mon Sep 17 00:00:00 2001 From: Peter Smith 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