From: | Peter Smith <smithpb2250(at)gmail(dot)com> |
---|---|
To: | vignesh C <vignesh21(at)gmail(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [HACKERS] logical decoding of two-phase transactions |
Date: | 2021-03-09 09:31:55 |
Message-ID: | CAHut+PvabsefPQTiDJ746ubskquOgc3DNR2Mh-J5=qdqMAVqEw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mon, Mar 8, 2021 at 4:58 PM vignesh C <vignesh21(at)gmail(dot)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.
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2021-03-09 09:37:02 | Re: Make stream_prepare an optional callback |
Previous Message | Kyotaro Horiguchi | 2021-03-09 09:29:34 | Re: shared-memory based stats collector |