]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Fix assertion failures while processing NEW_CID record in logical decoding.
authorAmit Kapila <akapila@postgresql.org>
Thu, 20 Oct 2022 03:37:04 +0000 (09:07 +0530)
committerAmit Kapila <akapila@postgresql.org>
Thu, 20 Oct 2022 03:37:04 +0000 (09:07 +0530)
commit5f7076cb609ee9e7b928d038555423955104fa64
tree680cc3b8865ee5deea05cea3c7f271466ced9239
parentda3a6825eb154155d7e650931ea52f2e68ee4304
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
contrib/test_decoding/expected/catalog_change_snapshot.out
contrib/test_decoding/specs/catalog_change_snapshot.spec
src/backend/replication/logical/reorderbuffer.c
src/backend/replication/logical/snapbuild.c