pgsql: Fix assertion failures while processing NEW_CID record in logica - Mailing list pgsql-committers

From Amit Kapila
Subject pgsql: Fix assertion failures while processing NEW_CID record in logica
Date
Msg-id E1olN5s-0039sZ-Vj@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix assertion failures while processing NEW_CID record in logical decoding.

When the logical decoding restarts from NEW_CID, since there is no
association between the top transaction and its subtransaction, both are
created as top transactions and have the same LSN. This caused the
assertion failure in AssertTXNLsnOrder().

This patch skips the assertion check until we reach the LSN at which we
start decoding the contents of the transaction, specifically
start_decoding_at LSN in SnapBuild. This is okay because we don't
guarantee to make the association between top transaction and
subtransaction until we try to decode the actual contents of transaction.
The ordering of the records prior to the start_decoding_at LSN should have
been checked before the restart.

The other assertion failure is due to the reason that we forgot to track
that we have considered top-level transaction id in the list of catalog
changing transactions that were committed when one of its subtransactions
is marked as containing catalog change.

Reported-by: Tomas Vondra, Osumi Takamichi
Author: Masahiko Sawada, Kuroda Hayato
Reviewed-by: Amit Kapila, Dilip Kumar, Kuroda Hayato, Kyotaro Horiguchi, Masahiko Sawada
Backpatch-through: 10
Discussion: https://postgr.es/m/a89b46b6-0239-2fd5-71a9-b19b1f7a7145%40enterprisedb.com
Discussion: https://postgr.es/m/TYCPR01MB83733C6CEAE47D0280814D5AED7A9%40TYCPR01MB8373.jpnprd01.prod.outlook.com

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1bf4d92060eeefa40b4d63d246a490379a5cec78

Modified Files
--------------
.../expected/catalog_change_snapshot.out           | 45 ++++++++++++++++++++++
.../specs/catalog_change_snapshot.spec             | 16 ++++++++
src/backend/replication/logical/reorderbuffer.c    | 14 +++++++
src/backend/replication/logical/snapbuild.c        |  3 ++
4 files changed, 78 insertions(+)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Better handle interrupting TAP tests
Next
From: Alvaro Herrera
Date:
Subject: pgsql: Use proper macro to access TransactionId