Re: [PATCH] add concurrent_abort callback for output plugin
Ajin Cherian <itsajin@gmail.com>
From: Ajin Cherian <itsajin@gmail.com>
To: Markus Wanner <markus@bluegap.ch>
Cc: Markus Wanner <markus.wanner@enterprisedb.com>,
Amit Kapila <amit.kapila16@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-03-31T01:12:46Z
Lists: pgsql-hackers
Attachments
- v3-0001-Make-sure-a-prepare-is-sent-when-decoder-detects-.patch (application/octet-stream) patch v3-0001
On Tue, Mar 30, 2021 at 10:29 PM Markus Wanner <markus@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
Commits
-
Avoid sending prepare multiple times while decoding.
- f25a4584c6f5 14.0 landed
-
Ensure to send a prepare after we detect concurrent abort during decoding.
- 4778826532a6 14.0 landed