pgsql: Fix replay of create database records on standby

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема pgsql: Fix replay of create database records on standby
Дата
Msg-id E1oGxB6-001b0q-Ea@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix replay of create database records on standby

Crash recovery on standby may encounter missing directories
when replaying database-creation WAL records.  Prior to this
patch, the standby would fail to recover in such a case;
however, the directories could be legitimately missing.
Consider the following sequence of commands:

    CREATE DATABASE
    DROP DATABASE
    DROP TABLESPACE

If, after replaying the last WAL record and removing the
tablespace directory, the standby crashes and has to replay the
create database record again, crash recovery must be able to continue.

A fix for this problem was already attempted in 49d9cfc68bf4, but it
was reverted because of design issues.  This new version is based
on Robert Haas' proposal: any missing tablespaces are created
during recovery before reaching consistency.  Tablespaces
are created as real directories, and should be deleted
by later replay.  CheckRecoveryConsistency ensures
they have disappeared.

The problems detected by this new code are reported as PANIC,
except when allow_in_place_tablespaces is set to ON, in which
case they are WARNING.  Apart from making tests possible, this
gives users an escape hatch in case things don't go as planned.

Author: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Author: Asim R Praveen <apraveen@pivotal.io>
Author: Paul Guo <paulguo@gmail.com>
Reviewed-by: Anastasia Lubennikova <lubennikovaav@gmail.com> (older versions)
Reviewed-by: Fujii Masao <masao.fujii@oss.nttdata.com> (older versions)
Reviewed-by: Michaël Paquier <michael@paquier.xyz>
Diagnosed-by: Paul Guo <paulguo@gmail.com>
Discussion: https://postgr.es/m/CAEET0ZGx9AvioViLf7nbR_8tH9-=27DN5xWJ2P9-ROH16e4JUA@mail.gmail.com

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8348413dbded3c5880cf64e6a51d2a362c93ded4

Modified Files
--------------
src/backend/access/transam/xlogrecovery.c   |  50 ++++++++
src/backend/commands/dbcommands.c           |  77 +++++++++++++
src/backend/commands/tablespace.c           |  40 ++-----
src/test/recovery/t/033_replay_tsp_drops.pl | 169 ++++++++++++++++++++++++++++
4 files changed, 305 insertions(+), 31 deletions(-)


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

Предыдущее
От: Fujii Masao
Дата:
Сообщение: pgsql: Fix comment in procarray.c.
Следующее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Fix replay of create database records on standby