Обсуждение: [COMMITTERS] pgsql: Fix race condition in reading commit timestamps

Поиск
Список
Период
Сортировка

[COMMITTERS] pgsql: Fix race condition in reading commit timestamps

От
Alvaro Herrera
Дата:
Fix race condition in reading commit timestamps

If a user requests the commit timestamp for a transaction old enough
that its data is concurrently being truncated away by vacuum at just the
right time, they would receive an ugly internal file-not-found error
message from slru.c rather than the expected NULL return value.

In a primary server, the window for the race is very small: the lookup
has to occur exactly between the two calls by vacuum, and there's not a
lot that happens between them (mostly just a multixact truncate).  In a
standby server, however, the window is larger because the truncation is
executed as soon as the WAL record for it is replayed, but the advance
of the oldest-Xid is not executed until the next checkpoint record.

To fix in the primary, simply reverse the order of operations in
vac_truncate_clog.  To fix in the standby, augment the WAL truncation
record so that the standby is aware of the new oldest-XID value and can
apply the update immediately.  WAL version bumped because of this.

No backpatch, because of the low importance of the bug and its rarity.

Author: Craig Ringer
Reviewed-By: Petr Jelínek, Peter Eisentraut
Discussion: https://postgr.es/m/CAMsr+YFhVtRQT1VAwC+WGbbxZZRzNou=N9Ed-FrCqkwQ8H8oJQ@mail.gmail.com

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/8eace46d34ab6ac0d887aa4d3504bc4222c2e448

Modified Files
--------------
src/backend/access/rmgrdesc/committsdesc.c |  6 +++---
src/backend/access/transam/commit_ts.c     | 21 +++++++++++++--------
src/backend/commands/vacuum.c              | 10 +++++++++-
src/include/access/commit_ts.h             |  8 ++++++++
src/include/access/xlog_internal.h         |  2 +-
5 files changed, 34 insertions(+), 13 deletions(-)