Re: [HACKERS] logical decoding of two-phase transactions

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.

In response to

Responses

Browse pgsql-hackers by date

  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