pgsql: Fix race between DROP TABLESPACE and checkpointing.

Поиск
Список
Период
Сортировка
От Thomas Munro
Тема pgsql: Fix race between DROP TABLESPACE and checkpointing.
Дата
Msg-id E1nUMNL-000HQX-HL@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix race between DROP TABLESPACE and checkpointing.

Commands like ALTER TABLE SET TABLESPACE may leave files for the next
checkpoint to clean up.  If such files are not removed by the time DROP
TABLESPACE is called, we request a checkpoint so that they are deleted.
However, there is presently a window before checkpoint start where new
unlink requests won't be scheduled until the following checkpoint.  This
means that the checkpoint forced by DROP TABLESPACE might not remove the
files we expect it to remove, and the following ERROR will be emitted:

        ERROR:  tablespace "mytblspc" is not empty

To fix, add a call to AbsorbSyncRequests() just before advancing the
unlink cycle counter.  This ensures that any unlink requests forwarded
prior to checkpoint start (i.e., when ckpt_started is incremented) will
be processed by the current checkpoint.  Since AbsorbSyncRequests()
performs memory allocations, it cannot be called within a critical
section, so we also need to move SyncPreCheckpoint() to before
CreateCheckPoint()'s critical section.

This is an old bug, so back-patch to all supported versions.

Author: Nathan Bossart <nathandbossart@gmail.com>
Reported-by: Nathan Bossart <nathandbossart@gmail.com>
Reviewed-by: Thomas Munro <thomas.munro@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20220215235845.GA2665318%40nathanxps13

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/51e760e5a667e7fcc1660756d657121b778861bf

Modified Files
--------------
src/backend/access/transam/xlog.c | 15 ++++++++-------
src/backend/storage/sync/sync.c   | 14 +++++++++++++-
2 files changed, 21 insertions(+), 8 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: pgsql: Fix race between DROP TABLESPACE and checkpointing.
Следующее
От: Thomas Munro
Дата:
Сообщение: pgsql: Fix race between DROP TABLESPACE and checkpointing.