pgsql: Extend the output plugin API to allow decoding of prepared xacts

From: Amit Kapila <akapila(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Extend the output plugin API to allow decoding of prepared xacts
Date: 2020-12-30 10:56:04
Message-ID: E1kuZ9A-00082O-EM@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Extend the output plugin API to allow decoding of prepared xacts.

This adds six methods to the output plugin API, adding support for
streaming changes of two-phase transactions at prepare time.

* begin_prepare
* filter_prepare
* prepare
* commit_prepared
* rollback_prepared
* stream_prepare

Most of this is a simple extension of the existing methods, with the
semantic difference that the transaction is not yet committed and maybe
aborted later.

Until now two-phase transactions were translated into regular transactions
on the subscriber, and the GID was not forwarded to it. None of the
two-phase commands were communicated to the subscriber.

This patch provides the infrastructure for logical decoding plugins to be
informed of two-phase commands Like PREPARE TRANSACTION, COMMIT PREPARED
and ROLLBACK PREPARED commands with the corresponding GID.

This also extends the 'test_decoding' plugin, implementing these new
methods.

This commit simply adds these new APIs and the upcoming patch to "allow
the decoding at prepare time in ReorderBuffer" will use these APIs.

Author: Ajin Cherian and Amit Kapila based on previous work by Nikhil Sontakke and Stas Kelvich
Reviewed-by: Amit Kapila, Peter Smith, Sawada Masahiko, and Dilip Kumar
Discussion:
https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru
https://postgr.es/m/CAMGcDxeqEpWj3fTXwqhSwBdXd2RS9jzwWscO-XbeCfso6ts3+Q@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/0aa8a01d04c8fe200b7a106878eebc3d0af9105c

Modified Files
--------------
contrib/test_decoding/test_decoding.c | 167 +++++++++++++++++
doc/src/sgml/logicaldecoding.sgml | 172 ++++++++++++++++-
src/backend/replication/logical/logical.c | 297 ++++++++++++++++++++++++++++++
src/include/replication/logical.h | 6 +
src/include/replication/output_plugin.h | 56 ++++++
src/include/replication/reorderbuffer.h | 41 +++++
src/tools/pgindent/typedefs.list | 12 ++
7 files changed, 744 insertions(+), 7 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2020-12-30 12:24:53 pgsql: Sanitize IF NOT EXISTS in EXPLAIN for CTAS and matviews
Previous Message Noah Misch 2020-12-30 09:46:51 pgsql: In pg_upgrade cross-version test, handle lack of oldstyle_length