v1-0001-Refactor-replication-origin-state-reset-helpers.patch
application/octet-stream
Filename: v1-0001-Refactor-replication-origin-state-reset-helpers.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v1-0001
Subject: Refactor replication origin state reset helpers
| File | + | − |
|---|---|---|
| src/backend/replication/logical/origin.c | 23 | 5 |
| src/backend/replication/logical/tablesync.c | 1 | 3 |
| src/backend/replication/logical/worker.c | 1 | 3 |
| src/include/replication/origin.h | 1 | 0 |
From 49596baf76cfa393da071de672b193bf6ba83eca Mon Sep 17 00:00:00 2001
From: "Chao Li (Evan)" <lic@highgo.com>
Date: Wed, 24 Dec 2025 09:17:27 +0800
Subject: [PATCH v1] Refactor replication origin state reset helpers
Factor out common logic for clearing per-transaction and per-session
replication origin state into dedicated helper functions.
This removes duplicated assignments of replorigin_session_origin,
replorigin_session_origin_lsn, and replorigin_session_origin_timestamp
across multiple call sites, and makes the intended scope of each reset
(clear per-transaction state vs. clear per-session state) explicit.
No functional change intended.
Author: Chao Li <lic@highgo.com>
---
src/backend/replication/logical/origin.c | 28 +++++++++++++++++----
src/backend/replication/logical/tablesync.c | 4 +--
src/backend/replication/logical/worker.c | 4 +--
src/include/replication/origin.h | 1 +
4 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 2380f369578..aec9e30b4d6 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -200,6 +200,17 @@ replorigin_check_prerequisites(bool check_origins, bool recoveryOK)
errmsg("cannot manipulate replication origins during recovery")));
}
+/*
+ * replorigin_xact_clear_state
+ * Clear per transaction state variables.
+ */
+static void
+replorigin_xact_clear_state(void)
+{
+ replorigin_session_origin_lsn = InvalidXLogRecPtr;
+ replorigin_session_origin_timestamp = 0;
+}
+
/*
* IsReservedOriginName
@@ -1244,6 +1255,16 @@ replorigin_session_reset(void)
ConditionVariableBroadcast(cv);
}
+/*
+ * Clear per-session replication origin state.
+ */
+void
+replorigin_session_clear_state(void)
+{
+ replorigin_xact_clear_state();
+ replorigin_session_origin = InvalidRepOriginId;
+}
+
/*
* Do the same work replorigin_advance() does, just on the session's
* configured origin.
@@ -1412,9 +1433,7 @@ pg_replication_origin_session_reset(PG_FUNCTION_ARGS)
replorigin_session_reset();
- replorigin_session_origin = InvalidRepOriginId;
- replorigin_session_origin_lsn = InvalidXLogRecPtr;
- replorigin_session_origin_timestamp = 0;
+ replorigin_session_clear_state();
PG_RETURN_VOID();
}
@@ -1482,8 +1501,7 @@ pg_replication_origin_xact_reset(PG_FUNCTION_ARGS)
{
replorigin_check_prerequisites(true, false);
- replorigin_session_origin_lsn = InvalidXLogRecPtr;
- replorigin_session_origin_timestamp = 0;
+ replorigin_xact_clear_state();
PG_RETURN_VOID();
}
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index 2522e372036..d5b6782bc1d 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -323,9 +323,7 @@ ProcessSyncingTablesForSync(XLogRecPtr current_lsn)
* This is needed to allow the origin to be dropped.
*/
replorigin_session_reset();
- replorigin_session_origin = InvalidRepOriginId;
- replorigin_session_origin_lsn = InvalidXLogRecPtr;
- replorigin_session_origin_timestamp = 0;
+ replorigin_session_clear_state();
/*
* Drop the tablesync's origin tracking if exists.
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index d1ee0261c64..c67be657737 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -5857,9 +5857,7 @@ InitializeLogRepWorker(void)
static void
replorigin_reset(int code, Datum arg)
{
- replorigin_session_origin = InvalidRepOriginId;
- replorigin_session_origin_lsn = InvalidXLogRecPtr;
- replorigin_session_origin_timestamp = 0;
+ replorigin_session_clear_state();
}
/*
diff --git a/src/include/replication/origin.h b/src/include/replication/origin.h
index 2a73f6aa492..325f12bfd57 100644
--- a/src/include/replication/origin.h
+++ b/src/include/replication/origin.h
@@ -65,6 +65,7 @@ extern void replorigin_session_advance(XLogRecPtr remote_commit,
XLogRecPtr local_commit);
extern void replorigin_session_setup(RepOriginId node, int acquired_by);
extern void replorigin_session_reset(void);
+extern void replorigin_session_clear_state(void);
extern XLogRecPtr replorigin_session_get_progress(bool flush);
/* Checkpoint/Startup integration */
--
2.39.5 (Apple Git-154)