mirror of
https://github.com/postgres/postgres.git
synced 2025-06-19 04:21:08 +03:00
Add predicate locking for GiST
Add page-level predicate locking, due to gist's code organization, patch seems close to trivial: add check before page changing, add predicate lock before page scanning. Although choosing right place to check is not simple: it should not be called during index build, it should support insertion of new downlink and so on. Author: Shubham Barai with editorization by me and Alexander Korotkov Reviewed by: Alexander Korotkov, Andrey Borodin, me Discussion: https://www.postgresql.org/message-id/flat/CALxAEPtdcANpw5ePU3LvnTP8HCENFw6wygupQAyNBgD-sG3h0g@mail.gmail.com
This commit is contained in:
@ -18,6 +18,8 @@
|
||||
#include "access/relscan.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "miscadmin.h"
|
||||
#include "storage/lmgr.h"
|
||||
#include "storage/predicate.h"
|
||||
#include "pgstat.h"
|
||||
#include "lib/pairingheap.h"
|
||||
#include "utils/builtins.h"
|
||||
@ -336,6 +338,7 @@ gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, double *myDistances,
|
||||
|
||||
buffer = ReadBuffer(scan->indexRelation, pageItem->blkno);
|
||||
LockBuffer(buffer, GIST_SHARE);
|
||||
PredicateLockPage(r, BufferGetBlockNumber(buffer), scan->xs_snapshot);
|
||||
gistcheckpage(scan->indexRelation, buffer);
|
||||
page = BufferGetPage(buffer);
|
||||
TestForOldSnapshot(scan->xs_snapshot, r, page);
|
||||
|
Reference in New Issue
Block a user