pgsql: Stop demanding that top xact must be seen before subxact in deco

From: Amit Kapila <akapila(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Stop demanding that top xact must be seen before subxact in deco
Date: 2020-02-19 03:41:03
Message-ID: E1j4GER-0006ik-Du@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Stop demanding that top xact must be seen before subxact in decoding.

Manifested as

ERROR: subtransaction logged without previous top-level txn record

this check forbids legit behaviours like
- First xl_xact_assignment record is beyond reading, i.e. earlier
restart_lsn.
- After restart_lsn there is some change of a subxact.
- After that, there is second xl_xact_assignment (for another subxact)
revealing the relationship between top and first subxact.

Such a transaction won't be streamed anyway because we hadn't seen it in
full. Saying for sure whether xact of some record encountered after
the snapshot was deserialized can be streamed or not requires to know
whether it wrote something before deserialization point --if yes, it
hasn't been seen in full and can't be decoded. Snapshot doesn't have such
info, so there is no easy way to relax the check.

Reported-by: Hsu, John
Diagnosed-by: Arseny Sher
Author: Arseny Sher, Amit Kapila
Reviewed-by: Amit Kapila, Dilip Kumar
Backpatch-through: 9.5
Discussion: https://postgr.es/m/AB5978B2-1772-4FEE-A245-74C91704ECB0@amazon.com

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/b448aa44170b6f67fdb34d4a85610949f15cef96

Modified Files
--------------
contrib/test_decoding/Makefile | 2 +-
.../test_decoding/expected/subxact_without_top.out | 39 ++++++++++++++
.../test_decoding/specs/subxact_without_top.spec | 63 ++++++++++++++++++++++
src/backend/replication/logical/reorderbuffer.c | 3 --
4 files changed, 103 insertions(+), 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2020-02-19 04:21:04 pgsql: Clean up some code, comments and docs referring to Windows 2000
Previous Message Peter Geoghegan 2020-02-19 00:08:18 pgsql: Remove obsolete _bt_compare() comment.