Re: BUG #17116: Assert failed in SerialSetActiveSerXmin() on commit of parallelized serializable transaction

Thomas Munro <thomas.munro@gmail.com>

From: Thomas Munro <thomas.munro@gmail.com>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2021-07-28T05:02:31Z
Lists: pgsql-bugs

Attachments

On Wed, Jul 28, 2021 at 9:00 AM Alexander Lakhin <exclusion@gmail.com> wrote:
> Thanks! With the new fix applied, my multiple installcheck test survives
> 100+ iterations.

Thanks.

Here's an updated version.  No code change, but now with a change to
serializable-parallel-2.sql so that the second assertion you mentioned
fails on unpatched master.  The intention of that test was to exercise
the SXACT_FLAG_RO_SAFE optimisation in a parallel query, and it did
that, but in a sort of degenerate way: sequential scans acquire
predicate locks *before entering parallel mode*, so the optimisation
is triggered immediately.  This version triggers the optimisation in a
parallel worker, and then the final cleanup happens in the leader,
which is the interesting case.

> (Except for read-only-anomaly-3, that causes another
> assertion fail but I believe that it's not related to the initial issue
> and deserves another bug report.)

Huh.  I tried and failed to find that one with concurrent runs.  I'll
wait for your next report before I do anything, just in case there's a
connection.

Commits

  1. Fix race in SERIALIZABLE READ ONLY.

  2. Fix assert failures in parallel SERIALIZABLE READ ONLY.

  3. Fix SxactGlobalXmin tracking.

  4. There's a small window wherein a transaction is committed but not yet