aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/nbtree
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/nbtree')
-rw-r--r--src/backend/access/nbtree/nbtinsert.c47
-rw-r--r--src/backend/access/nbtree/nbtpage.c78
-rw-r--r--src/backend/access/nbtree/nbtree.c2
-rw-r--r--src/backend/access/nbtree/nbtsearch.c44
-rw-r--r--src/backend/access/nbtree/nbtutils.c4
-rw-r--r--src/backend/access/nbtree/nbtxlog.c37
6 files changed, 113 insertions, 99 deletions
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 3e100aabec7..bf7a8175517 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -255,7 +255,7 @@ _bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
InitDirtySnapshot(SnapshotDirty);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
maxoff = PageGetMaxOffsetNumber(page);
@@ -472,7 +472,7 @@ _bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
{
nblkno = opaque->btpo_next;
nbuf = _bt_relandgetbuf(rel, nbuf, nblkno, BT_READ);
- page = BufferGetPage(nbuf);
+ page = BufferGetPage(nbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque))
break;
@@ -546,7 +546,7 @@ _bt_findinsertloc(Relation rel,
Relation heapRel)
{
Buffer buf = *bufptr;
- Page page = BufferGetPage(buf);
+ Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
Size itemsz;
BTPageOpaque lpageop;
bool movedright,
@@ -646,7 +646,7 @@ _bt_findinsertloc(Relation rel,
for (;;)
{
rbuf = _bt_relandgetbuf(rel, rbuf, rblkno, BT_WRITE);
- page = BufferGetPage(rbuf);
+ page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
lpageop = (BTPageOpaque) PageGetSpecialPointer(page);
/*
@@ -742,7 +742,7 @@ _bt_insertonpg(Relation rel,
OffsetNumber firstright = InvalidOffsetNumber;
Size itemsz;
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
lpageop = (BTPageOpaque) PageGetSpecialPointer(page);
/* child buffer must be given iff inserting on an internal page */
@@ -824,7 +824,7 @@ _bt_insertonpg(Relation rel,
Assert(!P_ISLEAF(lpageop));
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metad = BTPageGetMeta(metapg);
if (metad->btm_fastlevel >= lpageop->btpo.level)
@@ -854,7 +854,7 @@ _bt_insertonpg(Relation rel,
/* clear INCOMPLETE_SPLIT flag on child if inserting a downlink */
if (BufferIsValid(cbuf))
{
- Page cpage = BufferGetPage(cbuf);
+ Page cpage = BufferGetPage(cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
Assert(P_INCOMPLETE_SPLIT(cpageop));
@@ -922,7 +922,8 @@ _bt_insertonpg(Relation rel,
}
if (BufferIsValid(cbuf))
{
- PageSetLSN(BufferGetPage(cbuf), recptr);
+ PageSetLSN(BufferGetPage(cbuf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST), recptr);
}
PageSetLSN(page, recptr);
@@ -995,9 +996,9 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
* possibly-confusing junk behind, we are careful to rewrite rightpage as
* zeroes before throwing any error.
*/
- origpage = BufferGetPage(buf);
+ origpage = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
leftpage = PageGetTempPage(origpage);
- rightpage = BufferGetPage(rbuf);
+ rightpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
origpagenumber = BufferGetBlockNumber(buf);
rightpagenumber = BufferGetBlockNumber(rbuf);
@@ -1186,7 +1187,7 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
if (!P_RIGHTMOST(oopaque))
{
sbuf = _bt_getbuf(rel, oopaque->btpo_next, BT_WRITE);
- spage = BufferGetPage(sbuf);
+ spage = BufferGetPage(sbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
if (sopaque->btpo_prev != origpagenumber)
{
@@ -1256,7 +1257,8 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
*/
if (!isleaf)
{
- Page cpage = BufferGetPage(cbuf);
+ Page cpage = BufferGetPage(cbuf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
cpageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
@@ -1343,7 +1345,8 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
}
if (!isleaf)
{
- PageSetLSN(BufferGetPage(cbuf), recptr);
+ PageSetLSN(BufferGetPage(cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
+ recptr);
}
}
@@ -1666,7 +1669,7 @@ _bt_insert_parent(Relation rel,
{
BlockNumber bknum = BufferGetBlockNumber(buf);
BlockNumber rbknum = BufferGetBlockNumber(rbuf);
- Page page = BufferGetPage(buf);
+ Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
IndexTuple new_item;
BTStackData fakestack;
IndexTuple ritem;
@@ -1741,7 +1744,7 @@ _bt_insert_parent(Relation rel,
void
_bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
{
- Page lpage = BufferGetPage(lbuf);
+ Page lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
BTPageOpaque lpageop = (BTPageOpaque) PageGetSpecialPointer(lpage);
Buffer rbuf;
Page rpage;
@@ -1753,7 +1756,7 @@ _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
/* Lock right sibling, the one missing the downlink */
rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE);
- rpage = BufferGetPage(rbuf);
+ rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage);
/* Could this be a root split? */
@@ -1765,7 +1768,7 @@ _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
/* acquire lock on the metapage */
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metad = BTPageGetMeta(metapg);
was_root = (metad->btm_root == BufferGetBlockNumber(lbuf));
@@ -1813,7 +1816,7 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access)
BTPageOpaque opaque;
buf = _bt_getbuf(rel, blkno, access);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (access == BT_WRITE && P_INCOMPLETE_SPLIT(opaque))
@@ -1939,17 +1942,17 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
lbkno = BufferGetBlockNumber(lbuf);
rbkno = BufferGetBlockNumber(rbuf);
- lpage = BufferGetPage(lbuf);
+ lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
/* get a new root page */
rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE);
- rootpage = BufferGetPage(rootbuf);
+ rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
rootblknum = BufferGetBlockNumber(rootbuf);
/* acquire lock on the metapage */
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metad = BTPageGetMeta(metapg);
/*
@@ -2173,7 +2176,7 @@ _bt_vacuum_one_page(Relation rel, Buffer buffer, Relation heapRel)
OffsetNumber offnum,
minoff,
maxoff;
- Page page = BufferGetPage(buffer);
+ Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/*
diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c
index 67755d75acb..36b18047615 100644
--- a/src/backend/access/nbtree/nbtpage.c
+++ b/src/backend/access/nbtree/nbtpage.c
@@ -130,7 +130,7 @@ _bt_getroot(Relation rel, int access)
rootlevel = metad->btm_fastlevel;
rootbuf = _bt_getbuf(rel, rootblkno, BT_READ);
- rootpage = BufferGetPage(rootbuf);
+ rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
/*
@@ -156,7 +156,7 @@ _bt_getroot(Relation rel, int access)
}
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
metad = BTPageGetMeta(metapg);
@@ -213,7 +213,7 @@ _bt_getroot(Relation rel, int access)
*/
rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE);
rootblkno = BufferGetBlockNumber(rootbuf);
- rootpage = BufferGetPage(rootbuf);
+ rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
rootopaque->btpo_prev = rootopaque->btpo_next = P_NONE;
rootopaque->btpo_flags = (BTP_LEAF | BTP_ROOT);
@@ -295,7 +295,7 @@ _bt_getroot(Relation rel, int access)
for (;;)
{
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
- rootpage = BufferGetPage(rootbuf);
+ rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
if (!P_IGNORE(rootopaque))
@@ -360,7 +360,7 @@ _bt_gettrueroot(Relation rel)
rel->rd_amcache = NULL;
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
metad = BTPageGetMeta(metapg);
@@ -397,7 +397,7 @@ _bt_gettrueroot(Relation rel)
for (;;)
{
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
- rootpage = BufferGetPage(rootbuf);
+ rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
if (!P_IGNORE(rootopaque))
@@ -446,7 +446,7 @@ _bt_getrootheight(Relation rel)
BTPageOpaque metaopaque;
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
metad = BTPageGetMeta(metapg);
@@ -501,7 +501,7 @@ _bt_getrootheight(Relation rel)
void
_bt_checkpage(Relation rel, Buffer buf)
{
- Page page = BufferGetPage(buf);
+ Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
/*
* ReadBuffer verifies that every newly-read page passes
@@ -616,7 +616,7 @@ _bt_getbuf(Relation rel, BlockNumber blkno, int access)
buf = ReadBuffer(rel, blkno);
if (ConditionalLockBuffer(buf))
{
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
if (_bt_page_recyclable(page))
{
/*
@@ -674,7 +674,7 @@ _bt_getbuf(Relation rel, BlockNumber blkno, int access)
UnlockRelationForExtension(rel, ExclusiveLock);
/* Initialize the new page before returning it */
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
Assert(PageIsNew(page));
_bt_pageinit(page, BufferGetPageSize(buf));
}
@@ -789,7 +789,7 @@ _bt_delitems_vacuum(Relation rel, Buffer buf,
OffsetNumber *itemnos, int nitems,
BlockNumber lastBlockVacuumed)
{
- Page page = BufferGetPage(buf);
+ Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
BTPageOpaque opaque;
/* No ereport(ERROR) until changes are logged */
@@ -862,7 +862,7 @@ _bt_delitems_delete(Relation rel, Buffer buf,
OffsetNumber *itemnos, int nitems,
Relation heapRel)
{
- Page page = BufferGetPage(buf);
+ Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
BTPageOpaque opaque;
/* Shouldn't be called unless there's something to do */
@@ -931,7 +931,7 @@ _bt_is_page_halfdead(Relation rel, BlockNumber blk)
bool result;
buf = _bt_getbuf(rel, blk, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
result = P_ISHALFDEAD(opaque);
@@ -991,7 +991,7 @@ _bt_lock_branch_parent(Relation rel, BlockNumber child, BTStack stack,
parent = stack->bts_blkno;
poffset = stack->bts_offset;
- page = BufferGetPage(pbuf);
+ page = BufferGetPage(pbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
maxoff = PageGetMaxOffsetNumber(page);
@@ -1035,7 +1035,7 @@ _bt_lock_branch_parent(Relation rel, BlockNumber child, BTStack stack,
BTPageOpaque lopaque;
lbuf = _bt_getbuf(rel, leftsib, BT_READ);
- lpage = BufferGetPage(lbuf);
+ lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
/*
@@ -1126,7 +1126,7 @@ _bt_pagedel(Relation rel, Buffer buf)
for (;;)
{
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/*
@@ -1231,7 +1231,7 @@ _bt_pagedel(Relation rel, Buffer buf)
Page lpage;
lbuf = _bt_getbuf(rel, leftsib, BT_READ);
- lpage = BufferGetPage(lbuf);
+ lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
/*
@@ -1332,7 +1332,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
IndexTuple itup;
IndexTupleData trunctuple;
- page = BufferGetPage(leafbuf);
+ page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(!P_RIGHTMOST(opaque) && !P_ISROOT(opaque) && !P_ISDELETED(opaque) &&
@@ -1385,7 +1385,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
* contents. The test on the next-child downlink is known to sometimes
* fail in the field, though.
*/
- page = BufferGetPage(topparent);
+ page = BufferGetPage(topparent, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
#ifdef USE_ASSERT_CHECKING
@@ -1417,7 +1417,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
* to copy the right sibling's downlink over the target downlink, and then
* delete the following item.
*/
- page = BufferGetPage(topparent);
+ page = BufferGetPage(topparent, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
itemid = PageGetItemId(page, topoff);
@@ -1432,7 +1432,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
* highest internal page in the branch we're deleting. We use the tid of
* the high key to store it.
*/
- page = BufferGetPage(leafbuf);
+ page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
opaque->btpo_flags |= BTP_HALF_DEAD;
@@ -1469,7 +1469,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
XLogRegisterBuffer(0, leafbuf, REGBUF_WILL_INIT);
XLogRegisterBuffer(1, topparent, REGBUF_STANDARD);
- page = BufferGetPage(leafbuf);
+ page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
xlrec.leftblk = opaque->btpo_prev;
xlrec.rightblk = opaque->btpo_next;
@@ -1478,9 +1478,9 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_MARK_PAGE_HALFDEAD);
- page = BufferGetPage(topparent);
+ page = BufferGetPage(topparent, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr);
- page = BufferGetPage(leafbuf);
+ page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr);
}
@@ -1525,7 +1525,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
ItemPointer leafhikey;
BlockNumber nextchild;
- page = BufferGetPage(leafbuf);
+ page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(P_ISLEAF(opaque) && P_ISHALFDEAD(opaque));
@@ -1551,7 +1551,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
/* fetch the block number of the topmost parent's left sibling */
buf = _bt_getbuf(rel, target, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
leftsib = opaque->btpo_prev;
targetlevel = opaque->btpo.level;
@@ -1589,7 +1589,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
if (leftsib != P_NONE)
{
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
- page = BufferGetPage(lbuf);
+ page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
while (P_ISDELETED(opaque) || opaque->btpo_next != target)
{
@@ -1603,7 +1603,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
return false;
}
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
- page = BufferGetPage(lbuf);
+ page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
}
}
@@ -1616,7 +1616,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
* empty page.
*/
LockBuffer(buf, BT_WRITE);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/*
@@ -1660,7 +1660,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
*/
rightsib = opaque->btpo_next;
rbuf = _bt_getbuf(rel, rightsib, BT_WRITE);
- page = BufferGetPage(rbuf);
+ page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (opaque->btpo_prev != target)
elog(ERROR, "right sibling's left-link doesn't match: "
@@ -1684,13 +1684,13 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
*/
if (leftsib == P_NONE && rightsib_is_rightmost)
{
- page = BufferGetPage(rbuf);
+ page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_RIGHTMOST(opaque))
{
/* rightsib will be the only one left on the level */
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
metad = BTPageGetMeta(metapg);
/*
@@ -1721,12 +1721,12 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
*/
if (BufferIsValid(lbuf))
{
- page = BufferGetPage(lbuf);
+ page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(opaque->btpo_next == target);
opaque->btpo_next = rightsib;
}
- page = BufferGetPage(rbuf);
+ page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(opaque->btpo_prev == target);
opaque->btpo_prev = leftsib;
@@ -1754,7 +1754,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
* will continue to do so, holding back RecentGlobalXmin, for the duration
* of that scan.
*/
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
opaque->btpo_flags &= ~BTP_HALF_DEAD;
opaque->btpo_flags |= BTP_DELETED;
@@ -1826,18 +1826,18 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
{
PageSetLSN(metapg, recptr);
}
- page = BufferGetPage(rbuf);
+ page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr);
if (BufferIsValid(lbuf))
{
- page = BufferGetPage(lbuf);
+ page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr);
}
if (target != leafblkno)
{
- page = BufferGetPage(leafbuf);
+ page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr);
}
}
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c
index bf8ade375d1..5d4eefc7d70 100644
--- a/src/backend/access/nbtree/nbtree.c
+++ b/src/backend/access/nbtree/nbtree.c
@@ -910,7 +910,7 @@ restart:
buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL,
info->strategy);
LockBuffer(buf, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
if (!PageIsNew(page))
{
_bt_checkpage(rel, buf);
diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c
index 14dffe07db6..83f790f7917 100644
--- a/src/backend/access/nbtree/nbtsearch.c
+++ b/src/backend/access/nbtree/nbtsearch.c
@@ -30,7 +30,7 @@ static bool _bt_readpage(IndexScanDesc scan, ScanDirection dir,
static void _bt_saveitem(BTScanOpaque so, int itemIndex,
OffsetNumber offnum, IndexTuple itup);
static bool _bt_steppage(IndexScanDesc scan, ScanDirection dir);
-static Buffer _bt_walk_left(Relation rel, Buffer buf);
+static Buffer _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot);
static bool _bt_endpoint(IndexScanDesc scan, ScanDirection dir);
static void _bt_drop_lock_and_maybe_pin(IndexScanDesc scan, BTScanPos sp);
@@ -96,7 +96,9 @@ _bt_search(Relation rel, int keysz, ScanKey scankey, bool nextkey,
/* If index is empty and access = BT_READ, no root page is created. */
if (!BufferIsValid(*bufP))
+ {
return (BTStack) NULL;
+ }
/* Loop iterates once per level descended in the tree */
for (;;)
@@ -127,7 +129,7 @@ _bt_search(Relation rel, int keysz, ScanKey scankey, bool nextkey,
BT_READ);
/* if this is a leaf page, we're done */
- page = BufferGetPage(*bufP);
+ page = BufferGetPage(*bufP, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_ISLEAF(opaque))
break;
@@ -231,7 +233,7 @@ _bt_moveright(Relation rel,
for (;;)
{
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_RIGHTMOST(opaque))
@@ -319,7 +321,7 @@ _bt_binsrch(Relation rel,
int32 result,
cmpval;
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
low = P_FIRSTDATAKEY(opaque);
@@ -1141,7 +1143,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum)
*/
Assert(BufferIsValid(so->currPos.buf));
- page = BufferGetPage(so->currPos.buf);
+ page = BufferGetPage(so->currPos.buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
minoff = P_FIRSTDATAKEY(opaque);
maxoff = PageGetMaxOffsetNumber(page);
@@ -1335,7 +1337,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir)
/* step right one page */
so->currPos.buf = _bt_getbuf(rel, blkno, BT_READ);
/* check for deleted page */
- page = BufferGetPage(so->currPos.buf);
+ page = BufferGetPage(so->currPos.buf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque))
{
@@ -1394,7 +1397,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir)
}
/* Step to next physical page */
- so->currPos.buf = _bt_walk_left(rel, so->currPos.buf);
+ so->currPos.buf = _bt_walk_left(rel, so->currPos.buf,
+ scan->xs_snapshot);
/* if we're physically at end of index, return failure */
if (so->currPos.buf == InvalidBuffer)
@@ -1408,7 +1412,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir)
* it's not half-dead and contains matching tuples. Else loop back
* and do it all again.
*/
- page = BufferGetPage(so->currPos.buf);
+ page = BufferGetPage(so->currPos.buf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque))
{
@@ -1442,12 +1447,12 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir)
* again if it's important.
*/
static Buffer
-_bt_walk_left(Relation rel, Buffer buf)
+_bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
{
Page page;
BTPageOpaque opaque;
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
for (;;)
@@ -1471,7 +1476,7 @@ _bt_walk_left(Relation rel, Buffer buf)
/* check for interrupts while we're not holding any buffer lock */
CHECK_FOR_INTERRUPTS();
buf = _bt_getbuf(rel, blkno, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/*
@@ -1497,13 +1502,14 @@ _bt_walk_left(Relation rel, Buffer buf)
break;
blkno = opaque->btpo_next;
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
}
/* Return to the original page to see what's up */
buf = _bt_relandgetbuf(rel, buf, obknum, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_ISDELETED(opaque))
{
@@ -1520,7 +1526,8 @@ _bt_walk_left(Relation rel, Buffer buf)
RelationGetRelationName(rel));
blkno = opaque->btpo_next;
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_ISDELETED(opaque))
break;
@@ -1579,7 +1586,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost)
if (!BufferIsValid(buf))
return InvalidBuffer;
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
for (;;)
@@ -1598,7 +1605,8 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost)
elog(ERROR, "fell off the end of index \"%s\"",
RelationGetRelationName(rel));
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
}
@@ -1619,7 +1627,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost)
blkno = ItemPointerGetBlockNumber(&(itup->t_tid));
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
}
@@ -1665,7 +1673,7 @@ _bt_endpoint(IndexScanDesc scan, ScanDirection dir)
}
PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot);
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(P_ISLEAF(opaque));
diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c
index 83c553ca279..edd36f996e4 100644
--- a/src/backend/access/nbtree/nbtutils.c
+++ b/src/backend/access/nbtree/nbtutils.c
@@ -1756,7 +1756,7 @@ _bt_killitems(IndexScanDesc scan)
*/
LockBuffer(so->currPos.buf, BT_READ);
- page = BufferGetPage(so->currPos.buf);
+ page = BufferGetPage(so->currPos.buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
}
else
{
@@ -1769,7 +1769,7 @@ _bt_killitems(IndexScanDesc scan)
if (!BufferIsValid(buf))
return;
- page = BufferGetPage(buf);
+ page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
if (PageGetLSN(page) == so->currPos.lsn)
so->currPos.buf = buf;
else
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index f8691bbc44a..e49aad44a93 100644
--- a/src/backend/access/nbtree/nbtxlog.c
+++ b/src/backend/access/nbtree/nbtxlog.c
@@ -89,7 +89,7 @@ _bt_restore_meta(XLogReaderState *record, uint8 block_id)
Assert(len == sizeof(xl_btree_metadata));
Assert(BufferGetBlockNumber(metabuf) == BTREE_METAPAGE);
xlrec = (xl_btree_metadata *) ptr;
- metapg = BufferGetPage(metabuf);
+ metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
_bt_pageinit(metapg, BufferGetPageSize(metabuf));
@@ -130,7 +130,8 @@ _bt_clear_incomplete_split(XLogReaderState *record, uint8 block_id)
if (XLogReadBufferForRedo(record, block_id, &buf) == BLK_NEEDS_REDO)
{
- Page page = (Page) BufferGetPage(buf);
+ Page page = BufferGetPage(buf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
Assert((pageop->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0);
@@ -167,7 +168,7 @@ btree_xlog_insert(bool isleaf, bool ismeta, XLogReaderState *record)
Size datalen;
char *datapos = XLogRecGetBlockData(record, 0, &datalen);
- page = BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
if (PageAddItem(page, (Item) datapos, datalen, xlrec->offnum,
false, false) == InvalidOffsetNumber)
@@ -224,7 +225,7 @@ btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
/* Reconstruct right (new) sibling page from scratch */
rbuf = XLogInitBufferForRedo(record, 1);
datapos = XLogRecGetBlockData(record, 1, &datalen);
- rpage = (Page) BufferGetPage(rbuf);
+ rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
_bt_pageinit(rpage, BufferGetPageSize(rbuf));
ropaque = (BTPageOpaque) PageGetSpecialPointer(rpage);
@@ -266,7 +267,8 @@ btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
* but it helps debugging. See also _bt_restore_page(), which does
* the same for the right page.
*/
- Page lpage = (Page) BufferGetPage(lbuf);
+ Page lpage = BufferGetPage(lbuf, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
OffsetNumber off;
Item newitem = NULL;
@@ -368,7 +370,8 @@ btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO)
{
- Page page = (Page) BufferGetPage(buffer);
+ Page page = BufferGetPage(buffer, NULL, NULL,
+ BGP_NO_SNAPSHOT_TEST);
BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
pageop->btpo_prev = rightsib;
@@ -476,7 +479,7 @@ btree_xlog_vacuum(XLogReaderState *record)
ptr = XLogRecGetBlockData(record, 0, &len);
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
if (len > 0)
{
@@ -570,7 +573,7 @@ btree_xlog_delete_get_latestRemovedXid(XLogReaderState *record)
if (!BufferIsValid(ibuffer))
return InvalidTransactionId;
LockBuffer(ibuffer, BT_READ);
- ipage = (Page) BufferGetPage(ibuffer);
+ ipage = BufferGetPage(ibuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
/*
* Loop through the deleted index items to obtain the TransactionId from
@@ -597,7 +600,7 @@ btree_xlog_delete_get_latestRemovedXid(XLogReaderState *record)
return InvalidTransactionId;
}
LockBuffer(hbuffer, BUFFER_LOCK_SHARE);
- hpage = (Page) BufferGetPage(hbuffer);
+ hpage = BufferGetPage(hbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
/*
* Look up the heap tuple header that the index tuple points at by
@@ -693,7 +696,7 @@ btree_xlog_delete(XLogReaderState *record)
*/
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
if (XLogRecGetDataLen(record) > SizeOfBtreeDelete)
{
@@ -745,7 +748,7 @@ btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
OffsetNumber nextoffset;
BlockNumber rightsib;
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
poffset = xlrec->poffset;
@@ -769,7 +772,7 @@ btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
/* Rewrite the leaf page as a halfdead page */
buffer = XLogInitBufferForRedo(record, 0);
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
_bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
@@ -825,7 +828,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
/* Fix left-link of right sibling */
if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO)
{
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
pageop->btpo_prev = leftsib;
@@ -840,7 +843,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
{
if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO)
{
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
pageop->btpo_next = rightsib;
@@ -853,7 +856,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
/* Rewrite target page as empty deleted page */
buffer = XLogInitBufferForRedo(record, 0);
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
_bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
@@ -882,7 +885,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
IndexTupleData trunctuple;
buffer = XLogInitBufferForRedo(record, 3);
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
_bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
@@ -926,7 +929,7 @@ btree_xlog_newroot(XLogReaderState *record)
Size len;
buffer = XLogInitBufferForRedo(record, 0);
- page = (Page) BufferGetPage(buffer);
+ page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
_bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page);