From a95f2907b3805b51c8480f56c5b21ca286970c55 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Mon, 19 Sep 2022 12:21:56 +1000 Subject: [PATCH v1] Add common function ReplicationOriginName. --- 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 d042abe..8166b3c 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 eaca406..7e77de5 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -364,6 +364,17 @@ static inline void set_apply_error_context_xact(TransactionId xid, XLogRecPtr ls 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, int szname) +{ + snprintf(originname, szname, "pg_%u", suboid); +} + +/* * Should this worker apply changes for given relation. * * This is mainly needed for initial relation data sync as that runs in @@ -3706,7 +3717,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 901845a..3714782 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, int szname); extern void ReplicationOriginNameForTablesync(Oid suboid, Oid relid, char *originname, int szorgname); extern char *LogicalRepSyncTableStart(XLogRecPtr *origin_startpos); -- 1.8.3.1