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.


Reply via email to