pgsql: Fix assert failures in parallel SERIALIZABLE READ ONLY.

From: Thomas Munro <tmunro(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix assert failures in parallel SERIALIZABLE READ ONLY.
Date: 2023-03-06 03:50:24
Message-ID: E1pZ1rk-0027wg-9p@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix assert failures in parallel SERIALIZABLE READ ONLY.

1. Make sure that we don't decrement SxactGlobalXminCount twice when
the SXACT_FLAG_RO_SAFE optimization is reached in a parallel query.
This could trigger a sanity check failure in assert builds. Non-assert
builds recompute the count in SetNewSxactGlobalXmin(), so the problem
was hidden, explaining the lack of field reports. Add a new isolation
test to exercise that case.

2. Remove an assertion that the DOOMED flag can't be set on a partially
released SERIALIZABLEXACT. Instead, ignore the flag (our transaction
was already determined to be read-only safe, and DOOMED is in fact set
during partial release, and there was already an assertion that it
wasn't set sooner). Improve an existing isolation test so that it
reaches that case (previously it wasn't quite testing what it was
supposed to be testing; see discussion).

Back-patch to 12. Bug #17116. Defects in commit 47a338cf.

Reported-by: Alexander Lakhin <exclusion(at)gmail(dot)com>
Discussion: https://postgr.es/m/17116-d6ca217acc180e30%40postgresql.org

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/a0f55fc86ab7adde027351f5c9596a3814ddea83

Modified Files
--------------
src/backend/storage/lmgr/predicate.c | 20 ++++-
.../isolation/expected/serializable-parallel-2.out | 57 ++++---------
.../isolation/expected/serializable-parallel-3.out | 97 ++++++++++++++++++++++
src/test/isolation/isolation_schedule | 1 +
.../isolation/specs/serializable-parallel-2.spec | 12 ++-
.../isolation/specs/serializable-parallel-3.spec | 47 +++++++++++
6 files changed, 184 insertions(+), 50 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2023-03-06 03:50:34 pgsql: Fix assert failures in parallel SERIALIZABLE READ ONLY.
Previous Message Thomas Munro 2023-03-06 03:50:12 pgsql: Fix assert failures in parallel SERIALIZABLE READ ONLY.