pgsql: Fix FOR UPDATE NOWAIT on updated tuple chains

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема pgsql: Fix FOR UPDATE NOWAIT on updated tuple chains
Дата
Msg-id E1XMmSU-00072v-VO@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix FOR UPDATE NOWAIT on updated tuple chains

If SELECT FOR UPDATE NOWAIT tries to lock a tuple that is concurrently
being updated, it might fail to honor its NOWAIT specification and block
instead of raising an error.

Fix by adding a no-wait flag to EvalPlanQualFetch which it can pass down
to heap_lock_tuple; also use it in EvalPlanQualFetch itself to avoid
blocking while waiting for a concurrent transaction.

Authors: Craig Ringer and Thomas Munro, tweaked by Álvaro
http://www.postgresql.org/message-id/51FB6703.9090801@2ndquadrant.com

Per Thomas Munro in the course of his SKIP LOCKED feature submission,
who also provided one of the isolation test specs.

Backpatch to 9.4, because that's as far back as it applies without
conflicts (although the bug goes all the way back).  To that branch also
backpatch Thomas Munro's new NOWAIT test cases, committed in master by
Heikki as commit 9ee16b49f0aac819bd4823d9b94485ef608b34e8 .

Branch
------
REL9_4_STABLE

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

Modified Files
--------------
src/backend/executor/execMain.c            |   24 +++++++---
src/backend/executor/nodeLockRows.c        |    2 +-
src/include/executor/executor.h            |    2 +-
src/test/isolation/expected/nowait-2.out   |   43 ++++++++++++++++++
src/test/isolation/expected/nowait-3.out   |   17 ++++++++
src/test/isolation/expected/nowait-4.out   |   19 ++++++++
src/test/isolation/expected/nowait-4_1.out |   19 ++++++++
src/test/isolation/expected/nowait-5.out   |   37 ++++++++++++++++
src/test/isolation/expected/nowait.out     |   65 ++++++++++++++++++++++++++++
src/test/isolation/isolation_schedule      |    5 +++
src/test/isolation/specs/nowait-2.spec     |   37 ++++++++++++++++
src/test/isolation/specs/nowait-3.spec     |   33 ++++++++++++++
src/test/isolation/specs/nowait-4.spec     |   30 +++++++++++++
src/test/isolation/specs/nowait-5.spec     |   57 ++++++++++++++++++++++++
src/test/isolation/specs/nowait.spec       |   25 +++++++++++
15 files changed, 406 insertions(+), 9 deletions(-)


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

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Fix FOR UPDATE NOWAIT on updated tuple chains
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: pgsql: Add regression tests for SELECT FOR UPDATE/SHARE NOWAIT.