pgsql: Allow decoding at prepare time in ReorderBuffer.

From: Amit Kapila <akapila(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Allow decoding at prepare time in ReorderBuffer.
Date: 2021-01-04 03:13:53
Message-ID: E1kwGJd-0003vT-V6@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Allow decoding at prepare time in ReorderBuffer.

This patch allows PREPARE-time decoding of two-phase transactions (if the
output plugin supports this capability), in which case the transactions
are replayed at PREPARE and then committed later when COMMIT PREPARED
arrives.

Now that we decode the changes before the commit, the concurrent aborts
may cause failures when the output plugin consults catalogs (both system
and user-defined).

We detect such failures with a special sqlerrcode
ERRCODE_TRANSACTION_ROLLBACK introduced by commit 7259736a6e and stop
decoding the remaining changes. Then we rollback the changes when rollback
prepared is encountered.

Author: Ajin Cherian and Amit Kapila based on previous work by Nikhil Sontakke and Stas Kelvich
Reviewed-by: Amit Kapila, Peter Smith, Sawada Masahiko, Arseny Sher, and Dilip Kumar
Tested-by: Takamichi Osumi
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/a271a1b50e9bec07e2ef3a05e38e7285113e4ce6

Modified Files
--------------
contrib/test_decoding/Makefile | 2 +-
contrib/test_decoding/expected/twophase.out | 235 +++++++++++
contrib/test_decoding/expected/twophase_stream.out | 147 +++++++
contrib/test_decoding/sql/twophase.sql | 112 ++++++
contrib/test_decoding/sql/twophase_stream.sql | 45 +++
doc/src/sgml/logicaldecoding.sgml | 104 ++++-
src/backend/replication/logical/decode.c | 286 ++++++++++++--
src/backend/replication/logical/logical.c | 9 -
src/backend/replication/logical/reorderbuffer.c | 432 +++++++++++++++++----
src/backend/replication/logical/snapbuild.c | 7 +
src/include/replication/reorderbuffer.h | 33 +-
11 files changed, 1296 insertions(+), 116 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2021-01-04 10:49:21 pgsql: Simplify some comments in xml.c
Previous Message Bruce Momjian 2021-01-02 18:07:07 pgsql: Update copyright for 2021