Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 227eb4e

Browse files
Refactor replication origin state reset helpers.
Factor out common logic for clearing replorigin_session_* variables into a dedicated helper function, replorigin_xact_clear(). This removes duplicated assignments of these variables across multiple call sites, and makes the intended scope of each reset explicit. Author: Chao Li <[email protected]> Reviewed-by: Masahiko Sawada <[email protected]> Reviewed-by: Ashutosh Bapat <[email protected]> Reviewed-by: Álvaro Herrera <[email protected]> Discussion: https://postgr.es/m/CAEoWx2=pYvfRthXHTzSrOsf5_FfyY4zJyK4zV2v4W=yjUij1cA@mail.gmail.com
1 parent 1fdbca1 commit 227eb4e

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

src/backend/replication/logical/origin.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,6 +1341,19 @@ replorigin_session_get_progress(bool flush)
13411341
return remote_lsn;
13421342
}
13431343

1344+
/*
1345+
* Clear the per-transaction replication origin state.
1346+
*
1347+
* replorigin_session_origin is also cleared if clear_origin is set.
1348+
*/
1349+
void
1350+
replorigin_xact_clear(bool clear_origin)
1351+
{
1352+
replorigin_session_origin_lsn = InvalidXLogRecPtr;
1353+
replorigin_session_origin_timestamp = 0;
1354+
if (clear_origin)
1355+
replorigin_session_origin = InvalidReplOriginId;
1356+
}
13441357

13451358

13461359
/* ---------------------------------------------------------------------------
@@ -1466,9 +1479,7 @@ pg_replication_origin_session_reset(PG_FUNCTION_ARGS)
14661479

14671480
replorigin_session_reset();
14681481

1469-
replorigin_session_origin = InvalidReplOriginId;
1470-
replorigin_session_origin_lsn = InvalidXLogRecPtr;
1471-
replorigin_session_origin_timestamp = 0;
1482+
replorigin_xact_clear(true);
14721483

14731484
PG_RETURN_VOID();
14741485
}
@@ -1536,8 +1547,8 @@ pg_replication_origin_xact_reset(PG_FUNCTION_ARGS)
15361547
{
15371548
replorigin_check_prerequisites(true, false);
15381549

1539-
replorigin_session_origin_lsn = InvalidXLogRecPtr;
1540-
replorigin_session_origin_timestamp = 0;
1550+
/* Do not clear the session origin */
1551+
replorigin_xact_clear(false);
15411552

15421553
PG_RETURN_VOID();
15431554
}

src/backend/replication/logical/tablesync.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,7 @@ ProcessSyncingTablesForSync(XLogRecPtr current_lsn)
323323
* This is needed to allow the origin to be dropped.
324324
*/
325325
replorigin_session_reset();
326-
replorigin_session_origin = InvalidReplOriginId;
327-
replorigin_session_origin_lsn = InvalidXLogRecPtr;
328-
replorigin_session_origin_timestamp = 0;
326+
replorigin_xact_clear(true);
329327

330328
/*
331329
* Drop the tablesync's origin tracking if exists.

src/backend/replication/logical/worker.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ static inline void reset_apply_error_context_info(void);
627627
static TransApplyAction get_transaction_apply_action(TransactionId xid,
628628
ParallelApplyWorkerInfo **winfo);
629629

630-
static void replorigin_reset(int code, Datum arg);
630+
static void on_exit_clear_xact_state(int code, Datum arg);
631631

632632
/*
633633
* Form the origin name for the subscription.
@@ -5594,7 +5594,7 @@ start_apply(XLogRecPtr origin_startpos)
55945594
* transaction loss as that transaction won't be sent again by the
55955595
* server.
55965596
*/
5597-
replorigin_reset(0, (Datum) 0);
5597+
replorigin_xact_clear(true);
55985598

55995599
if (MySubscription->disableonerr)
56005600
DisableSubscriptionAndExit();
@@ -5865,18 +5865,16 @@ InitializeLogRepWorker(void)
58655865
* replication workers that set up origins and apply remote transactions
58665866
* are protected.
58675867
*/
5868-
before_shmem_exit(replorigin_reset, (Datum) 0);
5868+
before_shmem_exit(on_exit_clear_xact_state, (Datum) 0);
58695869
}
58705870

58715871
/*
5872-
* Reset the origin state.
5872+
* Callback on exit to clear transaction-level replication origin state.
58735873
*/
58745874
static void
5875-
replorigin_reset(int code, Datum arg)
5875+
on_exit_clear_xact_state(int code, Datum arg)
58765876
{
5877-
replorigin_session_origin = InvalidReplOriginId;
5878-
replorigin_session_origin_lsn = InvalidXLogRecPtr;
5879-
replorigin_session_origin_timestamp = 0;
5877+
replorigin_xact_clear(true);
58805878
}
58815879

58825880
/*

src/include/replication/origin.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ extern void replorigin_session_setup(ReplOriginId node, int acquired_by);
6767
extern void replorigin_session_reset(void);
6868
extern XLogRecPtr replorigin_session_get_progress(bool flush);
6969

70+
/* Per-transaction replication origin state manipulation */
71+
extern void replorigin_xact_clear(bool clear_origin);
72+
7073
/* Checkpoint/Startup integration */
7174
extern void CheckPointReplicationOrigin(void);
7275
extern void StartupReplicationOrigin(void);

0 commit comments

Comments
 (0)