mirror of
https://github.com/postgres/postgres.git
synced 2025-10-22 14:32:25 +03:00
Refactor logical worker synchronization code into a separate file.
To support the upcoming addition of a sequence synchronization worker, this patch extracts common synchronization logic shared by table sync workers and the new sequence sync worker into a dedicated file. This modularization improves code reuse, maintainability, and clarity in the logical workers framework. Author: vignesh C <vignesh21@gmail.com> Author: Hou Zhijie <houzj.fnst@fujitsu.com> Reviewed-by: shveta malik <shveta.malik@gmail.com> Reviewed-by: Dilip Kumar <dilipbalaut@gmail.com> Reviewed-by: Peter Smith <smithpb2250@gmail.com> Reviewed-by: Hayato Kuroda <kuroda.hayato@fujitsu.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Discussion: https://postgr.es/m/CAA4eK1LC+KJiAkSrpE_NwvNdidw9F2os7GERUeSxSKv71gXysQ@mail.gmail.com
This commit is contained in:
@@ -91,7 +91,7 @@
|
||||
* behave as if two_phase = off. When the apply worker detects that all
|
||||
* tablesyncs have become READY (while the tri-state was PENDING) it will
|
||||
* restart the apply worker process. This happens in
|
||||
* process_syncing_tables_for_apply.
|
||||
* ProcessSyncingTablesForApply.
|
||||
*
|
||||
* When the (re-started) apply worker finds that all tablesyncs are READY for a
|
||||
* two_phase tri-state of PENDING it start streaming messages with the
|
||||
@@ -1243,7 +1243,7 @@ apply_handle_commit(StringInfo s)
|
||||
apply_handle_commit_internal(&commit_data);
|
||||
|
||||
/* Process any tables that are being synchronized in parallel. */
|
||||
process_syncing_tables(commit_data.end_lsn);
|
||||
ProcessSyncingRelations(commit_data.end_lsn);
|
||||
|
||||
pgstat_report_activity(STATE_IDLE, NULL);
|
||||
reset_apply_error_context_info();
|
||||
@@ -1365,7 +1365,7 @@ apply_handle_prepare(StringInfo s)
|
||||
in_remote_transaction = false;
|
||||
|
||||
/* Process any tables that are being synchronized in parallel. */
|
||||
process_syncing_tables(prepare_data.end_lsn);
|
||||
ProcessSyncingRelations(prepare_data.end_lsn);
|
||||
|
||||
/*
|
||||
* Since we have already prepared the transaction, in a case where the
|
||||
@@ -1421,7 +1421,7 @@ apply_handle_commit_prepared(StringInfo s)
|
||||
in_remote_transaction = false;
|
||||
|
||||
/* Process any tables that are being synchronized in parallel. */
|
||||
process_syncing_tables(prepare_data.end_lsn);
|
||||
ProcessSyncingRelations(prepare_data.end_lsn);
|
||||
|
||||
clear_subscription_skip_lsn(prepare_data.end_lsn);
|
||||
|
||||
@@ -1487,7 +1487,7 @@ apply_handle_rollback_prepared(StringInfo s)
|
||||
in_remote_transaction = false;
|
||||
|
||||
/* Process any tables that are being synchronized in parallel. */
|
||||
process_syncing_tables(rollback_data.rollback_end_lsn);
|
||||
ProcessSyncingRelations(rollback_data.rollback_end_lsn);
|
||||
|
||||
pgstat_report_activity(STATE_IDLE, NULL);
|
||||
reset_apply_error_context_info();
|
||||
@@ -1622,7 +1622,7 @@ apply_handle_stream_prepare(StringInfo s)
|
||||
pgstat_report_stat(false);
|
||||
|
||||
/* Process any tables that are being synchronized in parallel. */
|
||||
process_syncing_tables(prepare_data.end_lsn);
|
||||
ProcessSyncingRelations(prepare_data.end_lsn);
|
||||
|
||||
/*
|
||||
* Similar to prepare case, the subskiplsn could be left in a case of
|
||||
@@ -2464,7 +2464,7 @@ apply_handle_stream_commit(StringInfo s)
|
||||
}
|
||||
|
||||
/* Process any tables that are being synchronized in parallel. */
|
||||
process_syncing_tables(commit_data.end_lsn);
|
||||
ProcessSyncingRelations(commit_data.end_lsn);
|
||||
|
||||
pgstat_report_activity(STATE_IDLE, NULL);
|
||||
|
||||
@@ -4133,7 +4133,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received)
|
||||
maybe_reread_subscription();
|
||||
|
||||
/* Process any table synchronization changes. */
|
||||
process_syncing_tables(last_received);
|
||||
ProcessSyncingRelations(last_received);
|
||||
}
|
||||
|
||||
/* Cleanup the memory. */
|
||||
@@ -4623,7 +4623,7 @@ wait_for_local_flush(RetainDeadTuplesData *rdt_data)
|
||||
* RDT_GET_CANDIDATE_XID phase in such cases, this is unsafe. If users
|
||||
* concurrently add tables to the subscription, the apply worker may not
|
||||
* process invalidations in time. Consequently,
|
||||
* HasSubscriptionRelationsCached() might miss the new tables, leading to
|
||||
* HasSubscriptionTablesCached() might miss the new tables, leading to
|
||||
* premature advancement of oldest_nonremovable_xid.
|
||||
*
|
||||
* Performing the check during RDT_WAIT_FOR_LOCAL_FLUSH is safe, as
|
||||
@@ -4637,7 +4637,7 @@ wait_for_local_flush(RetainDeadTuplesData *rdt_data)
|
||||
* subscription tables at this stage to prevent unnecessary tuple
|
||||
* retention.
|
||||
*/
|
||||
if (HasSubscriptionRelationsCached() && !AllTablesyncsReady())
|
||||
if (HasSubscriptionTablesCached() && !AllTablesyncsReady())
|
||||
{
|
||||
TimestampTz now;
|
||||
|
||||
@@ -5876,7 +5876,7 @@ SetupApplyOrSyncWorker(int worker_slot)
|
||||
* the subscription relation state.
|
||||
*/
|
||||
CacheRegisterSyscacheCallback(SUBSCRIPTIONRELMAP,
|
||||
invalidate_syncing_table_states,
|
||||
InvalidateSyncingRelStates,
|
||||
(Datum) 0);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user