pgsql: Fix deadlock for multiple replicating truncates of the same tabl
От | Amit Kapila |
---|---|
Тема | pgsql: Fix deadlock for multiple replicating truncates of the same tabl |
Дата | |
Msg-id | E1ljvst-00074e-8E@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix deadlock for multiple replicating truncates of the same table. While applying the truncate change, the logical apply worker acquires RowExclusiveLock on the relation being truncated. This allowed truncate on the relation at a time by two apply workers which lead to a deadlock. The reason was that one of the workers after updating the pg_class tuple tries to acquire SHARE lock on the relation and started to wait for the second worker which has acquired RowExclusiveLock on the relation. And when the second worker tries to update the pg_class tuple, it starts to wait for the first worker which leads to a deadlock. Fix it by acquiring AccessExclusiveLock on the relation before applying the truncate change as we do for normal truncate operation. Author: Peter Smith, test case by Haiying Tang Reviewed-by: Dilip Kumar, Amit Kapila Backpatch-through: 11 Discussion: https://postgr.es/m/CAHut+PsNm43p0jM+idTvWwiGZPcP0hGrHMPK9TOAkc+a4UpUqw@mail.gmail.com Branch ------ REL_13_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/c83c0257e4c3ec3503f8d72698d70829af979803 Modified Files -------------- src/backend/replication/logical/worker.c | 9 +++--- src/test/subscription/t/010_truncate.pl | 53 +++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 5 deletions(-)
В списке pgsql-committers по дате отправления: