postgresql/contrib/test_decoding/expected
Amit Kapila e385a4e2fd Prevent unintended dropping of active replication origins.
Commit 5b148706c5 exposed functionality that allows multiple processes to
use the same replication origin, enabling non-builtin logical replication
solutions to implement parallel apply for large transactions.

With this functionality, if two backends acquire the same replication
origin and one of them resets it first, the acquired_by flag is cleared
without acknowledging that another backend is still actively using the
origin. This can lead to the origin being unintentionally dropped. If the
shared memory for that dropped origin is later reused for a newly created
origin, the remaining backend that still holds a pointer to the old memory
may inadvertently advance the LSN of a completely different origin,
causing unpredictable behavior.

Although the underlying issue predates commit 5b148706c5, it did not
surface earlier because the internal parallel apply worker mechanism
correctly coordinated origin resets and drops.

This commit resolves the problem by introducing a reference counter for
replication origins. The reference count increases when a backend sets the
origin and decreases when it resets it. Additionally, the backend that
first acquires the origin will not release it until all other backends
using the origin have released it as well.

The patch also prevents dropping a replication origin when acquired_by is
zero but the reference counter is nonzero, covering the scenario where the
first session exits without properly releasing the origin.

Author: Hou Zhijie <houzj.fnst@fujitsu.com>
Author: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Reviewed-by: Shveta Malik <shveta.malik@gmail.com>
Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Discussion: https://postgr.es/m/TY4PR01MB169077EE72ABE9E55BAF162D494B5A@TY4PR01MB16907.jpnprd01.prod.outlook.com
Discussion: https://postgr.es/m/CAMPB6wfe4zLjJL8jiZV5kjjpwBM2=rTRme0UCL7Ra4L8MTVdOg@mail.gmail.com
2026-01-14 07:15:46 +00:00
..
binary.out Message style improvements 2015-10-28 20:38:36 -04:00
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
parallel_session_origin.out Prevent unintended dropping of active replication origins. 2026-01-14 07:15:46 +00:00
permissions.out Add a slot synchronization function. 2024-02-14 09:45:36 +05:30
prepared.out Add skip-empty-xacts option to test_decoding for use in the regression tests. 2014-09-01 15:59:44 +02:00
replorigin.out Add optional pid parameter to pg_replication_origin_session_setup(). 2025-09-19 05:38:40 +00:00
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.out Revise GUC names quoting in messages again 2024-05-17 11:44:26 +02:00
slot_creation_error.out Close race condition in slot_creation_error.spec. 2022-03-18 18:18:00 -07:00
snapshot_transfer.out Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
spill.out Make contrib/test_decoding regression tests safe for CZ locale. 2016-11-21 20:39:28 -05:00
stats.out Rename column slotsync_skip_at to slotsync_last_skip. 2025-12-05 04:12:55 +00: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 logical decoding: fix decoding of a commit's commit time. 2016-03-02 23:42:21 -08:00
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.out Stabilize the test added by commit 022564f60c. 2024-10-08 12:25:52 +05:30
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
xact.out Don't propagate a null subtransaction snapshot up to parent transaction. 2016-08-07 13:15:55 -04:00