pgsql: Advance the stop point for multixact offset creation only at che

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Advance the stop point for multixact offset creation only at che
Date: 2015-05-11 02:48:21
Message-ID: E1YrdlV-0002K3-5l@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Advance the stop point for multixact offset creation only at checkpoint.

Commit b69bf30b9bfacafc733a9ba77c9587cf54d06c0c advanced the stop point
at vacuum time, but this has subsequently been shown to be unsafe as a
result of analysis by myself and Thomas Munro and testing by Thomas
Munro. The crux of the problem is that the SLRU deletion logic may
get confused about what to remove if, at exactly the right time during
the checkpoint process, the head of the SLRU crosses what used to be
the tail.

This patch, by me, fixes the problem by advancing the stop point only
following a checkpoint. This has the additional advantage of making
the removal logic work during recovery more like the way it works during
normal running, which is probably good.

At least one of the calls to DetermineSafeOldestOffset which this patch
removes was already dead, because MultiXactAdvanceOldest is called only
during recovery and DetermineSafeOldestOffset was set up to do nothing
during recovery. That, however, is inconsistent with the principle that
recovery and normal running should work similarly, and was confusing to
boot.

Along the way, fix some comments that previous patches in this area
neglected to update. It's not clear to me whether there's any
concrete basis for the decision to use only half of the multixact ID
space, but it's neither necessary nor sufficient to prevent multixact
member wraparound, so the comments should not say otherwise.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/f6a6c46d7fd72878d37c75d4a3215d5a62128d0b

Modified Files
--------------
src/backend/access/transam/multixact.c | 43 +++++++++++++-------------------
1 file changed, 17 insertions(+), 26 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Thom Brown 2015-05-11 08:49:24 Re: pgsql: Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE.
Previous Message Robert Haas 2015-05-11 02:03:16 pgsql: Fix DetermineSafeOldestOffset for the case where there are no mx