Re: [HACKERS] Get stuck when dropping a subscription duringsynchronizing table
От | Petr Jelinek |
---|---|
Тема | Re: [HACKERS] Get stuck when dropping a subscription duringsynchronizing table |
Дата | |
Msg-id | 441d1bec-8f38-bf87-1fe2-ff5186f30db6@2ndquadrant.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] Get stuck when dropping a subscription duringsynchronizing table (Peter Eisentraut <peter.eisentraut@2ndquadrant.com>) |
Ответы |
Re: [HACKERS] Get stuck when dropping a subscription duringsynchronizing table
Re: [HACKERS] Get stuck when dropping a subscription duringsynchronizing table |
Список | pgsql-hackers |
(was away for a while, got some time now for this again) On 22/06/17 04:43, Peter Eisentraut wrote: > The alternative is that we use the LockSharedObject() approach that was > already alluded to, like in the attached patch. Both approaches would > work equally fine AFAICT. I agree, but I think we need bigger overhaul of the locking/management in general. So here is patch which does much more changes. The patch does several important things (in no particular order): - Split SetSubscriptionRelState into AddSubscriptionRelState and UpdateSubscriptionRelState for the reasons said upstream, it's cleaner, there is no half-broken upsert logic and it has proper error checking for each action. - Do LockSharedObject in ALTER SUBSCRIPTION, DROP SUBSCRIPTION (this one is preexisting but mentioning it for context), SetSubscriptionRelState, AddSubscriptionRelState, and in the logicalrep_worker_launch. This means we use granular per object locks to deal with concurrency. - Because of above, the AccessExclusiveLock on pg_subscription is no longer needed, just normal RowExlusiveLock is used now. - logicalrep_worker_stop is also simplified due to the proper locking - There is new interface logicalrep_worker_stop_at_commit which is used by ALTER SUBSCRIPTION ... REFRESH PUBLICATION and by transactional variant of DROP SUBSCRIPTION to only kill workers at the end of transaction. - Locking/reading of subscription info is unified between DROP and ALTER SUBSCRIPTION commands. - DROP SUBSCRIPTION will kill all workers associated with subscription, not just apply. - The sync worker checks during startup if the relation is still subscribed. - The sync worker will exit when waiting for apply and apply has shut-down. - The log messages around workers and removed or disabled subscription are now more consistent between startup and normal runtime of the worker. - Some code deduplication and stylistic changes/simplification in related areas. - Fixed catcache's IndexScanOK() handling of the subscription catalog. It's bit bigger patch but solves issues from multiple threads around handling of ALTER/DROP subscription. A lot of the locking that I added is normally done transparently by dependency handling, but subscriptions and subscription relation status do not use that much as it was deemed to bloat pg_depend needlessly during the original patch review (it's also probably why this has slipped through). -- Petr Jelinek http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Вложения
В списке pgsql-hackers по дате отправления: