From fd4e8f731fbfa5ccef88338d6fa39fe2b2a1820b Mon Sep 17 00:00:00 2001 From: Shveta Malik Date: Wed, 27 May 2026 09:18:50 +0530 Subject: [PATCH] top-up changes --- contrib/test_decoding/sql/slot.sql | 11 +++++++++-- src/backend/replication/slotfuncs.c | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/contrib/test_decoding/sql/slot.sql b/contrib/test_decoding/sql/slot.sql index eabbe05cc90..d8e0adccbfb 100644 --- a/contrib/test_decoding/sql/slot.sql +++ b/contrib/test_decoding/sql/slot.sql @@ -206,14 +206,18 @@ EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'caught: %', SQLERRM; END; $$; + +-- the concerned slot must not exist (it was dropped on error) SELECT count(*) = 0 AS slot_was_dropped FROM pg_replication_slots WHERE slot_name = 'regression_slot_error'; -SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_t3', 'test_decoding', true); +-- the session is still usable +SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_t3', 'test_decoding', false); -- pg_replication_slot_advance: error after acquiring the slot should -- release it so the session stays usable. SELECT slot_name FROM pg_replication_slot_advance('regression_slot_t3', pg_current_wal_lsn()); + DO $$ BEGIN PERFORM pg_replication_slot_advance('regression_slot_t3', '0/1'); @@ -221,7 +225,8 @@ EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'caught expected error'; END; $$; --- the session is still healthy + +-- the session is still usable SELECT slot_name FROM pg_replication_slot_advance('regression_slot_t3', pg_current_wal_lsn()); -- pg_copy_logical_replication_slot: error after creating the destination @@ -233,9 +238,11 @@ EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'caught: %', SQLERRM; END; $$; + -- the destination slot must not exist (it was dropped on error) SELECT count(*) = 0 AS dst_slot_dropped FROM pg_replication_slots WHERE slot_name = 'regression_slot_dst'; + -- the session is still usable SELECT count(*) >= 0 AS changes_ok FROM pg_logical_slot_get_changes('regression_slot_t3', NULL, NULL); diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index 9ba9bd892e6..d32e9187b95 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -194,6 +194,7 @@ create_logical_replication_slot(char *name, char *plugin, */ if (MyReplicationSlot != NULL) ReplicationSlotDropAcquired(); + PG_RE_THROW(); } PG_END_TRY(); @@ -633,6 +634,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS) { if (MyReplicationSlot != NULL) ReplicationSlotRelease(); + PG_RE_THROW(); } PG_END_TRY(); @@ -896,6 +898,7 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot) */ if (MyReplicationSlot != NULL) ReplicationSlotDropAcquired(); + PG_RE_THROW(); } PG_END_TRY(); -- 2.34.1