pgsql: Fix race in SSI interaction with bitmap heap scan.

From: Thomas Munro <tmunro(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix race in SSI interaction with bitmap heap scan.
Date: 2023-07-03 21:58:12
Message-ID: E1qGRYi-001lrJ-Jj@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix race in SSI interaction with bitmap heap scan.

When performing a bitmap heap scan, we don't want to miss concurrent
writes that occurred after we observed the heap's rs_nblocks, but before
we took predicate locks on index pages. Therefore, we can't skip
fetching any heap tuples that are referenced by the index, because we
need to test them all with CheckForSerializableConflictOut(). The
old optimization that would ignore any references to blocks >=
rs_nblocks gets in the way of that requirement, because it means that
concurrent writes in that window are ignored.

Removing that optimization shouldn't affect correctness at any isolation
level, because any new tuples shouldn't be visible to an MVCC snapshot.
There also shouldn't be any error-causing references to heap blocks past
the end, because we should have held at least an AccessShareLock on the
table before the index scan. It can't get smaller while our transaction
is running. For now, though, we'll keep the optimization at lower
levels to avoid making unnecessary changes in a bug fix.

Back-patch to all supported releases. In release 11, the code is in a
different place but not fundamentally different. Fixes one aspect of
bug #17949.

Reported-by: Artem Anisimov <artem(dot)anisimov(dot)255(at)gmail(dot)com>
Reviewed-by: Dmitry Dolgov <9erthalion6(at)gmail(dot)com>
Reviewed-by: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
Discussion: https://postgr.es/m/17949-a0f17035294a55e2%40postgresql.org

Branch
------
master

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

Modified Files
--------------
src/backend/access/heap/heapam_handler.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2023-07-03 21:58:30 pgsql: Fix race in SSI interaction with empty btrees.
Previous Message Nathan Bossart 2023-07-03 20:20:00 pgsql: Don't truncate database and user names in startup packets.