On Tue, Mar 30, 2021 at 10:29 PM Markus Wanner <mar...@bluegap.ch> wrote:

>
> I just noticed as of PG13, concurrent_abort is part of ReorderBufferTXN,
> so it seems the prepare_cb (or stream_prepare_cb) can actually figure a
> concurrent abort happened (and the transaction may be incomplete).
> That's good and indeed makes an additional callback unnecessary.
>
> I recommend giving a hint to that field in the documentation as well.
>
> > diff --git a/doc/src/sgml/logicaldecoding.sgml
> b/doc/src/sgml/logicaldecoding.sgml
> > index 80eb96d..d2f8d39 100644
> > --- a/doc/src/sgml/logicaldecoding.sgml
> > +++ b/doc/src/sgml/logicaldecoding.sgml
> > @@ -545,12 +545,14 @@ CREATE TABLE another_catalog_table(data text) WITH
> (user_catalog_table = true);
> >       executed within that transaction. A transaction that is prepared
> for
> >       a two-phase commit using <command>PREPARE TRANSACTION</command>
> will
> >       also be decoded if the output plugin callbacks needed for decoding
> > -     them are provided. It is possible that the current transaction
> which
> > +     them are provided. It is possible that the current prepared
> transaction which
> >       is being decoded is aborted concurrently via a <command>ROLLBACK
> PREPARED</command>
> >       command. In that case, the logical decoding of this transaction
> will
> > -     be aborted too. We will skip all the changes of such a transaction
> once
> > -     the abort is detected and abort the transaction when we read WAL
> for
> > -     <command>ROLLBACK PREPARED</command>.
> > +     be aborted too. All the changes of such a transaction is skipped
> once
>
> typo: changes [..] *are* skipped, plural.
>

Updated.


>
> > +     the abort is detected and the <function>prepare_cb</function>
> callback is invoked.
> > +     This could result in a prepared transaction with incomplete
> changes.
>
> ... "in which case the <literal>concurrent_abort</literal> field of the
> passed <literal>ReorderBufferTXN</literal> struct is set.", as a proposal?
>
> > +     This is done so that eventually when the <command>ROLLBACK
> PREPARED</command>
> > +     is decoded, there is a corresponding prepared transaction with a
> matching gid.
> >      </para>
> >
> >      <note>
>
> Everything else sounds good to me.
>

Updated.

regards,
Ajin Cherian
Fujitsu Australia

Attachment: v3-0001-Make-sure-a-prepare-is-sent-when-decoder-detects-.patch
Description: Binary data

Reply via email to