RE: Avoid streaming the transaction which are skipped (in corner cases)

From: "houzj(dot)fnst(at)fujitsu(dot)com" <houzj(dot)fnst(at)fujitsu(dot)com>
To: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Cc: Dilip Kumar <dilipbalaut(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, "shiy(dot)fnst(at)fujitsu(dot)com" <shiy(dot)fnst(at)fujitsu(dot)com>
Subject: RE: Avoid streaming the transaction which are skipped (in corner cases)
Date: 2022-12-04 11:44:15
Message-ID: OS0PR01MB57168B7D2CE561FD9B14DB4994199@OS0PR01MB5716.jpnprd01.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Saturday, December 3, 2022 7:37 PM Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> wrote:
>
> On Tue, Nov 29, 2022 at 12:23 PM houzj(dot)fnst(at)fujitsu(dot)com
> <houzj(dot)fnst(at)fujitsu(dot)com> wrote:
> >
> > On Tuesday, November 29, 2022 12:08 PM Dilip Kumar
> <dilipbalaut(at)gmail(dot)com> wrote:
> >
> > I have few comments about the patch.
> >
> > 1.
> >
> > 1.1.
> > - /* For streamed transactions notify the remote node about the abort.
> */
> > - if (rbtxn_is_streamed(txn))
> > - rb->stream_abort(rb, txn, lsn);
> > + /* the transaction which is being skipped shouldn't have been
> streamed */
> > + Assert(!rbtxn_is_streamed(txn));
> >
> > 1.2
> > - rbtxn_is_serialized(txn))
> > + rbtxn_is_serialized(txn) &&
> > + rbtxn_has_streamable_change(txn))
> > ReorderBufferStreamTXN(rb, toptxn);
> >
> > In the above two places, I think we should do the check for the
> > top-level transaction(e.g. toptxn) because the patch only set flag for
> > the top-level transaction.
> >
>
> Among these, the first one seems okay because it will check both the transaction
> and its subtransactions from that path and none of those should be marked as
> streamed. I have fixed the second one in the attached patch.
>
> > 2.
> >
> > + /*
> > + * If there are any streamable changes getting queued then get the
> top
> > + * transaction and mark it has streamable change. This is required
> for
> > + * streaming in-progress transactions, the in-progress transaction will
> > + * not be selected for streaming unless it has at least one streamable
> > + * change.
> > + */
> > + if (change->action == REORDER_BUFFER_CHANGE_INSERT ||
> > + change->action == REORDER_BUFFER_CHANGE_UPDATE ||
> > + change->action == REORDER_BUFFER_CHANGE_DELETE ||
> > + change->action ==
> REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT ||
> > + change->action ==
> REORDER_BUFFER_CHANGE_TRUNCATE)
> >
> > I think that a transaction that contains REORDER_BUFFER_CHANGE_MESSAGE
> > can also be considered as streamable. Is there a reason that we don't check it
> here ?
> >
>
> No, I don't see any reason not to do this check for
> REORDER_BUFFER_CHANGE_MESSAGE.
>
> Apart from the above, I have slightly adjusted the comments in the attached. Do
> let me know what you think of the attached.

Thanks for updating the patch. It looks good to me.

Best regards,
Hou zj

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2022-12-04 12:53:15 Re: Error-safe user functions
Previous Message houzj.fnst@fujitsu.com 2022-12-04 11:18:29 RE: Perform streaming logical transactions by background workers and parallel apply