On Mon, Mar 8, 2021 at 4:58 PM vignesh C <vignes...@gmail.com> wrote: > > + while (AnyTablesyncInProgress()) > + { > + process_syncing_tables(begin_data.final_lsn); > + > + /* This latch is to prevent 100% CPU looping. */ > + (void) WaitLatch(MyLatch, > + WL_LATCH_SET > | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, > + 1000L, > WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE); > + ResetLatch(MyLatch); > + } > Should we have CHECK_FOR_INTERRUPTS inside the while loop?
The process_syncing_tables will end up in the process_syncing_tables_for_apply() function. And in that function IIUC the apply worker is spending most of the time waiting for the tablesync to achieve SYNCDONE state. See wait_for_relation_state_change(rstate->relid, SUBREL_STATE_SYNCDONE); Now, notice the wait_for_relation_state_change already has CHECK_FOR_INTERRUPTS(); So, AFAIK it isn't necessary to put another CHECK_FOR_INTERRUPTS at the outer loop. Thoughts? ------ Kind Regards, Peter Smith. Fujitsu Australia.