Immediately WAL-log subtransaction and top-level XID association.
authorAmit Kapila <akapila@postgresql.org>
Mon, 20 Jul 2020 03:18:26 +0000 (08:48 +0530)
committerAmit Kapila <akapila@postgresql.org>
Mon, 20 Jul 2020 03:18:26 +0000 (08:48 +0530)
commit0bead9af484c1d0a67e690fda47011addaa5bc9d
tree246db2163552a439ac1b7903fd36cb02e73cea3c
parentd05b172a760e0ccb3008a2144f96053720000b12
Immediately WAL-log subtransaction and top-level XID association.

The logical decoding infrastructure needs to know which top-level
transaction the subxact belongs to, in order to decode all the
changes. Until now that might be delayed until commit, due to the
caching (GPROC_MAX_CACHED_SUBXIDS), preventing features requiring
incremental decoding.

So we also write the assignment info into WAL immediately, as part
of the next WAL record (to minimize overhead) only when wal_level=logical.
We can not remove the existing XLOG_XACT_ASSIGNMENT WAL as that is
required for avoiding overflow in the hot standby snapshot.

Bump XLOG_PAGE_MAGIC, since this introduces XLR_BLOCK_ID_TOPLEVEL_XID.

Author: Tomas Vondra, Dilip Kumar, Amit Kapila
Reviewed-by: Amit Kapila
Tested-by: Neha Sharma and Mahendra Singh Thalor
Discussion: https://postgr.es/m/688b0b7f-2f6c-d827-c27b-216a8e3ea700@2ndquadrant.com
src/backend/access/transam/xact.c
src/backend/access/transam/xloginsert.c
src/backend/access/transam/xlogreader.c
src/backend/replication/logical/decode.c
src/include/access/xact.h
src/include/access/xlog.h
src/include/access/xlog_internal.h
src/include/access/xlogreader.h
src/include/access/xlogrecord.h