mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
Modify BufferGetPage() to prepare for "snapshot too old" feature
This patch is a no-op patch which is intended to reduce the chances of failures of omission once the functional part of the "snapshot too old" patch goes in. It adds parameters for snapshot, relation, and an enum to specify whether the snapshot age check needs to be done for the page at this point. This initial patch passes NULL for the first two new parameters and BGP_NO_SNAPSHOT_TEST for the third. The follow-on patch will change the places where the test needs to be made.
This commit is contained in:
@@ -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);
|
||||
|
||||
/*
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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));
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user