pgsql: Fix the Drop Database hang. - Mailing list pgsql-committers

From Amit Kapila
Subject pgsql: Fix the Drop Database hang.
Date
Msg-id E1pKAd5-005BKs-Vr@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix the Drop Database hang.

The drop database command waits for the logical replication sync worker to
accept ProcSignalBarrier and the worker's slot creation waits for the drop
database to finish which leads to a deadlock. This happens because the
tablesync worker holds interrupts while creating a slot.

We prevent cancel/die interrupts while creating a slot in the table sync
worker because it is possible that before the server finishes this
command, a concurrent drop subscription happens which would complete
without removing this slot and that leads to the slot existing until the
end of walsender. However, the slot will eventually get dropped at the
walsender exit time, so there is no danger of the dangling slot.

This patch reallows cancel/die interrupts while creating a slot and
modifies the test to wait for slots to become zero to prevent finding an
ephemeral slot.

The reported hang doesn't happen in PG14 as the drop database starts to
wait for ProcSignalBarrier with PG15 (commits 4eb2176318 and e2f65f4255)
but it is good to backpatch this till PG14 as it is not a good idea to
prevent interrupts during a network call that could block indefinitely.

Reported-by: Lakshmi Narayanan Sreethar
Diagnosed-by: Andres Freund
Author: Hou Zhijie
Reviewed-by: Vignesh C, Amit Kapila
Backpatch-through: 14, where it was introduced in commit 6b67d72b60
Discussion: https://postgr.es/m/CA+kvmZELXQ4ZD3U=XCXuG3KvFgkuPoN1QrEj8c-rMRodrLOnsg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/6c6d6ba3ee2c160b53f727cf8e612014b316d6e4

Modified Files
--------------
src/backend/replication/logical/tablesync.c |  7 -------
src/test/subscription/t/004_sync.pl         | 10 +++++++---
2 files changed, 7 insertions(+), 10 deletions(-)


pgsql-committers by date:

Previous
From: Andres Freund
Date:
Subject: pgsql: libpqwalreceiver: Convert to libpq-be-fe-helpers.h
Next
From: Robert Haas
Date:
Subject: pgsql: Adjust interaction of CREATEROLE with role properties.