Hi Vignesh, Some review comments for patch v20250422-0003.
====== src/backend/replication/logical/syncutils.c 1. +/* + * Exit routine for synchronization worker. + */ +pg_noreturn void +SyncFinishWorker(void) Why does this have the pg_noreturn annotation? None of the other void functions do. ~~~ 2. +bool +FetchRelationStates(bool *started_tx) All the functions in the sync utils.c are named like Syncxxx, so for consistency, why not name this one also? e.g. /FetchRelationStates/SyncFetchRelationStates/ ====== src/backend/replication/logical/tablesync.c 3. -static bool -wait_for_relation_state_change(Oid relid, char expected_state) +bool +WaitForRelationStateChange(Oid relid, char expected_state) { char state; ~ 3a. Why isn't this static, like before? ~ 3b. If it is *only* for tables and nothing else, shouldn't it be static and have a function name like 'wait_for_table_state_change' (not _relation_)? OTOH, if there is potential for this to be used for sequences in future, then it should be in the syncutils.c module with a name like 'SyncWaitForRelationStateChange'. ====== src/include/replication/worker_internal.h 4. @@ -250,6 +252,7 @@ extern void logicalrep_worker_stop(Oid subid, Oid relid); extern void logicalrep_pa_worker_stop(ParallelApplyWorkerInfo *winfo); extern void logicalrep_worker_wakeup(Oid subid, Oid relid); extern void logicalrep_worker_wakeup_ptr(LogicalRepWorker *worker); +pg_noreturn extern void SyncFinishWorker(void); extern int logicalrep_sync_worker_count(Oid subid); @@ -259,9 +262,13 @@ extern void ReplicationOriginNameForLogicalRep(Oid suboid, Oid relid, extern bool AllTablesyncsReady(void); extern void UpdateTwoPhaseState(Oid suboid, char new_state); -extern void process_syncing_tables(XLogRecPtr current_lsn); -extern void invalidate_syncing_table_states(Datum arg, int cacheid, - uint32 hashvalue); +extern bool FetchRelationStates(bool *started_tx); +extern bool WaitForRelationStateChange(Oid relid, char expected_state); +extern void ProcessSyncingTablesForSync(XLogRecPtr current_lsn); +extern void ProcessSyncingTablesForApply(XLogRecPtr current_lsn); +extern void SyncProcessRelations(XLogRecPtr current_lsn); +extern void SyncInvalidateRelationStates(Datum arg, int cacheid, + uint32 hashvalue); ~ 4a. Why does SyncFinishWorker have the pg_noreturn annotation? None of the other void functions do. ~ 4b. I felt that all the SyncXXX functions exposed from syncutils.c should be grouped together, and maybe even with a comment like /* from syncutils.c */ ====== Kind Regards, Peter Smith. Fujitsu Australia