Hello all, While working on our internal tools that utilise replication, we realised that a new parameter was added to the internal C function corresponding to pg_replication_origin_session_setup. However this parameter wasn't included in the user-facing API [1].
In 'src/backend/replication/logical/origin.c' at line 1359, pg_replication_origin_session_setup function calls replorigin_session_setup(origin, 0); where currently 0 is assigned to the acquired_by parameter of the replorigin_session_setup. I made this patch to the master which adds a way to control this parameter by adding a new version of the pg_replication_origin_session_setup function with user facing parameters 'text int4' in place of the current 'text' while keeping the existing variant (ensuring backwards compatibility). Could someone take a look at it? [1]: https://www.postgresql.org/docs/current/functions-admin.html#PG-REPLICATION-ORIGIN-SESSION-SETUP --- Thanks for the help, Doruk Yılmaz
From e78865ea41444999f1c8879be0f64928f21e43c6 Mon Sep 17 00:00:00 2001 From: Doruk <do...@mixrank.com> Date: Mon, 12 Aug 2024 21:21:10 +0300 Subject: [PATCH] pg_replication_origin_session_setup new parameter --- src/backend/catalog/system_functions.sql | 2 ++ src/backend/replication/logical/origin.c | 26 +++++++++++++++++++++++- src/include/catalog/pg_proc.dat | 6 ++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql index 623b9539b1..7dca2350dc 100644 --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -738,6 +738,8 @@ REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_reset() FROM public; REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text) FROM public; +REVOKE EXECUTE ON FUNCTION pg_replication_origin_session_setup(text, integer) FROM public; + REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_reset() FROM public; REVOKE EXECUTE ON FUNCTION pg_replication_origin_xact_setup(pg_lsn, timestamp with time zone) FROM public; diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index 419e4814f0..208eed9e37 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -1347,7 +1347,7 @@ pg_replication_origin_oid(PG_FUNCTION_ARGS) * Setup a replication origin for this session. */ Datum -pg_replication_origin_session_setup(PG_FUNCTION_ARGS) +pg_replication_origin_session_setup_nopid(PG_FUNCTION_ARGS) { char *name; RepOriginId origin; @@ -1364,6 +1364,30 @@ pg_replication_origin_session_setup(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } +Datum +pg_replication_origin_session_setup(PG_FUNCTION_ARGS) +{ + char *name; + RepOriginId origin; + int pid; + + replorigin_check_prerequisites(true, false); + + name = text_to_cstring((text *) DatumGetPointer(PG_GETARG_DATUM(0))); + origin = replorigin_by_name(name, false); + if (PG_ARGISNULL(1)){ + replorigin_session_setup(origin, 0); + } else { + pid = PG_GETARG_INT32(1); + replorigin_session_setup(origin, pid); + } + + replorigin_session_origin = origin; + + pfree(name); + + PG_RETURN_VOID(); +} /* * Reset previously setup origin in this session diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 4abc6d9526..c68a0f895f 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -11949,6 +11949,12 @@ descr => 'configure session to maintain replication progress tracking for the passed in origin', proname => 'pg_replication_origin_session_setup', provolatile => 'v', proparallel => 'u', prorettype => 'void', proargtypes => 'text', + prosrc => 'pg_replication_origin_session_setup_nopid' }, + +{ oid => '6015', + descr => 'configure session to maintain replication progress tracking for the passed in origin', + proname => 'pg_replication_origin_session_setup', provolatile => 'v', + proparallel => 'u', prorettype => 'void', proargtypes => 'text int4', prosrc => 'pg_replication_origin_session_setup' }, { oid => '6007', descr => 'teardown configured replication progress tracking', -- 2.39.2