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

From: vignesh C <vignesh21(at)gmail(dot)com>
To: Peter Smith <smithpb2250(at)gmail(dot)com>
Cc: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, "tanghy(dot)fnst(at)fujitsu(dot)com" <tanghy(dot)fnst(at)fujitsu(dot)com>, Ajin Cherian <itsajin(at)gmail(dot)com>, Greg Nancarrow <gregn4422(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [HACKERS] logical decoding of two-phase transactions
Date: 2021-07-16 06:08:24
Message-ID: CALDaNm0LVY5A98xrgaodynnj6c=WQ5=ZMpauC44aRio7-jWBYQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Jul 14, 2021 at 2:03 PM Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
>
> On Wed, Jul 14, 2021 at 4:23 PM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
> >
> > On Mon, Jul 12, 2021 at 9:14 AM Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
> > >
> > > On Sun, Jul 11, 2021 at 8:20 PM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
> > > >
> > > > On Fri, Jul 9, 2021 at 4:43 AM Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
> > > > >
> > > > > > The patch looks good to me, I don't have any comments.
> > > > >
> > > > > I tried the v95-0001 patch.
> > > > >
> > > > > - The patch applied cleanly and all build / testing was OK.
> > > > > - The documentation also builds OK.
> > > > > - I checked all v95-0001 / v93-0001 differences and found no problems.
> > > > > - Furthermore, I noted that v95-0001 patch is passing the cfbot [1].
> > > > >
> > > > > So this patch LGTM.
> > > > >
> > > >
> > > > Thanks, I took another pass over it and made a few changes in docs and
> > > > comments. I am planning to push this next week sometime (by 14th July)
> > > > unless there are more comments from you or someone else. Just to
> > > > summarize, this patch will add support for prepared transactions to
> > > > built-in logical replication. To add support for streaming
> > > > transactions at prepare time into the
> > > > built-in logical replication, we need to do the following things: (a)
> > > > Modify the output plugin (pgoutput) to implement the new two-phase API
> > > > callbacks, by leveraging the extended replication protocol. (b) Modify
> > > > the replication apply worker, to properly handle two-phase
> > > > transactions by replaying them on prepare. (c) Add a new SUBSCRIPTION
> > > > option "two_phase" to allow users to enable
> > > > two-phase transactions. We enable the two_phase once the initial data
> > > > sync is over. Refer to comments atop worker.c in the patch and commit
> > > > message to see further details about this patch. After this patch,
> > > > there is a follow-up patch to allow streaming and two-phase options
> > > > together which I feel needs some more review and can be committed
> > > > separately.
> > > >
> > >
> > > FYI - I repeated the same verification of the v96-0001 patch as I did
> > > previously for v95-0001
> > >
> > > - The v96 patch applied cleanly and all build / testing was OK.
> > > - The documentation also builds OK.
> > > - I checked the v95-0001 / v96-0001 differences and found no problems.
> > > - Furthermore, I noted that v96-0001 patch is passing the cfbot.
> > >
> > > LGTM.
> > >
> >
> > Pushed.
> >
> > Feel free to submit the remaining patches after rebase. Is it possible
> > to post patches related to skipping empty transactions in the other
> > thread [1] where that topic is being discussed?
> >
> > [1] - https://www.postgresql.org/message-id/CAMkU%3D1yohp9-dv48FLoSPrMqYEyyS5ZWkaZGD41RJr10xiNo_Q%40mail.gmail.com
> >
>
>
> Please find attached the latest patch set v97*
>
> * Rebased v94* to HEAD @ today.

Thanks for the updated patch, the patch applies cleanly and test passes:
I had couple of comments:
1) Should we include "stream_prepare_cb" here in
logicaldecoding-streaming section of logicaldecoding.sgml
documentation:
To reduce the apply lag caused by large transactions, an output plugin
may provide additional callback to support incremental streaming of
in-progress transactions. There are multiple required streaming
callbacks (stream_start_cb, stream_stop_cb, stream_abort_cb,
stream_commit_cb and stream_change_cb) and two optional callbacks
(stream_message_cb and stream_truncate_cb).

2) Should we add an example for stream_prepare_cb here in
logicaldecoding-streaming section of logicaldecoding.sgml
documentation:
One example sequence of streaming callback calls for one transaction
may look like this:

stream_start_cb(...); <-- start of first block of changes
stream_change_cb(...);
stream_change_cb(...);
stream_message_cb(...);
stream_change_cb(...);
...
stream_change_cb(...);
stream_stop_cb(...); <-- end of first block of changes

stream_start_cb(...); <-- start of second block of changes
stream_change_cb(...);
stream_change_cb(...);
stream_change_cb(...);
...
stream_message_cb(...);
stream_change_cb(...);
stream_stop_cb(...); <-- end of second block of changes

stream_commit_cb(...); <-- commit of the streamed transaction

Regards,
Vignesh

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Japin Li 2021-07-16 06:13:07 Re: Why ALTER SUBSCRIPTION ... SET (slot_name='none') requires subscription disabled?
Previous Message Amit Kapila 2021-07-16 06:06:14 Re: Why ALTER SUBSCRIPTION ... SET (slot_name='none') requires subscription disabled?