Re: 024_add_drop_pub.pl might fail due to deadlock
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Cc: Ajin Cherian <itsajin@gmail.com>, vignesh C <vignesh21@gmail.com>, Alexander Lakhin <exclusion@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-07-23T09:26:57Z
Lists: pgsql-hackers
On Wed, Jul 23, 2025 at 2:42 PM Hayato Kuroda (Fujitsu) <kuroda.hayato@fujitsu.com> wrote: > > Dear Ajin, > > Thanks for the patch. Firstly let me confirm my understanding. While altering the > subscription, locks are acquired with below ordering: > > Order target level > 1 pg_subscription row exclusive > 2 pg_subscription, my tuple access exclusive > 3 pg_subscription_rel access exclusive > 4 pg_replication_origin excluive > > In contrast, apply worker works like: > > Order target level > 1 pg_replication_origin excluive > 2 pg_subscription, my tuple access share > 3 pg_subscrition_rel row exclusive > > Thus a backend may wait at step 4, and apply worker can stuck at step 2 or 3. > > Below are my comments: > > ``` > @@ -340,7 +341,6 @@ process_syncing_tables_for_sync(XLogRecPtr current_lsn) > * is dropped. So passing missing_ok = false. > */ > ReplicationSlotDropAtPubNode(LogRepWorkerWalRcvConn, syncslotname, false); > - > ``` > This change is not needed. > > ``` > + if (!rel) > + rel = table_open(SubscriptionRelRelationId, AccessExclusiveLock); > + > ``` > > I feel it is too strong, isn't it enough to use row exclusive as initially used? > > ``` > UpdateSubscriptionRelState(Oid subid, Oid relid, char state, > - XLogRecPtr sublsn) > + XLogRecPtr sublsn, bool lock_needed) > ``` > > I feel the name `lock_needed` is bit misleading, because the function still opens > the pg_subscription_rel catalog with row exclusive. How about "lock_shared_object"? > I think if we lock in a caller, we don't need to use any lock during table_open. We can use the parameter name as already_locked as we do at some other places in the code. -- With Regards, Amit Kapila.
Commits
-
Fix a deadlock during ALTER SUBSCRIPTION ... DROP PUBLICATION.
- 2ab2d6f97058 19 (unreleased) landed
- d9f01a287ab1 18.0 landed
- 434d2d147b58 15.14 landed
- 41fb3f51cb74 14.19 landed
- 8c298324a4f3 17.6 landed
- adfd8021911a 16.10 landed