pgsql: Fix race condition in reading commit timestamps

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix race condition in reading commit timestamps
Date: 2017-01-19 21:24:47
Message-ID: E1cUKCN-0001JH-2b@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

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(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2017-01-19 22:23:26 Re: pgsql: Adapt python regression tests to 69f4b9c85f16.
Previous Message Peter Eisentraut 2017-01-19 21:20:27 Re: pgsql: Add function to import operating system collations