postgres/contrib/test_decoding/expected
Masahiko Sawada d87d07b7ad Fix re-distributing previously distributed invalidation messages during logical decoding.
Commit 4909b38af0 introduced logic to distribute invalidation messages
from catalog-modifying transactions to all concurrent in-progress
transactions. However, since each transaction distributes not only its
original invalidation messages but also previously distributed
messages to other transactions, this leads to an exponential increase
in allocation request size for invalidation messages, ultimately
causing memory allocation failure.

This commit fixes this issue by tracking distributed invalidation
messages separately per decoded transaction and not redistributing
these messages to other in-progress transactions. The maximum size of
distributed invalidation messages that one transaction can store is
limited to MAX_DISTR_INVAL_MSG_PER_TXN (8MB). Once the size of the
distributed invalidation messages exceeds this threshold, we
invalidate all caches in locations where distributed invalidation
messages need to be executed.

Back-patch to all supported versions where we introduced the fix by
commit 4909b38af0.

Note that this commit adds two new fields to ReorderBufferTXN to store
the distributed transactions. This change breaks ABI compatibility in
back branches, affecting third-party extensions that depend on the
size of the ReorderBufferTXN struct, though this scenario seems
unlikely.

Additionally, it adds a new flag to the txn_flags field of
ReorderBufferTXN to indicate distributed invalidation message
overflow. This should not affect existing implementations, as it is
unlikely that third-party extensions use unused bits in the txn_flags
field.

Bug: #18938 #18942
Author: vignesh C <vignesh21@gmail.com>
Reported-by: Duncan Sands <duncan.sands@deepbluecap.com>
Reported-by: John Hutchins <john.hutchins@wicourts.gov>
Reported-by: Laurence Parry <greenreaper@hotmail.com>
Reported-by: Max Madden <maxmmadden@gmail.com>
Reported-by: Braulio Fdo Gonzalez <brauliofg@gmail.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Reviewed-by: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Discussion: https://postgr.es/m/680bdaf6-f7d1-4536-b580-05c2760c67c6@deepbluecap.com
Discussion: https://postgr.es/m/18942-0ab1e5ae156613ad@postgresql.org
Discussion: https://postgr.es/m/18938-57c9a1c463b68ce0@postgresql.org
Discussion: https://postgr.es/m/CAD1FGCT2sYrP_70RTuo56QTizyc+J3wJdtn2gtO3VttQFpdMZg@mail.gmail.com
Discussion: https://postgr.es/m/CANO2=B=2BT1hSYCE=nuuTnVTnjidMg0+-FfnRnqM6kd23qoygg@mail.gmail.com
Backpatch-through: 13
2025-06-16 17:36:01 -07:00
..
binary.out
catalog_change_snapshot.out Fix assertion failures while processing NEW_CID record in logical decoding. 2022-10-20 08:49:48 +05:30
concurrent_ddl_dml.out Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
concurrent_stream.out Remove incidental md5() function uses from several tests 2023-07-04 14:31:57 +02:00
ddl.out Add pg_constraint rows for not-null constraints 2024-11-08 13:28:48 +01:00
decoding_in_xact.out Make RelationFlushRelation() work without ResourceOwner during abort 2024-06-06 18:56:28 +03:00
decoding_into_rel.out Revert "Logical decoding of sequences" 2022-04-07 20:06:36 +02:00
delayed_startup.out Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
invalidation_distribution.out Fix re-distributing previously distributed invalidation messages during logical decoding. 2025-06-16 17:36:01 -07:00
messages.out Add flush option to pg_logical_emit_message() 2023-10-18 11:24:59 +09:00
mxact.out Revert "Logical decoding of sequences" 2022-04-07 20:06:36 +02:00
oldest_xmin.out Fix xmin advancement during fast_forward decoding. 2025-04-28 11:35:54 +05:30
ondisk_startup.out Revert "Logical decoding of sequences" 2022-04-07 20:06:36 +02:00
permissions.out Add a slot synchronization function. 2024-02-14 09:45:36 +05:30
prepared.out
replorigin.out Fix the misuse of origin filter across multiple pg_logical_slot_get_changes() calls. 2023-09-27 14:32:51 +05:30
rewrite.out Revert "Logical decoding of sequences" 2022-04-07 20:06:36 +02:00
skip_snapshot_restore.out Fix possibility of logical decoding partial transaction changes. 2024-07-11 22:48:23 +09:00
slot_creation_error.out Close race condition in slot_creation_error.spec. 2022-03-18 18:18:00 -07:00
slot.out Revise GUC names quoting in messages again 2024-05-17 11:44:26 +02:00
snapshot_transfer.out Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
spill.out
stats.out Skip logical decoding of already-aborted transactions. 2025-02-12 16:31:34 -08:00
stream.out Skip logical decoding of already-aborted transactions. 2025-02-12 16:31:34 -08:00
subxact_without_top.out Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
time.out
toast.out Revert "Logical decoding of sequences" 2022-04-07 20:06:36 +02:00
truncate.out Revert "Logical decoding of sequences" 2022-04-07 20:06:36 +02:00
twophase_snapshot.out Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
twophase_stream.out Add STREAM_START/STREAM_STOP for transactional messages during decoding. 2023-10-30 14:36:21 +05:30
twophase.out Stabilize the test added by commit 022564f60c. 2024-10-08 12:25:52 +05:30
xact.out