From: | Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix bugs in Serializable Snapshot Isolation. |
Date: | 2011-03-01 17:06:48 |
Message-ID: | E1PuT28-0006lM-7V@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix bugs in Serializable Snapshot Isolation.
Change the way UPDATEs are handled. Instead of maintaining a chain of
tuple-level locks in shared memory, copy any existing locks on the old
tuple to the new tuple at UPDATE. Any existing page-level lock needs to
be duplicated too, as a lock on the new tuple. That was neglected
previously.
Store xmin on tuple-level predicate locks, to distinguish a lock on an old
already-recycled tuple from a new tuple at the same physical location.
Failure to distinguish them caused loops in the tuple-lock chains, as
reported by YAMAMOTO Takashi. Although we don't use the chain representation
of UPDATEs anymore, it seems like a good idea to store the xmin to avoid
some false positives if no other reason.
CheckSingleTargetForConflictsIn now correctly handles the case where a lock
that's being held is not reflected in the local lock table. That happens
if another backend acquires a lock on our behalf due to an UPDATE or a page
split.
PredicateLockPageCombine now retains locks for the page that is being
removed, rather than removing them. This prevents a potentially dangerous
false-positive inconsistency where the local lock table believes that a lock
is held, but it is actually not.
Dan Ports and Kevin Grittner
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/47ad79122bc099c1f0ea8a7ae413fcd8d45e26a6
Modified Files
--------------
src/backend/access/nbtree/nbtree.c | 1 -
src/backend/storage/lmgr/predicate.c | 383 ++++++++++-------------------
src/include/storage/lwlock.h | 1 -
src/include/storage/predicate_internals.h | 54 ++---
4 files changed, 148 insertions(+), 291 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Heikki Linnakangas | 2011-03-01 18:57:51 | pgsql: Change pg_last_xlog_receive_location() not to move backwards. Th |
Previous Message | Peter Eisentraut | 2011-03-01 16:46:17 | pgsql: Dump the COLLATABLE attribute in CREATE TYPE |