Hi all, After launched the sync table worker it enters ApplyWorkerMain function. And then the table sync worker calls LogicalRepSyncTableStart to synchronize the target table. In LogicalRepSyncTableStart, finish_sync_worker is always called and then the table sync worker process always exits after synched. On the other hand, some source code seems to suppose that the table sync worker still continue to working even after LogicalRepSyncTableStart
For example in ApplyWorkerMain, LogicalRepSyncTableStart returns replication slot name that was used for synchronization but this code is never executed. if (am_tablesync_worker()) { char *syncslotname; /* This is table synchroniation worker, call initial sync. */ syncslotname = LogicalRepSyncTableStart(&origin_startpos); /* The slot name needs to be allocated in permanent memory context. */ oldctx = MemoryContextSwitchTo(ApplyCacheContext); myslotname = pstrdup(syncslotname); MemoryContextSwitchTo(oldctx); pfree(syncslotname); } ------ And, since the table sync worker doesn't call process_syncing_tables so far process_syncing_tables_for_sync is never executed. /* * Process state possible change(s) of tables that are being synchronized. */ void process_syncing_tables(XLogRecPtr current_lsn) { if (am_tablesync_worker()) process_syncing_tables_for_sync(current_lsn); else process_syncing_tables_for_apply(current_lsn); } These code will be used for future enhancement? I think that since leaving unused code is not good we can get rid of these unnecessary codes. Attached patch removes unnecessary codes related to the table sync worker. Please give me feedback. Regards, -- Masahiko Sawada NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center
unused_code_of_table_sync_worker.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers