RE: Perform streaming logical transactions by background workers and parallel apply

From: "wangw(dot)fnst(at)fujitsu(dot)com" <wangw(dot)fnst(at)fujitsu(dot)com>
To: "shiy(dot)fnst(at)fujitsu(dot)com" <shiy(dot)fnst(at)fujitsu(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Cc: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Peter Smith <smithpb2250(at)gmail(dot)com>, "houzj(dot)fnst(at)fujitsu(dot)com" <houzj(dot)fnst(at)fujitsu(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: RE: Perform streaming logical transactions by background workers and parallel apply
Date: 2022-07-13 05:48:45
Message-ID: OSZPR01MB6278023241CEDDE233C8386F9E899@OSZPR01MB6278.jpnprd01.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jul 7, 2022 at 11:32 AM Shi, Yu/侍 雨 <shiy(dot)fnst(at)cn(dot)fujitsu(dot)com> wrote:
> Thanks for updating the patch.
>
> Here are some comments.

Thanks for your comments.

> 0001 patch
> ==============
> 1.
> + /* Check If there are free worker slot(s) */
> + LWLockAcquire(LogicalRepWorkerLock, LW_SHARED);
>
> I think "Check If" should be "Check if".

Fixed.

> 0003 patch
> ==============
> 1.
> Should we call apply_bgworker_relation_check() in apply_handle_truncate()?

Because TRUNCATE blocks all other operations on the table, I think that when
two transactions on the publisher-side operate on the same table, at least one
of them will be blocked. So I think for this case the blocking will happen on
the publisher-side.

> 0004 patch
> ==============
> 1.
> @@ -3932,6 +3958,9 @@ start_apply(XLogRecPtr origin_startpos)
> }
> PG_CATCH();
> {
> + /* Set the flag that we will retry later. */
> + set_subscription_retry(true);
> +
> if (MySubscription->disableonerr)
> DisableSubscriptionAndExit();
> Else
>
> I think we need to emit the error and recover from the error state before
> setting the retry flag, like what we do in DisableSubscriptionAndExit().
> Otherwise if an error is detected when setting the retry flag, we won't get the
> error message reported by the apply worker.

You are right.
I fixed this point as you suggested. (I moved the operations you mentioned from
the function DisableSubscriptionAndExit to before setting the retry flag.)
I also made a similar modification in the function start_table_sync.

Attach the news patches.

Regards,
Wang wei

Attachment Content-Type Size
v17-0001-Perform-streaming-logical-transactions-by-backgr.patch application/octet-stream 105.9 KB
v17-0002-Test-streaming-parallel-option-in-tap-test.patch application/octet-stream 69.1 KB
v17-0003-Add-some-checks-before-using-apply-background-wo.patch application/octet-stream 36.8 KB
v17-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch application/octet-stream 28.9 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2022-07-13 05:54:18 Re: Non-replayable WAL records through overflows and >MaxAllocSize lengths
Previous Message Andres Freund 2022-07-13 05:41:31 Re: Reducing the chunk header sizes on all memory context types