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

Ajin Cherian <itsajin@gmail.com>

From: Ajin Cherian <itsajin@gmail.com>
To: vignesh C <vignesh21@gmail.com>
Cc: Peter Smith <smithpb2250@gmail.com>, Amit Kapila <amit.kapila16@gmail.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2021-03-08T06:00:45Z
Lists: pgsql-hackers

Attachments

On Fri, Mar 5, 2021 at 9:25 PM vignesh C <vignesh21@gmail.com> wrote:

> Thanks for the updated patch.
> Few minor comments:

> We should include two_phase in tab completion (tab-complete.c file
> psql_completion(const char *text, int start, int end) function) :
> postgres=# create subscription sub1 connection 'port=5441
> dbname=postgres' publication  pub1 with (
> CONNECT             COPY_DATA           CREATE_SLOT         ENABLED
>          SLOT_NAME           SYNCHRONOUS_COMMIT
>

Updated.
> +
> +         <para>
> +          It is not allowed to combine <literal>streaming</literal> set to
> +          <literal>true</literal> and <literal>two_phase</literal> set to
> +          <literal>true</literal>.
> +         </para>
> +
> +        </listitem>
> +       </varlistentry>
> +       <varlistentry>
> +        <term><literal>two_phase</literal> (<type>boolean</type>)</term>
> +        <listitem>
> +         <para>
> +          Specifies whether two-phase commit is enabled for this subscription.
> +          The default is <literal>false</literal>.
> +         </para>
> +
> +         <para>
> +          When two-phase commit is enabled then the decoded
> transactions are sent
> +          to the subscriber on the PREPARE TRANSACTION. By default,
> the transaction
> +          preapred on publisher is decoded as normal transaction at commit.
> +         </para>
> +
> +         <para>
> +          It is not allowed to combine <literal>two_phase</literal> set to
> +          <literal>true</literal> and <literal>streaming</literal> set to
> +          <literal>true</literal>.
> +         </para>
>
> It is not allowed to combine streaming set to true and two_phase set to true.
> Should this be:
> streaming option is not supported along with two_phase option.
>
> Similarly here too:
> It is not allowed to combine two_phase set to true and streaming set to true.
> Should this be:
> two_phase option is not supported along with streaming option.

Reworded this with a small change.

>
> Few indentation issues are present, we can run pgindent:
> +extern void logicalrep_write_prepare(StringInfo out, ReorderBufferTXN *txn,
> +
>   XLogRecPtr prepare_lsn);
> +extern void logicalrep_read_prepare(StringInfo in,
> +
>  LogicalRepPreparedTxnData *prepare_data);
> +extern void logicalrep_write_commit_prepared(StringInfo out,
> ReorderBufferTXN* txn,
> +
>                   XLogRecPtr commit_lsn);
>
> ReorderBufferTXN * should be ReorderBufferTXN*

Changed accordingly.

Created new patch v53:
* Rebased to HEAD (this resulted in removing patch 0001) and reduced
patch-set to 4 patches.
* Removed the changes for making "stream prepare" optional from
required. Will create a new patch and thread for this.

regards,
Ajin Cherian
Fujitsu Australia

Commits

  1. Add prepare API support for streaming transactions in logical replication.

  2. Doc: minor improvements for logical replication protocol documentation.

  3. Fix test failure in 021_twophase.pl.

  4. Refactor to make common functions in proto.c and worker.c.

  5. Unify PostgresNode's new() and get_new_node() methods

  6. Fix potential buffer overruns in proto.c.

  7. Add support for prepared transactions to built-in logical replication.

  8. Refactor function parse_subscription_options.

  9. Allow enabling two-phase option via replication protocol.

  10. Don't use Asserts to check for violations of replication protocol.

  11. Improve psql tab completion for options of subcriptions and publications

  12. Rearrange logrep worker's snapshot handling some more.

  13. doc: Update information of new messages for logical replication.

  14. ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION

  15. Allow pgoutput to send logical decoding messages.

  16. Refactor function parse_output_parameters.

  17. Avoid repeated decoding of prepared transactions after a restart.

  18. Fix an oversight in ReorderBufferFinishPrepared.

  19. Allow multiple xacts during table sync in logical replication.

  20. Fix replication of in-progress transactions in tablesync worker.

  21. Fix 'skip-empty-xacts' option in test_decoding for streaming mode.

  22. Use Enum for top level logical replication message types.

  23. Add support for streaming to built-in logical replication.

  24. Fix the logical streaming test.

  25. Implement streaming mode in ReorderBuffer.

  26. Extend the logical decoding output plugin API with stream methods.

  27. Store 2PC GID in commit/abort WAL recs for logical decoding