public inbox for [email protected]
help / color / mirror / Atom feedFrom: Doruk Yilmaz <[email protected]>
To: [email protected]
Subject: [Patch] add new parameter to pg_replication_origin_session_setup
Date: Mon, 12 Aug 2024 21:43:48 +0300
Message-ID: <CAMPB6wfe4zLjJL8jiZV5kjjpwBM2=rTRme0UCL7Ra4L8MTVdOg@mail.gmail.com> (raw)
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
Attachments:
[text/x-patch] 0001-pg_replication_origin_session_setup-new-parameter.patch (3.2K, 2-0001-pg_replication_origin_session_setup-new-parameter.patch)
download | inline diff:
From e78865ea41444999f1c8879be0f64928f21e43c6 Mon Sep 17 00:00:00 2001
From: Doruk <[email protected]>
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
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: [Patch] add new parameter to pg_replication_origin_session_setup
In-Reply-To: <CAMPB6wfe4zLjJL8jiZV5kjjpwBM2=rTRme0UCL7Ra4L8MTVdOg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox