Revert no-op changes to BufferGetPage()

The reverted changes were intended to force a choice of whether any
newly-added BufferGetPage() calls needed to be accompanied by a
test of the snapshot age, to support the "snapshot too old"
feature.  Such an accompanying test is needed in about 7% of the
cases, where the page is being used as part of a scan rather than
positioning for other purposes (such as DML or vacuuming).  The
additional effort required for back-patching, and the doubt whether
the intended benefit would really be there, have indicated it is
best just to rely on developers to do the right thing based on
comments and existing usage, as we do with many other conventions.

This change should have little or no effect on generated executable
code.

Motivated by the back-patching pain of Tom Lane and Robert Haas
This commit is contained in:
Kevin Grittner 2016-04-20 08:31:19 -05:00
parent 4db0d2d2fe
commit a343e223a5
65 changed files with 550 additions and 736 deletions

View File

@ -204,8 +204,7 @@ blinsert(Relation index, Datum *values, bool *isnull,
*/ */
metaBuffer = ReadBuffer(index, BLOOM_METAPAGE_BLKNO); metaBuffer = ReadBuffer(index, BLOOM_METAPAGE_BLKNO);
LockBuffer(metaBuffer, BUFFER_LOCK_SHARE); LockBuffer(metaBuffer, BUFFER_LOCK_SHARE);
metaData = BloomPageGetMeta(BufferGetPage(metaBuffer, NULL, NULL, metaData = BloomPageGetMeta(BufferGetPage(metaBuffer));
BGP_NO_SNAPSHOT_TEST));
if (metaData->nEnd > metaData->nStart) if (metaData->nEnd > metaData->nStart)
{ {

View File

@ -138,8 +138,8 @@ blgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
blkno, RBM_NORMAL, bas); blkno, RBM_NORMAL, bas);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, scan->xs_snapshot, scan->indexRelation, page = BufferGetPage(buffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, scan->indexRelation, page);
if (!BloomPageIsDeleted(page)) if (!BloomPageIsDeleted(page))
{ {

View File

@ -139,12 +139,11 @@ initBloomState(BloomState *state, Relation index)
buffer = ReadBuffer(index, BLOOM_METAPAGE_BLKNO); buffer = ReadBuffer(index, BLOOM_METAPAGE_BLKNO);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (!BloomPageIsMeta(page)) if (!BloomPageIsMeta(page))
elog(ERROR, "Relation is not a bloom index"); elog(ERROR, "Relation is not a bloom index");
meta = BloomPageGetMeta(BufferGetPage(buffer, NULL, NULL, meta = BloomPageGetMeta(BufferGetPage(buffer));
BGP_NO_SNAPSHOT_TEST));
if (meta->magickNumber != BLOOM_MAGICK_NUMBER) if (meta->magickNumber != BLOOM_MAGICK_NUMBER)
elog(ERROR, "Relation is not a bloom index"); elog(ERROR, "Relation is not a bloom index");
@ -317,8 +316,7 @@ BloomNewBuffer(Relation index)
*/ */
if (ConditionalLockBuffer(buffer)) if (ConditionalLockBuffer(buffer))
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
if (PageIsNew(page)) if (PageIsNew(page))
return buffer; /* OK to use, if never initialized */ return buffer; /* OK to use, if never initialized */

View File

@ -194,7 +194,7 @@ blvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno, buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
RBM_NORMAL, info->strategy); RBM_NORMAL, info->strategy);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (BloomPageIsDeleted(page)) if (BloomPageIsDeleted(page))
{ {

View File

@ -90,7 +90,7 @@ typedef struct BTPageStat
static void static void
GetBTPageStatistics(BlockNumber blkno, Buffer buffer, BTPageStat *stat) GetBTPageStatistics(BlockNumber blkno, Buffer buffer, BTPageStat *stat)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
PageHeader phdr = (PageHeader) page; PageHeader phdr = (PageHeader) page;
OffsetNumber maxoff = PageGetMaxOffsetNumber(page); OffsetNumber maxoff = PageGetMaxOffsetNumber(page);
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page); BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
@ -317,9 +317,7 @@ bt_page_items(PG_FUNCTION_ARGS)
uargs = palloc(sizeof(struct user_args)); uargs = palloc(sizeof(struct user_args));
uargs->page = palloc(BLCKSZ); uargs->page = palloc(BLCKSZ);
memcpy(uargs->page, memcpy(uargs->page, BufferGetPage(buffer), BLCKSZ);
BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
BLCKSZ);
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
relation_close(rel, AccessShareLock); relation_close(rel, AccessShareLock);
@ -449,7 +447,7 @@ bt_metap(PG_FUNCTION_ARGS)
buffer = ReadBuffer(rel, 0); buffer = ReadBuffer(rel, 0);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
metad = BTPageGetMeta(page); metad = BTPageGetMeta(page);
/* Build a tuple descriptor for our result type */ /* Build a tuple descriptor for our result type */

View File

@ -147,9 +147,7 @@ get_raw_page_internal(text *relname, ForkNumber forknum, BlockNumber blkno)
buf = ReadBufferExtended(rel, forknum, blkno, RBM_NORMAL, NULL); buf = ReadBufferExtended(rel, forknum, blkno, RBM_NORMAL, NULL);
LockBuffer(buf, BUFFER_LOCK_SHARE); LockBuffer(buf, BUFFER_LOCK_SHARE);
memcpy(raw_page_data, memcpy(raw_page_data, BufferGetPage(buf), BLCKSZ);
BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
BLCKSZ);
LockBuffer(buf, BUFFER_LOCK_UNLOCK); LockBuffer(buf, BUFFER_LOCK_UNLOCK);
ReleaseBuffer(buf); ReleaseBuffer(buf);

View File

@ -107,7 +107,7 @@ pg_visibility(PG_FUNCTION_ARGS)
buffer = ReadBuffer(rel, blkno); buffer = ReadBuffer(rel, blkno);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
values[2] = BoolGetDatum(PageIsAllVisible(page)); values[2] = BoolGetDatum(PageIsAllVisible(page));
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
@ -333,7 +333,7 @@ collect_visibility_data(Oid relid, bool include_pd)
bstrategy); bstrategy);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (PageIsAllVisible(page)) if (PageIsAllVisible(page))
info->bits[blkno] |= (1 << 2); info->bits[blkno] |= (1 << 2);

View File

@ -100,7 +100,7 @@ statapprox_heap(Relation rel, output_type *stat)
LockBuffer(buf, BUFFER_LOCK_SHARE); LockBuffer(buf, BUFFER_LOCK_SHARE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* /*
* It's not safe to call PageGetHeapFreeSpace() on new pages, so we * It's not safe to call PageGetHeapFreeSpace() on new pages, so we

View File

@ -173,7 +173,7 @@ pgstatindex_impl(Relation rel, FunctionCallInfo fcinfo)
*/ */
{ {
Buffer buffer = ReadBufferExtended(rel, MAIN_FORKNUM, 0, RBM_NORMAL, bstrategy); Buffer buffer = ReadBufferExtended(rel, MAIN_FORKNUM, 0, RBM_NORMAL, bstrategy);
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
BTMetaPageData *metad = BTPageGetMeta(page); BTMetaPageData *metad = BTPageGetMeta(page);
indexStat.version = metad->btm_version; indexStat.version = metad->btm_version;
@ -211,7 +211,7 @@ pgstatindex_impl(Relation rel, FunctionCallInfo fcinfo)
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy); buffer = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/* Determine page type, and update totals */ /* Determine page type, and update totals */
@ -399,7 +399,7 @@ pgstatginindex(PG_FUNCTION_ARGS)
*/ */
buffer = ReadBuffer(rel, GIN_METAPAGE_BLKNO); buffer = ReadBuffer(rel, GIN_METAPAGE_BLKNO);
LockBuffer(buffer, GIN_SHARE); LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
metadata = GinPageGetMeta(page); metadata = GinPageGetMeta(page);
stats.version = metadata->ginVersion; stats.version = metadata->ginVersion;

View File

@ -320,8 +320,7 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo)
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, block, buffer = ReadBufferExtended(rel, MAIN_FORKNUM, block,
RBM_NORMAL, scan->rs_strategy); RBM_NORMAL, scan->rs_strategy);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
stat.free_space += PageGetHeapFreeSpace stat.free_space += PageGetHeapFreeSpace((Page) BufferGetPage(buffer));
(BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST));
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
block++; block++;
} }
@ -334,8 +333,7 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo)
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, block, buffer = ReadBufferExtended(rel, MAIN_FORKNUM, block,
RBM_NORMAL, scan->rs_strategy); RBM_NORMAL, scan->rs_strategy);
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
stat.free_space += PageGetHeapFreeSpace stat.free_space += PageGetHeapFreeSpace((Page) BufferGetPage(buffer));
(BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST));
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
block++; block++;
} }
@ -360,7 +358,7 @@ pgstat_btree_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno,
buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy); buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy);
LockBuffer(buf, BT_READ); LockBuffer(buf, BT_READ);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* Page is valid, see what to do with it */ /* Page is valid, see what to do with it */
if (PageIsNew(page)) if (PageIsNew(page))
@ -404,7 +402,7 @@ pgstat_hash_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno,
_hash_getlock(rel, blkno, HASH_SHARE); _hash_getlock(rel, blkno, HASH_SHARE);
buf = _hash_getbuf_with_strategy(rel, blkno, HASH_READ, 0, bstrategy); buf = _hash_getbuf_with_strategy(rel, blkno, HASH_READ, 0, bstrategy);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (PageGetSpecialSize(page) == MAXALIGN(sizeof(HashPageOpaqueData))) if (PageGetSpecialSize(page) == MAXALIGN(sizeof(HashPageOpaqueData)))
{ {
@ -449,7 +447,7 @@ pgstat_gist_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno,
buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy); buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, bstrategy);
LockBuffer(buf, GIST_SHARE); LockBuffer(buf, GIST_SHARE);
gistcheckpage(rel, buf); gistcheckpage(rel, buf);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (GistPageIsLeaf(page)) if (GistPageIsLeaf(page))
{ {

View File

@ -208,8 +208,7 @@ brininsert(Relation idxRel, Datum *values, bool *nulls,
} }
else else
{ {
Page page = BufferGetPage(buf, NULL, NULL, Page page = BufferGetPage(buf);
BGP_NO_SNAPSHOT_TEST);
ItemId lp = PageGetItemId(page, off); ItemId lp = PageGetItemId(page, off);
Size origsz; Size origsz;
BrinTuple *origtup; BrinTuple *origtup;
@ -620,8 +619,7 @@ brinbuild(Relation heap, Relation index, IndexInfo *indexInfo)
Assert(BufferGetBlockNumber(meta) == BRIN_METAPAGE_BLKNO); Assert(BufferGetBlockNumber(meta) == BRIN_METAPAGE_BLKNO);
LockBuffer(meta, BUFFER_LOCK_EXCLUSIVE); LockBuffer(meta, BUFFER_LOCK_EXCLUSIVE);
brin_metapage_init(BufferGetPage(meta, NULL, NULL, BGP_NO_SNAPSHOT_TEST), brin_metapage_init(BufferGetPage(meta), BrinGetPagesPerRange(index),
BrinGetPagesPerRange(index),
BRIN_CURRENT_VERSION); BRIN_CURRENT_VERSION);
MarkBufferDirty(meta); MarkBufferDirty(meta);
@ -640,7 +638,7 @@ brinbuild(Relation heap, Relation index, IndexInfo *indexInfo)
recptr = XLogInsert(RM_BRIN_ID, XLOG_BRIN_CREATE_INDEX); recptr = XLogInsert(RM_BRIN_ID, XLOG_BRIN_CREATE_INDEX);
page = BufferGetPage(meta, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(meta);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
@ -690,9 +688,7 @@ brinbuildempty(Relation index)
/* Initialize and xlog metabuffer. */ /* Initialize and xlog metabuffer. */
START_CRIT_SECTION(); START_CRIT_SECTION();
brin_metapage_init(BufferGetPage(metabuf, NULL, NULL, brin_metapage_init(BufferGetPage(metabuf), BrinGetPagesPerRange(index),
BGP_NO_SNAPSHOT_TEST),
BrinGetPagesPerRange(index),
BRIN_CURRENT_VERSION); BRIN_CURRENT_VERSION);
MarkBufferDirty(metabuf); MarkBufferDirty(metabuf);
log_newpage_buffer(metabuf, false); log_newpage_buffer(metabuf, false);
@ -947,8 +943,7 @@ terminate_brin_buildstate(BrinBuildState *state)
{ {
Page page; Page page;
page = BufferGetPage(state->bs_currentInsertBuf, NULL, NULL, page = BufferGetPage(state->bs_currentInsertBuf);
BGP_NO_SNAPSHOT_TEST);
RecordPageWithFreeSpace(state->bs_irel, RecordPageWithFreeSpace(state->bs_irel,
BufferGetBlockNumber(state->bs_currentInsertBuf), BufferGetBlockNumber(state->bs_currentInsertBuf),
PageGetFreeSpace(page)); PageGetFreeSpace(page));

View File

@ -110,7 +110,7 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange,
newbuf = InvalidBuffer; newbuf = InvalidBuffer;
extended = false; extended = false;
} }
oldpage = BufferGetPage(oldbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); oldpage = BufferGetPage(oldbuf);
oldlp = PageGetItemId(oldpage, oldoff); oldlp = PageGetItemId(oldpage, oldoff);
/* /*
@ -228,8 +228,7 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange,
* Not enough free space on the oldpage. Put the new tuple on the new * Not enough free space on the oldpage. Put the new tuple on the new
* page, and update the revmap. * page, and update the revmap.
*/ */
Page newpage = BufferGetPage(newbuf, NULL, NULL, Page newpage = BufferGetPage(newbuf);
BGP_NO_SNAPSHOT_TEST);
Buffer revmapbuf; Buffer revmapbuf;
ItemPointerData newtid; ItemPointerData newtid;
OffsetNumber newoff; OffsetNumber newoff;
@ -246,9 +245,7 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange,
* need to do that here. * need to do that here.
*/ */
if (extended) if (extended)
brin_page_init(BufferGetPage(newbuf, NULL, NULL, brin_page_init(BufferGetPage(newbuf), BRIN_PAGETYPE_REGULAR);
BGP_NO_SNAPSHOT_TEST),
BRIN_PAGETYPE_REGULAR);
PageIndexDeleteNoCompact(oldpage, &oldoff, 1); PageIndexDeleteNoCompact(oldpage, &oldoff, 1);
newoff = PageAddItem(newpage, (Item) newtup, newsz, newoff = PageAddItem(newpage, (Item) newtup, newsz,
@ -301,9 +298,7 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange,
PageSetLSN(oldpage, recptr); PageSetLSN(oldpage, recptr);
PageSetLSN(newpage, recptr); PageSetLSN(newpage, recptr);
PageSetLSN(BufferGetPage(revmapbuf, NULL, NULL, PageSetLSN(BufferGetPage(revmapbuf), recptr);
BGP_NO_SNAPSHOT_TEST),
recptr);
} }
END_CRIT_SECTION(); END_CRIT_SECTION();
@ -331,9 +326,7 @@ brin_can_do_samepage_update(Buffer buffer, Size origsz, Size newsz)
{ {
return return
((newsz <= origsz) || ((newsz <= origsz) ||
PageGetExactFreeSpace(BufferGetPage(buffer, NULL, NULL, PageGetExactFreeSpace(BufferGetPage(buffer)) >= (newsz - origsz));
BGP_NO_SNAPSHOT_TEST))
>= (newsz - origsz));
} }
/* /*
@ -388,9 +381,7 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange,
* it's still a regular page. * it's still a regular page.
*/ */
LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
if (br_page_get_freespace(BufferGetPage(*buffer, NULL, NULL, if (br_page_get_freespace(BufferGetPage(*buffer)) < itemsz)
BGP_NO_SNAPSHOT_TEST))
< itemsz)
{ {
UnlockReleaseBuffer(*buffer); UnlockReleaseBuffer(*buffer);
*buffer = InvalidBuffer; *buffer = InvalidBuffer;
@ -413,15 +404,13 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange,
/* Now obtain lock on revmap buffer */ /* Now obtain lock on revmap buffer */
revmapbuf = brinLockRevmapPageForUpdate(revmap, heapBlk); revmapbuf = brinLockRevmapPageForUpdate(revmap, heapBlk);
page = BufferGetPage(*buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(*buffer);
blk = BufferGetBlockNumber(*buffer); blk = BufferGetBlockNumber(*buffer);
/* Execute the actual insertion */ /* Execute the actual insertion */
START_CRIT_SECTION(); START_CRIT_SECTION();
if (extended) if (extended)
brin_page_init(BufferGetPage(*buffer, NULL, NULL, brin_page_init(BufferGetPage(*buffer), BRIN_PAGETYPE_REGULAR);
BGP_NO_SNAPSHOT_TEST),
BRIN_PAGETYPE_REGULAR);
off = PageAddItem(page, (Item) tup, itemsz, InvalidOffsetNumber, off = PageAddItem(page, (Item) tup, itemsz, InvalidOffsetNumber,
false, false); false, false);
if (off == InvalidOffsetNumber) if (off == InvalidOffsetNumber)
@ -458,8 +447,7 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange,
recptr = XLogInsert(RM_BRIN_ID, info); recptr = XLogInsert(RM_BRIN_ID, info);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
PageSetLSN(BufferGetPage(revmapbuf, NULL, NULL, PageSetLSN(BufferGetPage(revmapbuf), recptr);
BGP_NO_SNAPSHOT_TEST), recptr);
} }
END_CRIT_SECTION(); END_CRIT_SECTION();
@ -527,7 +515,7 @@ brin_start_evacuating_page(Relation idxRel, Buffer buf)
OffsetNumber maxoff; OffsetNumber maxoff;
Page page; Page page;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (PageIsNew(page)) if (PageIsNew(page))
return false; return false;
@ -563,7 +551,7 @@ brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange,
OffsetNumber maxoff; OffsetNumber maxoff;
Page page; Page page;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
Assert(BrinPageFlags(page) & BRIN_EVACUATE_PAGE); Assert(BrinPageFlags(page) & BRIN_EVACUATE_PAGE);
@ -610,7 +598,7 @@ brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange,
bool bool
brin_page_cleanup(Relation idxrel, Buffer buf) brin_page_cleanup(Relation idxrel, Buffer buf)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
Size freespace; Size freespace;
/* /*
@ -639,10 +627,8 @@ brin_page_cleanup(Relation idxrel, Buffer buf)
} }
/* Nothing to be done for non-regular index pages */ /* Nothing to be done for non-regular index pages */
if (BRIN_IS_META_PAGE(BufferGetPage(buf, NULL, NULL, if (BRIN_IS_META_PAGE(BufferGetPage(buf)) ||
BGP_NO_SNAPSHOT_TEST)) || BRIN_IS_REVMAP_PAGE(BufferGetPage(buf)))
BRIN_IS_REVMAP_PAGE(BufferGetPage(buf, NULL, NULL,
BGP_NO_SNAPSHOT_TEST)))
return false; return false;
/* Measure free space and record it */ /* Measure free space and record it */
@ -752,8 +738,7 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz,
if (BufferIsValid(oldbuf) && oldblk < newblk) if (BufferIsValid(oldbuf) && oldblk < newblk)
{ {
LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE);
if (!BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf, NULL, NULL, if (!BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf)))
BGP_NO_SNAPSHOT_TEST)))
{ {
LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK);
@ -785,7 +770,7 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz,
if (extensionLockHeld) if (extensionLockHeld)
UnlockRelationForExtension(irel, ExclusiveLock); UnlockRelationForExtension(irel, ExclusiveLock);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* /*
* We have a new buffer to insert into. Check that the new page has * We have a new buffer to insert into. Check that the new page has
@ -820,8 +805,7 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz,
if (BufferIsValid(oldbuf) && oldblk > newblk) if (BufferIsValid(oldbuf) && oldblk > newblk)
{ {
LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE);
Assert(BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf, NULL, NULL, Assert(BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf)));
BGP_NO_SNAPSHOT_TEST)));
} }
return buf; return buf;
@ -878,7 +862,7 @@ brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer)
BufferGetBlockNumber(buffer))); BufferGetBlockNumber(buffer)));
START_CRIT_SECTION(); START_CRIT_SECTION();
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
brin_page_init(page, BRIN_PAGETYPE_REGULAR); brin_page_init(page, BRIN_PAGETYPE_REGULAR);
MarkBufferDirty(buffer); MarkBufferDirty(buffer);
log_newpage_buffer(buffer, true); log_newpage_buffer(buffer, true);

View File

@ -78,7 +78,8 @@ brinRevmapInitialize(Relation idxrel, BlockNumber *pagesPerRange,
meta = ReadBuffer(idxrel, BRIN_METAPAGE_BLKNO); meta = ReadBuffer(idxrel, BRIN_METAPAGE_BLKNO);
LockBuffer(meta, BUFFER_LOCK_SHARE); LockBuffer(meta, BUFFER_LOCK_SHARE);
page = BufferGetPage(meta, snapshot, idxrel, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(meta);
TestForOldSnapshot(snapshot, idxrel, page);
metadata = (BrinMetaPageData *) PageGetContents(page); metadata = (BrinMetaPageData *) PageGetContents(page);
revmap = palloc(sizeof(BrinRevmap)); revmap = palloc(sizeof(BrinRevmap));
@ -162,7 +163,7 @@ brinSetHeapBlockItemptr(Buffer buf, BlockNumber pagesPerRange,
Page page; Page page;
/* The correct page should already be pinned and locked */ /* The correct page should already be pinned and locked */
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
contents = (RevmapContents *) PageGetContents(page); contents = (RevmapContents *) PageGetContents(page);
iptr = (ItemPointerData *) contents->rm_tids; iptr = (ItemPointerData *) contents->rm_tids;
iptr += HEAPBLK_TO_REVMAP_INDEX(pagesPerRange, heapBlk); iptr += HEAPBLK_TO_REVMAP_INDEX(pagesPerRange, heapBlk);
@ -230,8 +231,7 @@ brinGetTupleForHeapBlock(BrinRevmap *revmap, BlockNumber heapBlk,
LockBuffer(revmap->rm_currBuf, BUFFER_LOCK_SHARE); LockBuffer(revmap->rm_currBuf, BUFFER_LOCK_SHARE);
contents = (RevmapContents *) contents = (RevmapContents *)
PageGetContents(BufferGetPage(revmap->rm_currBuf, NULL, NULL, PageGetContents(BufferGetPage(revmap->rm_currBuf));
BGP_NO_SNAPSHOT_TEST));
iptr = contents->rm_tids; iptr = contents->rm_tids;
iptr += HEAPBLK_TO_REVMAP_INDEX(revmap->rm_pagesPerRange, heapBlk); iptr += HEAPBLK_TO_REVMAP_INDEX(revmap->rm_pagesPerRange, heapBlk);
@ -266,8 +266,8 @@ brinGetTupleForHeapBlock(BrinRevmap *revmap, BlockNumber heapBlk,
*buf = ReadBuffer(idxRel, blk); *buf = ReadBuffer(idxRel, blk);
} }
LockBuffer(*buf, mode); LockBuffer(*buf, mode);
page = BufferGetPage(*buf, snapshot, idxRel, page = BufferGetPage(*buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, idxRel, page);
/* If we land on a revmap page, start over */ /* If we land on a revmap page, start over */
if (BRIN_IS_REGULAR_PAGE(page)) if (BRIN_IS_REGULAR_PAGE(page))
@ -399,8 +399,7 @@ revmap_physical_extend(BrinRevmap *revmap)
* another backend can extend the index with regular BRIN pages. * another backend can extend the index with regular BRIN pages.
*/ */
LockBuffer(revmap->rm_metaBuf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(revmap->rm_metaBuf, BUFFER_LOCK_EXCLUSIVE);
metapage = BufferGetPage(revmap->rm_metaBuf, NULL, NULL, metapage = BufferGetPage(revmap->rm_metaBuf);
BGP_NO_SNAPSHOT_TEST);
metadata = (BrinMetaPageData *) PageGetContents(metapage); metadata = (BrinMetaPageData *) PageGetContents(metapage);
/* /*
@ -420,7 +419,7 @@ revmap_physical_extend(BrinRevmap *revmap)
{ {
buf = ReadBuffer(irel, mapBlk); buf = ReadBuffer(irel, mapBlk);
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
} }
else else
{ {
@ -443,7 +442,7 @@ revmap_physical_extend(BrinRevmap *revmap)
return; return;
} }
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (needLock) if (needLock)
UnlockRelationForExtension(irel, ExclusiveLock); UnlockRelationForExtension(irel, ExclusiveLock);

View File

@ -30,7 +30,7 @@ brin_xlog_createidx(XLogReaderState *record)
/* create the index' metapage */ /* create the index' metapage */
buf = XLogInitBufferForRedo(record, 0); buf = XLogInitBufferForRedo(record, 0);
Assert(BufferIsValid(buf)); Assert(BufferIsValid(buf));
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buf);
brin_metapage_init(page, xlrec->pagesPerRange, xlrec->version); brin_metapage_init(page, xlrec->pagesPerRange, xlrec->version);
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
MarkBufferDirty(buf); MarkBufferDirty(buf);
@ -58,7 +58,7 @@ brin_xlog_insert_update(XLogReaderState *record,
if (XLogRecGetInfo(record) & XLOG_BRIN_INIT_PAGE) if (XLogRecGetInfo(record) & XLOG_BRIN_INIT_PAGE)
{ {
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
brin_page_init(page, BRIN_PAGETYPE_REGULAR); brin_page_init(page, BRIN_PAGETYPE_REGULAR);
action = BLK_NEEDS_REDO; action = BLK_NEEDS_REDO;
} }
@ -81,7 +81,7 @@ brin_xlog_insert_update(XLogReaderState *record,
Assert(tuple->bt_blkno == xlrec->heapBlk); Assert(tuple->bt_blkno == xlrec->heapBlk);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
offnum = xlrec->offnum; offnum = xlrec->offnum;
if (PageGetMaxOffsetNumber(page) + 1 < offnum) if (PageGetMaxOffsetNumber(page) + 1 < offnum)
elog(PANIC, "brin_xlog_insert_update: invalid max offset number"); elog(PANIC, "brin_xlog_insert_update: invalid max offset number");
@ -103,7 +103,7 @@ brin_xlog_insert_update(XLogReaderState *record,
ItemPointerData tid; ItemPointerData tid;
ItemPointerSet(&tid, regpgno, xlrec->offnum); ItemPointerSet(&tid, regpgno, xlrec->offnum);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
brinSetHeapBlockItemptr(buffer, xlrec->pagesPerRange, xlrec->heapBlk, brinSetHeapBlockItemptr(buffer, xlrec->pagesPerRange, xlrec->heapBlk,
tid); tid);
@ -145,7 +145,7 @@ brin_xlog_update(XLogReaderState *record)
Page page; Page page;
OffsetNumber offnum; OffsetNumber offnum;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
offnum = xlrec->oldOffnum; offnum = xlrec->oldOffnum;
if (PageGetMaxOffsetNumber(page) + 1 < offnum) if (PageGetMaxOffsetNumber(page) + 1 < offnum)
@ -186,7 +186,7 @@ brin_xlog_samepage_update(XLogReaderState *record)
brintuple = (BrinTuple *) XLogRecGetBlockData(record, 0, &tuplen); brintuple = (BrinTuple *) XLogRecGetBlockData(record, 0, &tuplen);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
offnum = xlrec->offnum; offnum = xlrec->offnum;
if (PageGetMaxOffsetNumber(page) + 1 < offnum) if (PageGetMaxOffsetNumber(page) + 1 < offnum)
@ -232,7 +232,7 @@ brin_xlog_revmap_extend(XLogReaderState *record)
Page metapg; Page metapg;
BrinMetaPageData *metadata; BrinMetaPageData *metadata;
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metadata = (BrinMetaPageData *) PageGetContents(metapg); metadata = (BrinMetaPageData *) PageGetContents(metapg);
Assert(metadata->lastRevmapPage == xlrec->targetBlk - 1); Assert(metadata->lastRevmapPage == xlrec->targetBlk - 1);
@ -248,7 +248,7 @@ brin_xlog_revmap_extend(XLogReaderState *record)
*/ */
buf = XLogInitBufferForRedo(record, 1); buf = XLogInitBufferForRedo(record, 1);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buf);
brin_page_init(page, BRIN_PAGETYPE_REVMAP); brin_page_init(page, BRIN_PAGETYPE_REVMAP);
PageSetLSN(page, lsn); PageSetLSN(page, lsn);

View File

@ -36,7 +36,7 @@ ginTraverseLock(Buffer buffer, bool searchMode)
int access = GIN_SHARE; int access = GIN_SHARE;
LockBuffer(buffer, GIN_SHARE); LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (GinPageIsLeaf(page)) if (GinPageIsLeaf(page))
{ {
if (searchMode == FALSE) if (searchMode == FALSE)
@ -89,8 +89,8 @@ ginFindLeafPage(GinBtree btree, bool searchMode, Snapshot snapshot)
stack->off = InvalidOffsetNumber; stack->off = InvalidOffsetNumber;
page = BufferGetPage(stack->buffer, snapshot, btree->index, page = BufferGetPage(stack->buffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, btree->index, page);
access = ginTraverseLock(stack->buffer, searchMode); access = ginTraverseLock(stack->buffer, searchMode);
@ -116,8 +116,8 @@ ginFindLeafPage(GinBtree btree, bool searchMode, Snapshot snapshot)
stack->buffer = ginStepRight(stack->buffer, btree->index, access); stack->buffer = ginStepRight(stack->buffer, btree->index, access);
stack->blkno = rightlink; stack->blkno = rightlink;
page = BufferGetPage(stack->buffer, snapshot, btree->index, page = BufferGetPage(stack->buffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, btree->index, page);
if (!searchMode && GinPageIsIncompleteSplit(page)) if (!searchMode && GinPageIsIncompleteSplit(page))
ginFinishSplit(btree, stack, false, NULL); ginFinishSplit(btree, stack, false, NULL);
@ -163,7 +163,7 @@ Buffer
ginStepRight(Buffer buffer, Relation index, int lockmode) ginStepRight(Buffer buffer, Relation index, int lockmode)
{ {
Buffer nextbuffer; Buffer nextbuffer;
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
bool isLeaf = GinPageIsLeaf(page); bool isLeaf = GinPageIsLeaf(page);
bool isData = GinPageIsData(page); bool isData = GinPageIsData(page);
BlockNumber blkno = GinPageGetOpaque(page)->rightlink; BlockNumber blkno = GinPageGetOpaque(page)->rightlink;
@ -173,7 +173,7 @@ ginStepRight(Buffer buffer, Relation index, int lockmode)
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
/* Sanity check that the page we stepped to is of similar kind. */ /* Sanity check that the page we stepped to is of similar kind. */
page = BufferGetPage(nextbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(nextbuffer);
if (isLeaf != GinPageIsLeaf(page) || isData != GinPageIsData(page)) if (isLeaf != GinPageIsLeaf(page) || isData != GinPageIsData(page))
elog(ERROR, "right sibling of GIN page is of different type"); elog(ERROR, "right sibling of GIN page is of different type");
@ -245,7 +245,7 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack)
for (;;) for (;;)
{ {
LockBuffer(buffer, GIN_EXCLUSIVE); LockBuffer(buffer, GIN_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (GinPageIsLeaf(page)) if (GinPageIsLeaf(page))
elog(ERROR, "Lost path"); elog(ERROR, "Lost path");
@ -276,7 +276,7 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack)
break; break;
} }
buffer = ginStepRight(buffer, btree->index, GIN_EXCLUSIVE); buffer = ginStepRight(buffer, btree->index, GIN_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* finish any incomplete splits, as above */ /* finish any incomplete splits, as above */
if (GinPageIsIncompleteSplit(page)) if (GinPageIsIncompleteSplit(page))
@ -327,8 +327,7 @@ ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
void *insertdata, BlockNumber updateblkno, void *insertdata, BlockNumber updateblkno,
Buffer childbuf, GinStatsData *buildStats) Buffer childbuf, GinStatsData *buildStats)
{ {
Page page = BufferGetPage(stack->buffer, NULL, NULL, Page page = BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
GinPlaceToPageRC rc; GinPlaceToPageRC rc;
uint16 xlflags = 0; uint16 xlflags = 0;
Page childpage = NULL; Page childpage = NULL;
@ -347,7 +346,7 @@ ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
{ {
Assert(BufferIsValid(childbuf)); Assert(BufferIsValid(childbuf));
Assert(updateblkno != InvalidBlockNumber); Assert(updateblkno != InvalidBlockNumber);
childpage = BufferGetPage(childbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); childpage = BufferGetPage(childbuf);
} }
/* /*
@ -459,8 +458,7 @@ ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
data.flags = xlflags; data.flags = xlflags;
if (childbuf != InvalidBuffer) if (childbuf != InvalidBuffer)
{ {
Page childpage = BufferGetPage(childbuf, NULL, NULL, Page childpage = BufferGetPage(childbuf);
BGP_NO_SNAPSHOT_TEST);
GinPageGetOpaque(childpage)->flags &= ~GIN_INCOMPLETE_SPLIT; GinPageGetOpaque(childpage)->flags &= ~GIN_INCOMPLETE_SPLIT;
@ -542,21 +540,14 @@ ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
if (stack->parent == NULL) if (stack->parent == NULL)
{ {
MarkBufferDirty(lbuffer); MarkBufferDirty(lbuffer);
memcpy(BufferGetPage(stack->buffer, NULL, NULL, memcpy(BufferGetPage(stack->buffer), newrootpg, BLCKSZ);
BGP_NO_SNAPSHOT_TEST), memcpy(BufferGetPage(lbuffer), newlpage, BLCKSZ);
newrootpg, BLCKSZ); memcpy(BufferGetPage(rbuffer), newrpage, BLCKSZ);
memcpy(BufferGetPage(lbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
newlpage, BLCKSZ);
memcpy(BufferGetPage(rbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
newrpage, BLCKSZ);
} }
else else
{ {
memcpy(BufferGetPage(stack->buffer, NULL, NULL, memcpy(BufferGetPage(stack->buffer), newlpage, BLCKSZ);
BGP_NO_SNAPSHOT_TEST), memcpy(BufferGetPage(rbuffer), newrpage, BLCKSZ);
newlpage, BLCKSZ);
memcpy(BufferGetPage(rbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
newrpage, BLCKSZ);
} }
/* write WAL record */ /* write WAL record */
@ -588,16 +579,10 @@ ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
XLogRegisterData((char *) &data, sizeof(ginxlogSplit)); XLogRegisterData((char *) &data, sizeof(ginxlogSplit));
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT); recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT);
PageSetLSN(BufferGetPage(stack->buffer, NULL, NULL, PageSetLSN(BufferGetPage(stack->buffer), recptr);
BGP_NO_SNAPSHOT_TEST), PageSetLSN(BufferGetPage(rbuffer), recptr);
recptr);
PageSetLSN(BufferGetPage(rbuffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST),
recptr);
if (stack->parent == NULL) if (stack->parent == NULL)
PageSetLSN(BufferGetPage(lbuffer, NULL, NULL, PageSetLSN(BufferGetPage(lbuffer), recptr);
BGP_NO_SNAPSHOT_TEST),
recptr);
if (BufferIsValid(childbuf)) if (BufferIsValid(childbuf))
PageSetLSN(childpage, recptr); PageSetLSN(childpage, recptr);
} }
@ -679,12 +664,11 @@ ginFinishSplit(GinBtree btree, GinBtreeStack *stack, bool freestack,
* page that has no downlink in the parent, and splitting it further * page that has no downlink in the parent, and splitting it further
* would fail. * would fail.
*/ */
if (GinPageIsIncompleteSplit(BufferGetPage(parent->buffer, NULL, NULL, if (GinPageIsIncompleteSplit(BufferGetPage(parent->buffer)))
BGP_NO_SNAPSHOT_TEST)))
ginFinishSplit(btree, parent, false, buildStats); ginFinishSplit(btree, parent, false, buildStats);
/* move right if it's needed */ /* move right if it's needed */
page = BufferGetPage(parent->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(parent->buffer);
while ((parent->off = btree->findChildPtr(btree, page, stack->blkno, parent->off)) == InvalidOffsetNumber) while ((parent->off = btree->findChildPtr(btree, page, stack->blkno, parent->off)) == InvalidOffsetNumber)
{ {
if (GinPageRightMost(page)) if (GinPageRightMost(page))
@ -702,17 +686,15 @@ ginFinishSplit(GinBtree btree, GinBtreeStack *stack, bool freestack,
parent->buffer = ginStepRight(parent->buffer, btree->index, GIN_EXCLUSIVE); parent->buffer = ginStepRight(parent->buffer, btree->index, GIN_EXCLUSIVE);
parent->blkno = BufferGetBlockNumber(parent->buffer); parent->blkno = BufferGetBlockNumber(parent->buffer);
page = BufferGetPage(parent->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(parent->buffer);
if (GinPageIsIncompleteSplit(BufferGetPage(parent->buffer, NULL, NULL, if (GinPageIsIncompleteSplit(BufferGetPage(parent->buffer)))
BGP_NO_SNAPSHOT_TEST)))
ginFinishSplit(btree, parent, false, buildStats); ginFinishSplit(btree, parent, false, buildStats);
} }
/* insert the downlink */ /* insert the downlink */
insertdata = btree->prepareDownlink(btree, stack->buffer); insertdata = btree->prepareDownlink(btree, stack->buffer);
updateblkno = GinPageGetOpaque(BufferGetPage(stack->buffer, NULL, NULL, updateblkno = GinPageGetOpaque(BufferGetPage(stack->buffer))->rightlink;
BGP_NO_SNAPSHOT_TEST))->rightlink;
done = ginPlaceToPage(btree, parent, done = ginPlaceToPage(btree, parent,
insertdata, updateblkno, insertdata, updateblkno,
stack->buffer, buildStats); stack->buffer, buildStats);
@ -762,8 +744,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, void *insertdata,
bool done; bool done;
/* If the leaf page was incompletely split, finish the split first */ /* If the leaf page was incompletely split, finish the split first */
if (GinPageIsIncompleteSplit(BufferGetPage(stack->buffer, NULL, NULL, if (GinPageIsIncompleteSplit(BufferGetPage(stack->buffer)))
BGP_NO_SNAPSHOT_TEST)))
ginFinishSplit(btree, stack, false, buildStats); ginFinishSplit(btree, stack, false, buildStats);
done = ginPlaceToPage(btree, stack, done = ginPlaceToPage(btree, stack,

View File

@ -246,7 +246,7 @@ dataLocateItem(GinBtree btree, GinBtreeStack *stack)
maxoff; maxoff;
PostingItem *pitem = NULL; PostingItem *pitem = NULL;
int result; int result;
Page page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(stack->buffer);
Assert(!GinPageIsLeaf(page)); Assert(!GinPageIsLeaf(page));
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
@ -432,7 +432,7 @@ dataPlaceToPageLeaf(GinBtree btree, Buffer buf, GinBtreeStack *stack,
GinBtreeDataLeafInsertData *items = insertdata; GinBtreeDataLeafInsertData *items = insertdata;
ItemPointer newItems = &items->items[items->curitem]; ItemPointer newItems = &items->items[items->curitem];
int maxitems = items->nitem - items->curitem; int maxitems = items->nitem - items->curitem;
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
int i; int i;
ItemPointerData rbound; ItemPointerData rbound;
ItemPointerData lbound; ItemPointerData lbound;
@ -714,7 +714,7 @@ dataPlaceToPageLeaf(GinBtree btree, Buffer buf, GinBtreeStack *stack,
void void
ginVacuumPostingTreeLeaf(Relation indexrel, Buffer buffer, GinVacuumState *gvs) ginVacuumPostingTreeLeaf(Relation indexrel, Buffer buffer, GinVacuumState *gvs)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
disassembledLeaf *leaf; disassembledLeaf *leaf;
bool removedsomething = false; bool removedsomething = false;
dlist_iter iter; dlist_iter iter;
@ -953,7 +953,7 @@ registerLeafRecompressWALData(Buffer buf, disassembledLeaf *leaf)
static void static void
dataPlaceToPageLeafRecompress(Buffer buf, disassembledLeaf *leaf) dataPlaceToPageLeafRecompress(Buffer buf, disassembledLeaf *leaf)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
char *ptr; char *ptr;
int newsize; int newsize;
bool modified = false; bool modified = false;
@ -1091,7 +1091,7 @@ dataPlaceToPageInternal(GinBtree btree, Buffer buf, GinBtreeStack *stack,
void *insertdata, BlockNumber updateblkno, void *insertdata, BlockNumber updateblkno,
Page *newlpage, Page *newrpage) Page *newlpage, Page *newrpage)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
OffsetNumber off = stack->off; OffsetNumber off = stack->off;
PostingItem *pitem; PostingItem *pitem;
@ -1141,7 +1141,7 @@ dataPlaceToPage(GinBtree btree, Buffer buf, GinBtreeStack *stack,
void *insertdata, BlockNumber updateblkno, void *insertdata, BlockNumber updateblkno,
Page *newlpage, Page *newrpage) Page *newlpage, Page *newrpage)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
@ -1164,7 +1164,7 @@ dataSplitPageInternal(GinBtree btree, Buffer origbuf,
void *insertdata, BlockNumber updateblkno, void *insertdata, BlockNumber updateblkno,
Page *newlpage, Page *newrpage) Page *newlpage, Page *newrpage)
{ {
Page oldpage = BufferGetPage(origbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page oldpage = BufferGetPage(origbuf);
OffsetNumber off = stack->off; OffsetNumber off = stack->off;
int nitems = GinPageGetOpaque(oldpage)->maxoff; int nitems = GinPageGetOpaque(oldpage)->maxoff;
int nleftitems; int nleftitems;
@ -1242,7 +1242,7 @@ static void *
dataPrepareDownlink(GinBtree btree, Buffer lbuf) dataPrepareDownlink(GinBtree btree, Buffer lbuf)
{ {
PostingItem *pitem = palloc(sizeof(PostingItem)); PostingItem *pitem = palloc(sizeof(PostingItem));
Page lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page lpage = BufferGetPage(lbuf);
PostingItemSetBlockNumber(pitem, BufferGetBlockNumber(lbuf)); PostingItemSetBlockNumber(pitem, BufferGetBlockNumber(lbuf));
pitem->key = *GinDataPageGetRightBound(lpage); pitem->key = *GinDataPageGetRightBound(lpage);
@ -1726,7 +1726,7 @@ createPostingTree(Relation index, ItemPointerData *items, uint32 nitems,
* All set. Get a new physical page, and copy the in-memory page to it. * All set. Get a new physical page, and copy the in-memory page to it.
*/ */
buffer = GinNewBuffer(index); buffer = GinNewBuffer(index);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
blkno = BufferGetBlockNumber(buffer); blkno = BufferGetBlockNumber(buffer);
START_CRIT_SECTION(); START_CRIT_SECTION();

View File

@ -274,8 +274,7 @@ entryLocateEntry(GinBtree btree, GinBtreeStack *stack)
maxoff; maxoff;
IndexTuple itup = NULL; IndexTuple itup = NULL;
int result; int result;
Page page = BufferGetPage(stack->buffer, NULL, NULL, Page page = BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
Assert(!GinPageIsLeaf(page)); Assert(!GinPageIsLeaf(page));
Assert(!GinPageIsData(page)); Assert(!GinPageIsData(page));
@ -346,8 +345,7 @@ entryLocateEntry(GinBtree btree, GinBtreeStack *stack)
static bool static bool
entryLocateLeafEntry(GinBtree btree, GinBtreeStack *stack) entryLocateLeafEntry(GinBtree btree, GinBtreeStack *stack)
{ {
Page page = BufferGetPage(stack->buffer, NULL, NULL, Page page = BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
OffsetNumber low, OffsetNumber low,
high; high;
@ -463,7 +461,7 @@ entryIsEnoughSpace(GinBtree btree, Buffer buf, OffsetNumber off,
{ {
Size releasedsz = 0; Size releasedsz = 0;
Size addedsz; Size addedsz;
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
Assert(insertData->entry); Assert(insertData->entry);
Assert(!GinPageIsData(page)); Assert(!GinPageIsData(page));
@ -527,7 +525,7 @@ entryPlaceToPage(GinBtree btree, Buffer buf, GinBtreeStack *stack,
Page *newlpage, Page *newrpage) Page *newlpage, Page *newrpage)
{ {
GinBtreeEntryInsertData *insertData = insertPayload; GinBtreeEntryInsertData *insertData = insertPayload;
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
OffsetNumber off = stack->off; OffsetNumber off = stack->off;
OffsetNumber placed; OffsetNumber placed;
@ -594,10 +592,8 @@ entrySplitPage(GinBtree btree, Buffer origbuf,
char *ptr; char *ptr;
IndexTuple itup; IndexTuple itup;
Page page; Page page;
Page lpage = PageGetTempPageCopy(BufferGetPage(origbuf, NULL, NULL, Page lpage = PageGetTempPageCopy(BufferGetPage(origbuf));
BGP_NO_SNAPSHOT_TEST)); Page rpage = PageGetTempPageCopy(BufferGetPage(origbuf));
Page rpage = PageGetTempPageCopy(BufferGetPage(origbuf, NULL, NULL,
BGP_NO_SNAPSHOT_TEST));
Size pageSize = PageGetPageSize(lpage); Size pageSize = PageGetPageSize(lpage);
char tupstore[2 * BLCKSZ]; char tupstore[2 * BLCKSZ];
@ -678,7 +674,7 @@ static void *
entryPrepareDownlink(GinBtree btree, Buffer lbuf) entryPrepareDownlink(GinBtree btree, Buffer lbuf)
{ {
GinBtreeEntryInsertData *insertData; GinBtreeEntryInsertData *insertData;
Page lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page lpage = BufferGetPage(lbuf);
BlockNumber lblkno = BufferGetBlockNumber(lbuf); BlockNumber lblkno = BufferGetBlockNumber(lbuf);
IndexTuple itup; IndexTuple itup;

View File

@ -53,7 +53,7 @@ static int32
writeListPage(Relation index, Buffer buffer, writeListPage(Relation index, Buffer buffer,
IndexTuple *tuples, int32 ntuples, BlockNumber rightlink) IndexTuple *tuples, int32 ntuples, BlockNumber rightlink)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
int32 i, int32 i,
freesize, freesize,
size = 0; size = 0;
@ -239,7 +239,7 @@ ginHeapTupleFastInsert(GinState *ginstate, GinTupleCollector *collector)
data.newRightlink = data.prevTail = InvalidBlockNumber; data.newRightlink = data.prevTail = InvalidBlockNumber;
metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO); metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO);
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
if (collector->sumsize + collector->ntuples * sizeof(ItemIdData) > GinListPageSize) if (collector->sumsize + collector->ntuples * sizeof(ItemIdData) > GinListPageSize)
{ {
@ -310,7 +310,7 @@ ginHeapTupleFastInsert(GinState *ginstate, GinTupleCollector *collector)
buffer = ReadBuffer(index, metadata->tail); buffer = ReadBuffer(index, metadata->tail);
LockBuffer(buffer, GIN_EXCLUSIVE); LockBuffer(buffer, GIN_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
Assert(GinPageGetOpaque(page)->rightlink == InvalidBlockNumber); Assert(GinPageGetOpaque(page)->rightlink == InvalidBlockNumber);
@ -344,7 +344,7 @@ ginHeapTupleFastInsert(GinState *ginstate, GinTupleCollector *collector)
buffer = ReadBuffer(index, metadata->tail); buffer = ReadBuffer(index, metadata->tail);
LockBuffer(buffer, GIN_EXCLUSIVE); LockBuffer(buffer, GIN_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
off = (PageIsEmpty(page)) ? FirstOffsetNumber : off = (PageIsEmpty(page)) ? FirstOffsetNumber :
OffsetNumberNext(PageGetMaxOffsetNumber(page)); OffsetNumberNext(PageGetMaxOffsetNumber(page));
@ -514,7 +514,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
GinMetaPageData *metadata; GinMetaPageData *metadata;
BlockNumber blknoToDelete; BlockNumber blknoToDelete;
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
metadata = GinPageGetMeta(metapage); metadata = GinPageGetMeta(metapage);
blknoToDelete = metadata->head; blknoToDelete = metadata->head;
@ -533,7 +533,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
freespace[data.ndeleted] = blknoToDelete; freespace[data.ndeleted] = blknoToDelete;
buffers[data.ndeleted] = ReadBuffer(index, blknoToDelete); buffers[data.ndeleted] = ReadBuffer(index, blknoToDelete);
LockBuffer(buffers[data.ndeleted], GIN_EXCLUSIVE); LockBuffer(buffers[data.ndeleted], GIN_EXCLUSIVE);
page = BufferGetPage(buffers[data.ndeleted], NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffers[data.ndeleted]);
data.ndeleted++; data.ndeleted++;
@ -582,7 +582,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
for (i = 0; i < data.ndeleted; i++) for (i = 0; i < data.ndeleted; i++)
{ {
page = BufferGetPage(buffers[i], NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffers[i]);
GinPageGetOpaque(page)->flags = GIN_DELETED; GinPageGetOpaque(page)->flags = GIN_DELETED;
MarkBufferDirty(buffers[i]); MarkBufferDirty(buffers[i]);
} }
@ -606,7 +606,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
for (i = 0; i < data.ndeleted; i++) for (i = 0; i < data.ndeleted; i++)
{ {
page = BufferGetPage(buffers[i], NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffers[i]);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
} }
@ -760,7 +760,7 @@ ginInsertCleanup(GinState *ginstate,
metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO); metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO);
LockBuffer(metabuffer, GIN_SHARE); LockBuffer(metabuffer, GIN_SHARE);
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
metadata = GinPageGetMeta(metapage); metadata = GinPageGetMeta(metapage);
if (metadata->head == InvalidBlockNumber) if (metadata->head == InvalidBlockNumber)
@ -776,7 +776,7 @@ ginInsertCleanup(GinState *ginstate,
blkno = metadata->head; blkno = metadata->head;
buffer = ReadBuffer(index, blkno); buffer = ReadBuffer(index, blkno);
LockBuffer(buffer, GIN_SHARE); LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
LockBuffer(metabuffer, GIN_UNLOCK); LockBuffer(metabuffer, GIN_UNLOCK);
@ -943,7 +943,7 @@ ginInsertCleanup(GinState *ginstate,
vacuum_delay_point(); vacuum_delay_point();
buffer = ReadBuffer(index, blkno); buffer = ReadBuffer(index, blkno);
LockBuffer(buffer, GIN_SHARE); LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
} }
ReleaseBuffer(metabuffer); ReleaseBuffer(metabuffer);

View File

@ -19,7 +19,6 @@
#include "miscadmin.h" #include "miscadmin.h"
#include "utils/datum.h" #include "utils/datum.h"
#include "utils/memutils.h" #include "utils/memutils.h"
#include "utils/rel.h"
/* GUC parameter */ /* GUC parameter */
int GinFuzzySearchLimit = 0; int GinFuzzySearchLimit = 0;
@ -40,8 +39,7 @@ typedef struct pendingPosition
static bool static bool
moveRightIfItNeeded(GinBtreeData *btree, GinBtreeStack *stack) moveRightIfItNeeded(GinBtreeData *btree, GinBtreeStack *stack)
{ {
Page page = BufferGetPage(stack->buffer, NULL, NULL, Page page = BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
if (stack->off > PageGetMaxOffsetNumber(page)) if (stack->off > PageGetMaxOffsetNumber(page))
{ {
@ -84,7 +82,7 @@ scanPostingTree(Relation index, GinScanEntry scanEntry,
*/ */
for (;;) for (;;)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if ((GinPageGetOpaque(page)->flags & GIN_DELETED) == 0) if ((GinPageGetOpaque(page)->flags & GIN_DELETED) == 0)
{ {
int n = GinDataLeafPageGetItemsToTbm(page, scanEntry->matchBitmap); int n = GinDataLeafPageGetItemsToTbm(page, scanEntry->matchBitmap);
@ -146,8 +144,8 @@ collectMatchBitmap(GinBtreeData *btree, GinBtreeStack *stack,
if (moveRightIfItNeeded(btree, stack) == false) if (moveRightIfItNeeded(btree, stack) == false)
return true; return true;
page = BufferGetPage(stack->buffer, snapshot, btree->index, page = BufferGetPage(stack->buffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, btree->index, page);
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, stack->off)); itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, stack->off));
/* /*
@ -227,14 +225,15 @@ collectMatchBitmap(GinBtreeData *btree, GinBtreeStack *stack,
LockBuffer(stack->buffer, GIN_UNLOCK); LockBuffer(stack->buffer, GIN_UNLOCK);
/* Collect all the TIDs in this entry's posting tree */ /* Collect all the TIDs in this entry's posting tree */
scanPostingTree(btree->index, scanEntry, rootPostingTree, snapshot); scanPostingTree(btree->index, scanEntry, rootPostingTree,
snapshot);
/* /*
* We lock again the entry page and while it was unlocked insert * We lock again the entry page and while it was unlocked insert
* might have occurred, so we need to re-find our position. * might have occurred, so we need to re-find our position.
*/ */
LockBuffer(stack->buffer, GIN_SHARE); LockBuffer(stack->buffer, GIN_SHARE);
page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(stack->buffer);
if (!GinPageIsLeaf(page)) if (!GinPageIsLeaf(page))
{ {
/* /*
@ -254,7 +253,7 @@ collectMatchBitmap(GinBtreeData *btree, GinBtreeStack *stack,
if (moveRightIfItNeeded(btree, stack) == false) if (moveRightIfItNeeded(btree, stack) == false)
elog(ERROR, "lost saved point in index"); /* must not happen !!! */ elog(ERROR, "lost saved point in index"); /* must not happen !!! */
page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(stack->buffer);
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, stack->off)); itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, stack->off));
if (gintuple_get_attrnum(btree->ginstate, itup) != attnum) if (gintuple_get_attrnum(btree->ginstate, itup) != attnum)
@ -323,7 +322,8 @@ restartScanEntry:
entry->queryKey, entry->queryCategory, entry->queryKey, entry->queryCategory,
ginstate); ginstate);
stackEntry = ginFindLeafPage(&btreeEntry, true, snapshot); stackEntry = ginFindLeafPage(&btreeEntry, true, snapshot);
page = BufferGetPage(stackEntry->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(stackEntry->buffer);
/* ginFindLeafPage() will have already checked snapshot age. */
needUnlock = TRUE; needUnlock = TRUE;
entry->isFinished = TRUE; entry->isFinished = TRUE;
@ -339,7 +339,8 @@ restartScanEntry:
* for the entry type. * for the entry type.
*/ */
btreeEntry.findItem(&btreeEntry, stackEntry); btreeEntry.findItem(&btreeEntry, stackEntry);
if (!collectMatchBitmap(&btreeEntry, stackEntry, entry, snapshot)) if (collectMatchBitmap(&btreeEntry, stackEntry, entry, snapshot)
== false)
{ {
/* /*
* GIN tree was seriously restructured, so we will cleanup all * GIN tree was seriously restructured, so we will cleanup all
@ -397,7 +398,7 @@ restartScanEntry:
*/ */
IncrBufferRefCount(entry->buffer); IncrBufferRefCount(entry->buffer);
page = BufferGetPage(entry->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(entry->buffer);
/* /*
* Load the first page into memory. * Load the first page into memory.
@ -643,7 +644,7 @@ entryLoadMoreItems(GinState *ginstate, GinScanEntry entry,
GinItemPointerGetOffsetNumber(&advancePast), GinItemPointerGetOffsetNumber(&advancePast),
!stepright); !stepright);
page = BufferGetPage(entry->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(entry->buffer);
for (;;) for (;;)
{ {
entry->offset = InvalidOffsetNumber; entry->offset = InvalidOffsetNumber;
@ -675,7 +676,7 @@ entryLoadMoreItems(GinState *ginstate, GinScanEntry entry,
entry->buffer = ginStepRight(entry->buffer, entry->buffer = ginStepRight(entry->buffer,
ginstate->index, ginstate->index,
GIN_SHARE); GIN_SHARE);
page = BufferGetPage(entry->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(entry->buffer);
} }
stepright = true; stepright = true;
@ -1337,8 +1338,8 @@ scanGetCandidate(IndexScanDesc scan, pendingPosition *pos)
ItemPointerSetInvalid(&pos->item); ItemPointerSetInvalid(&pos->item);
for (;;) for (;;)
{ {
page = BufferGetPage(pos->pendingBuffer, scan->xs_snapshot, page = BufferGetPage(pos->pendingBuffer);
scan->indexRelation, BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, scan->indexRelation, page);
maxoff = PageGetMaxOffsetNumber(page); maxoff = PageGetMaxOffsetNumber(page);
if (pos->firstOffset > maxoff) if (pos->firstOffset > maxoff)
@ -1518,8 +1519,8 @@ collectMatchesForHeapRow(IndexScanDesc scan, pendingPosition *pos)
memset(datumExtracted + pos->firstOffset - 1, 0, memset(datumExtracted + pos->firstOffset - 1, 0,
sizeof(bool) * (pos->lastOffset - pos->firstOffset)); sizeof(bool) * (pos->lastOffset - pos->firstOffset));
page = BufferGetPage(pos->pendingBuffer, scan->xs_snapshot, page = BufferGetPage(pos->pendingBuffer);
scan->indexRelation, BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, scan->indexRelation, page);
for (i = 0; i < so->nkeys; i++) for (i = 0; i < so->nkeys; i++)
{ {
@ -1712,8 +1713,8 @@ scanPendingInsert(IndexScanDesc scan, TIDBitmap *tbm, int64 *ntids)
*ntids = 0; *ntids = 0;
LockBuffer(metabuffer, GIN_SHARE); LockBuffer(metabuffer, GIN_SHARE);
page = BufferGetPage(metabuffer, scan->xs_snapshot, scan->indexRelation, page = BufferGetPage(metabuffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, scan->indexRelation, page);
blkno = GinPageGetMeta(page)->head; blkno = GinPageGetMeta(page)->head;
/* /*

View File

@ -193,7 +193,7 @@ ginEntryInsert(GinState *ginstate,
ginPrepareEntryScan(&btree, attnum, key, category, ginstate); ginPrepareEntryScan(&btree, attnum, key, category, ginstate);
stack = ginFindLeafPage(&btree, false, NULL); stack = ginFindLeafPage(&btree, false, NULL);
page = BufferGetPage(stack->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(stack->buffer);
if (btree.findItem(&btree, stack)) if (btree.findItem(&btree, stack))
{ {
@ -352,10 +352,10 @@ ginbuild(Relation heap, Relation index, IndexInfo *indexInfo)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_INDEX); recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_INDEX);
page = BufferGetPage(RootBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(RootBuffer);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
page = BufferGetPage(MetaBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(MetaBuffer);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }

View File

@ -273,8 +273,7 @@ GinNewBuffer(Relation index)
*/ */
if (ConditionalLockBuffer(buffer)) if (ConditionalLockBuffer(buffer))
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
if (PageIsNew(page)) if (PageIsNew(page))
return buffer; /* OK to use, if never initialized */ return buffer; /* OK to use, if never initialized */
@ -319,15 +318,14 @@ GinInitPage(Page page, uint32 f, Size pageSize)
void void
GinInitBuffer(Buffer b, uint32 f) GinInitBuffer(Buffer b, uint32 f)
{ {
GinInitPage(BufferGetPage(b, NULL, NULL, BGP_NO_SNAPSHOT_TEST), GinInitPage(BufferGetPage(b), f, BufferGetPageSize(b));
f, BufferGetPageSize(b));
} }
void void
GinInitMetabuffer(Buffer b) GinInitMetabuffer(Buffer b)
{ {
GinMetaPageData *metadata; GinMetaPageData *metadata;
Page page = BufferGetPage(b, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(b);
GinInitPage(page, GIN_META, BufferGetPageSize(b)); GinInitPage(page, GIN_META, BufferGetPageSize(b));
@ -607,7 +605,7 @@ ginGetStats(Relation index, GinStatsData *stats)
metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO); metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO);
LockBuffer(metabuffer, GIN_SHARE); LockBuffer(metabuffer, GIN_SHARE);
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
metadata = GinPageGetMeta(metapage); metadata = GinPageGetMeta(metapage);
stats->nPendingPages = metadata->nPendingPages; stats->nPendingPages = metadata->nPendingPages;
@ -634,7 +632,7 @@ ginUpdateStats(Relation index, const GinStatsData *stats)
metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO); metabuffer = ReadBuffer(index, GIN_METAPAGE_BLKNO);
LockBuffer(metabuffer, GIN_EXCLUSIVE); LockBuffer(metabuffer, GIN_EXCLUSIVE);
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
metadata = GinPageGetMeta(metapage); metadata = GinPageGetMeta(metapage);
START_CRIT_SECTION(); START_CRIT_SECTION();

View File

@ -87,8 +87,7 @@ ginVacuumItemPointers(GinVacuumState *gvs, ItemPointerData *items,
static void static void
xlogVacuumPage(Relation index, Buffer buffer) xlogVacuumPage(Relation index, Buffer buffer)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
XLogRecPtr recptr; XLogRecPtr recptr;
/* This is only used for entry tree leaf pages. */ /* This is only used for entry tree leaf pages. */
@ -119,7 +118,7 @@ ginVacuumPostingTreeLeaves(GinVacuumState *gvs, BlockNumber blkno, bool isRoot,
buffer = ReadBufferExtended(gvs->index, MAIN_FORKNUM, blkno, buffer = ReadBufferExtended(gvs->index, MAIN_FORKNUM, blkno,
RBM_NORMAL, gvs->strategy); RBM_NORMAL, gvs->strategy);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* /*
* We should be sure that we don't concurrent with inserts, insert process * We should be sure that we don't concurrent with inserts, insert process
@ -213,14 +212,14 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
START_CRIT_SECTION(); START_CRIT_SECTION();
/* Unlink the page by changing left sibling's rightlink */ /* Unlink the page by changing left sibling's rightlink */
page = BufferGetPage(dBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(dBuffer);
rightlink = GinPageGetOpaque(page)->rightlink; rightlink = GinPageGetOpaque(page)->rightlink;
page = BufferGetPage(lBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(lBuffer);
GinPageGetOpaque(page)->rightlink = rightlink; GinPageGetOpaque(page)->rightlink = rightlink;
/* Delete downlink from parent */ /* Delete downlink from parent */
parentPage = BufferGetPage(pBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); parentPage = BufferGetPage(pBuffer);
#ifdef USE_ASSERT_CHECKING #ifdef USE_ASSERT_CHECKING
do do
{ {
@ -231,7 +230,7 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
#endif #endif
GinPageDeletePostingItem(parentPage, myoff); GinPageDeletePostingItem(parentPage, myoff);
page = BufferGetPage(dBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(dBuffer);
/* /*
* we shouldn't change rightlink field to save workability of running * we shouldn't change rightlink field to save workability of running
@ -269,8 +268,7 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_PAGE); recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_PAGE);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
PageSetLSN(parentPage, recptr); PageSetLSN(parentPage, recptr);
PageSetLSN(BufferGetPage(lBuffer, NULL, NULL, PageSetLSN(BufferGetPage(lBuffer), recptr);
BGP_NO_SNAPSHOT_TEST), recptr);
} }
if (!isParentRoot) if (!isParentRoot)
@ -326,7 +324,7 @@ ginScanToDelete(GinVacuumState *gvs, BlockNumber blkno, bool isRoot,
buffer = ReadBufferExtended(gvs->index, MAIN_FORKNUM, blkno, buffer = ReadBufferExtended(gvs->index, MAIN_FORKNUM, blkno,
RBM_NORMAL, gvs->strategy); RBM_NORMAL, gvs->strategy);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
@ -409,8 +407,7 @@ ginVacuumPostingTree(GinVacuumState *gvs, BlockNumber rootBlkno)
static Page static Page
ginVacuumEntryPage(GinVacuumState *gvs, Buffer buffer, BlockNumber *roots, uint32 *nroot) ginVacuumEntryPage(GinVacuumState *gvs, Buffer buffer, BlockNumber *roots, uint32 *nroot)
{ {
Page origpage = BufferGetPage(buffer, NULL, NULL, Page origpage = BufferGetPage(buffer),
BGP_NO_SNAPSHOT_TEST),
tmppage; tmppage;
OffsetNumber i, OffsetNumber i,
maxoff = PageGetMaxOffsetNumber(origpage); maxoff = PageGetMaxOffsetNumber(origpage);
@ -557,8 +554,7 @@ ginbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
/* find leaf page */ /* find leaf page */
for (;;) for (;;)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
IndexTuple itup; IndexTuple itup;
LockBuffer(buffer, GIN_SHARE); LockBuffer(buffer, GIN_SHARE);
@ -593,8 +589,7 @@ ginbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
for (;;) for (;;)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
Page resPage; Page resPage;
uint32 i; uint32 i;
@ -708,7 +703,7 @@ ginvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno, buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
RBM_NORMAL, info->strategy); RBM_NORMAL, info->strategy);
LockBuffer(buffer, GIN_SHARE); LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (PageIsNew(page) || GinPageIsDeleted(page)) if (PageIsNew(page) || GinPageIsDeleted(page))
{ {

View File

@ -28,7 +28,7 @@ ginRedoClearIncompleteSplit(XLogReaderState *record, uint8 block_id)
if (XLogReadBufferForRedo(record, block_id, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, block_id, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
GinPageGetOpaque(page)->flags &= ~GIN_INCOMPLETE_SPLIT; GinPageGetOpaque(page)->flags &= ~GIN_INCOMPLETE_SPLIT;
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
@ -48,7 +48,7 @@ ginRedoCreateIndex(XLogReaderState *record)
MetaBuffer = XLogInitBufferForRedo(record, 0); MetaBuffer = XLogInitBufferForRedo(record, 0);
Assert(BufferGetBlockNumber(MetaBuffer) == GIN_METAPAGE_BLKNO); Assert(BufferGetBlockNumber(MetaBuffer) == GIN_METAPAGE_BLKNO);
page = BufferGetPage(MetaBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(MetaBuffer);
GinInitMetabuffer(MetaBuffer); GinInitMetabuffer(MetaBuffer);
@ -57,7 +57,7 @@ ginRedoCreateIndex(XLogReaderState *record)
RootBuffer = XLogInitBufferForRedo(record, 1); RootBuffer = XLogInitBufferForRedo(record, 1);
Assert(BufferGetBlockNumber(RootBuffer) == GIN_ROOT_BLKNO); Assert(BufferGetBlockNumber(RootBuffer) == GIN_ROOT_BLKNO);
page = BufferGetPage(RootBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(RootBuffer);
GinInitBuffer(RootBuffer, GIN_LEAF); GinInitBuffer(RootBuffer, GIN_LEAF);
@ -78,7 +78,7 @@ ginRedoCreatePTree(XLogReaderState *record)
Page page; Page page;
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
GinInitBuffer(buffer, GIN_DATA | GIN_LEAF | GIN_COMPRESSED); GinInitBuffer(buffer, GIN_DATA | GIN_LEAF | GIN_COMPRESSED);
@ -98,7 +98,7 @@ ginRedoCreatePTree(XLogReaderState *record)
static void static void
ginRedoInsertEntry(Buffer buffer, bool isLeaf, BlockNumber rightblkno, void *rdata) ginRedoInsertEntry(Buffer buffer, bool isLeaf, BlockNumber rightblkno, void *rdata)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
ginxlogInsertEntry *data = (ginxlogInsertEntry *) rdata; ginxlogInsertEntry *data = (ginxlogInsertEntry *) rdata;
OffsetNumber offset = data->offset; OffsetNumber offset = data->offset;
IndexTuple itup; IndexTuple itup;
@ -293,7 +293,7 @@ ginRedoRecompress(Page page, ginxlogRecompressDataLeaf *data)
static void static void
ginRedoInsertData(Buffer buffer, bool isLeaf, BlockNumber rightblkno, void *rdata) ginRedoInsertData(Buffer buffer, bool isLeaf, BlockNumber rightblkno, void *rdata)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
if (isLeaf) if (isLeaf)
{ {
@ -350,7 +350,7 @@ ginRedoInsert(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
Size len; Size len;
char *payload = XLogRecGetBlockData(record, 0, &len); char *payload = XLogRecGetBlockData(record, 0, &len);
@ -431,7 +431,7 @@ ginRedoVacuumDataLeafPage(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
Size len; Size len;
ginxlogVacuumDataLeafPage *xlrec; ginxlogVacuumDataLeafPage *xlrec;
@ -460,7 +460,7 @@ ginRedoDeletePage(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &dbuffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &dbuffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(dbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(dbuffer);
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
GinPageGetOpaque(page)->flags = GIN_DELETED; GinPageGetOpaque(page)->flags = GIN_DELETED;
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
@ -469,7 +469,7 @@ ginRedoDeletePage(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 1, &pbuffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 1, &pbuffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(pbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(pbuffer);
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
Assert(!GinPageIsLeaf(page)); Assert(!GinPageIsLeaf(page));
GinPageDeletePostingItem(page, data->parentOffset); GinPageDeletePostingItem(page, data->parentOffset);
@ -479,7 +479,7 @@ ginRedoDeletePage(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 2, &lbuffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 2, &lbuffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(lbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(lbuffer);
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
GinPageGetOpaque(page)->rightlink = data->rightLink; GinPageGetOpaque(page)->rightlink = data->rightLink;
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
@ -510,7 +510,7 @@ ginRedoUpdateMetapage(XLogReaderState *record)
*/ */
metabuffer = XLogInitBufferForRedo(record, 0); metabuffer = XLogInitBufferForRedo(record, 0);
Assert(BufferGetBlockNumber(metabuffer) == GIN_METAPAGE_BLKNO); Assert(BufferGetBlockNumber(metabuffer) == GIN_METAPAGE_BLKNO);
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
GinInitPage(metapage, GIN_META, BufferGetPageSize(metabuffer)); GinInitPage(metapage, GIN_META, BufferGetPageSize(metabuffer));
memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData)); memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
@ -524,7 +524,7 @@ ginRedoUpdateMetapage(XLogReaderState *record)
*/ */
if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
OffsetNumber off; OffsetNumber off;
int i; int i;
Size tupsize; Size tupsize;
@ -572,7 +572,7 @@ ginRedoUpdateMetapage(XLogReaderState *record)
*/ */
if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
GinPageGetOpaque(page)->rightlink = data->newRightlink; GinPageGetOpaque(page)->rightlink = data->newRightlink;
@ -603,7 +603,7 @@ ginRedoInsertListPage(XLogReaderState *record)
/* We always re-initialize the page. */ /* We always re-initialize the page. */
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
GinInitBuffer(buffer, GIN_LIST); GinInitBuffer(buffer, GIN_LIST);
GinPageGetOpaque(page)->rightlink = data->rightlink; GinPageGetOpaque(page)->rightlink = data->rightlink;
@ -652,7 +652,7 @@ ginRedoDeleteListPages(XLogReaderState *record)
metabuffer = XLogInitBufferForRedo(record, 0); metabuffer = XLogInitBufferForRedo(record, 0);
Assert(BufferGetBlockNumber(metabuffer) == GIN_METAPAGE_BLKNO); Assert(BufferGetBlockNumber(metabuffer) == GIN_METAPAGE_BLKNO);
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapage = BufferGetPage(metabuffer);
GinInitPage(metapage, GIN_META, BufferGetPageSize(metabuffer)); GinInitPage(metapage, GIN_META, BufferGetPageSize(metabuffer));
@ -681,7 +681,7 @@ ginRedoDeleteListPages(XLogReaderState *record)
Page page; Page page;
buffer = XLogInitBufferForRedo(record, i + 1); buffer = XLogInitBufferForRedo(record, i + 1);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
GinInitBuffer(buffer, GIN_DELETED); GinInitBuffer(buffer, GIN_DELETED);
PageSetLSN(page, lsn); PageSetLSN(page, lsn);

View File

@ -211,8 +211,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
bool markfollowright) bool markfollowright)
{ {
BlockNumber blkno = BufferGetBlockNumber(buffer); BlockNumber blkno = BufferGetBlockNumber(buffer);
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
bool is_leaf = (GistPageIsLeaf(page)) ? true : false; bool is_leaf = (GistPageIsLeaf(page)) ? true : false;
XLogRecPtr recptr; XLogRecPtr recptr;
int i; int i;
@ -317,9 +316,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
dist->buffer = buffer; dist->buffer = buffer;
dist->block.blkno = BufferGetBlockNumber(buffer); dist->block.blkno = BufferGetBlockNumber(buffer);
dist->page = dist->page = PageGetTempPageCopySpecial(BufferGetPage(buffer));
PageGetTempPageCopySpecial(BufferGetPage(buffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST));
/* clean all flags except F_LEAF */ /* clean all flags except F_LEAF */
GistPageGetOpaque(dist->page)->flags = (is_leaf) ? F_LEAF : 0; GistPageGetOpaque(dist->page)->flags = (is_leaf) ? F_LEAF : 0;
@ -331,7 +328,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
/* Allocate new page */ /* Allocate new page */
ptr->buffer = gistNewBuffer(rel); ptr->buffer = gistNewBuffer(rel);
GISTInitBuffer(ptr->buffer, (is_leaf) ? F_LEAF : 0); GISTInitBuffer(ptr->buffer, (is_leaf) ? F_LEAF : 0);
ptr->page = BufferGetPage(ptr->buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); ptr->page = BufferGetPage(ptr->buffer);
ptr->block.blkno = BufferGetBlockNumber(ptr->buffer); ptr->block.blkno = BufferGetBlockNumber(ptr->buffer);
} }
@ -357,10 +354,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
int i; int i;
rootpg.buffer = buffer; rootpg.buffer = buffer;
rootpg.page = rootpg.page = PageGetTempPageCopySpecial(BufferGetPage(rootpg.buffer));
PageGetTempPageCopySpecial(BufferGetPage(rootpg.buffer,
NULL, NULL,
BGP_NO_SNAPSHOT_TEST));
GistPageGetOpaque(rootpg.page)->flags = 0; GistPageGetOpaque(rootpg.page)->flags = 0;
/* Prepare a vector of all the downlinks */ /* Prepare a vector of all the downlinks */
@ -468,11 +462,8 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
* The first page in the chain was a temporary working copy meant to * The first page in the chain was a temporary working copy meant to
* replace the old page. Copy it over the old page. * replace the old page. Copy it over the old page.
*/ */
PageRestoreTempPage(dist->page, BufferGetPage(dist->buffer, PageRestoreTempPage(dist->page, BufferGetPage(dist->buffer));
NULL, NULL, dist->page = BufferGetPage(dist->buffer);
BGP_NO_SNAPSHOT_TEST));
dist->page = BufferGetPage(dist->buffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST);
/* Write the WAL record */ /* Write the WAL record */
if (RelationNeedsWAL(rel)) if (RelationNeedsWAL(rel))
@ -563,8 +554,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
*/ */
if (BufferIsValid(leftchildbuf)) if (BufferIsValid(leftchildbuf))
{ {
Page leftpg = BufferGetPage(leftchildbuf, NULL, NULL, Page leftpg = BufferGetPage(leftchildbuf);
BGP_NO_SNAPSHOT_TEST);
GistPageSetNSN(leftpg, recptr); GistPageSetNSN(leftpg, recptr);
GistClearFollowRight(leftpg); GistClearFollowRight(leftpg);
@ -624,8 +614,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate)
gistcheckpage(state.r, stack->buffer); gistcheckpage(state.r, stack->buffer);
} }
stack->page = BufferGetPage(stack->buffer, NULL, NULL, stack->page = (Page) BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
stack->lsn = PageGetLSN(stack->page); stack->lsn = PageGetLSN(stack->page);
Assert(!RelationNeedsWAL(state.r) || !XLogRecPtrIsInvalid(stack->lsn)); Assert(!RelationNeedsWAL(state.r) || !XLogRecPtrIsInvalid(stack->lsn));
@ -710,8 +699,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate)
LockBuffer(stack->buffer, GIST_UNLOCK); LockBuffer(stack->buffer, GIST_UNLOCK);
LockBuffer(stack->buffer, GIST_EXCLUSIVE); LockBuffer(stack->buffer, GIST_EXCLUSIVE);
xlocked = true; xlocked = true;
stack->page = BufferGetPage(stack->buffer, NULL, NULL, stack->page = (Page) BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
if (PageGetLSN(stack->page) != stack->lsn) if (PageGetLSN(stack->page) != stack->lsn)
{ {
@ -775,8 +763,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate)
LockBuffer(stack->buffer, GIST_UNLOCK); LockBuffer(stack->buffer, GIST_UNLOCK);
LockBuffer(stack->buffer, GIST_EXCLUSIVE); LockBuffer(stack->buffer, GIST_EXCLUSIVE);
xlocked = true; xlocked = true;
stack->page = BufferGetPage(stack->buffer, NULL, NULL, stack->page = (Page) BufferGetPage(stack->buffer);
BGP_NO_SNAPSHOT_TEST);
stack->lsn = PageGetLSN(stack->page); stack->lsn = PageGetLSN(stack->page);
if (stack->blkno == GIST_ROOT_BLKNO) if (stack->blkno == GIST_ROOT_BLKNO)
@ -866,7 +853,7 @@ gistFindPath(Relation r, BlockNumber child, OffsetNumber *downlinkoffnum)
buffer = ReadBuffer(r, top->blkno); buffer = ReadBuffer(r, top->blkno);
LockBuffer(buffer, GIST_SHARE); LockBuffer(buffer, GIST_SHARE);
gistcheckpage(r, buffer); gistcheckpage(r, buffer);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (GistPageIsLeaf(page)) if (GistPageIsLeaf(page))
{ {
@ -954,8 +941,7 @@ gistFindCorrectParent(Relation r, GISTInsertStack *child)
GISTInsertStack *parent = child->parent; GISTInsertStack *parent = child->parent;
gistcheckpage(r, parent->buffer); gistcheckpage(r, parent->buffer);
parent->page = BufferGetPage(parent->buffer, NULL, NULL, parent->page = (Page) BufferGetPage(parent->buffer);
BGP_NO_SNAPSHOT_TEST);
/* here we don't need to distinguish between split and page update */ /* here we don't need to distinguish between split and page update */
if (child->downlinkoffnum == InvalidOffsetNumber || if (child->downlinkoffnum == InvalidOffsetNumber ||
@ -996,8 +982,7 @@ gistFindCorrectParent(Relation r, GISTInsertStack *child)
parent->buffer = ReadBuffer(r, parent->blkno); parent->buffer = ReadBuffer(r, parent->blkno);
LockBuffer(parent->buffer, GIST_EXCLUSIVE); LockBuffer(parent->buffer, GIST_EXCLUSIVE);
gistcheckpage(r, parent->buffer); gistcheckpage(r, parent->buffer);
parent->page = BufferGetPage(parent->buffer, NULL, NULL, parent->page = (Page) BufferGetPage(parent->buffer);
BGP_NO_SNAPSHOT_TEST);
} }
/* /*
@ -1021,8 +1006,7 @@ gistFindCorrectParent(Relation r, GISTInsertStack *child)
while (ptr) while (ptr)
{ {
ptr->buffer = ReadBuffer(r, ptr->blkno); ptr->buffer = ReadBuffer(r, ptr->blkno);
ptr->page = BufferGetPage(ptr->buffer, NULL, NULL, ptr->page = (Page) BufferGetPage(ptr->buffer);
BGP_NO_SNAPSHOT_TEST);
ptr = ptr->parent; ptr = ptr->parent;
} }
@ -1044,7 +1028,7 @@ static IndexTuple
gistformdownlink(Relation rel, Buffer buf, GISTSTATE *giststate, gistformdownlink(Relation rel, Buffer buf, GISTSTATE *giststate,
GISTInsertStack *stack) GISTInsertStack *stack)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
OffsetNumber maxoff; OffsetNumber maxoff;
OffsetNumber offset; OffsetNumber offset;
IndexTuple downlink = NULL; IndexTuple downlink = NULL;
@ -1125,7 +1109,7 @@ gistfixsplit(GISTInsertState *state, GISTSTATE *giststate)
GISTPageSplitInfo *si = palloc(sizeof(GISTPageSplitInfo)); GISTPageSplitInfo *si = palloc(sizeof(GISTPageSplitInfo));
IndexTuple downlink; IndexTuple downlink;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* Form the new downlink tuples to insert to parent */ /* Form the new downlink tuples to insert to parent */
downlink = gistformdownlink(state->r, buf, giststate, stack); downlink = gistformdownlink(state->r, buf, giststate, stack);

View File

@ -169,7 +169,7 @@ gistbuild(Relation heap, Relation index, IndexInfo *indexInfo)
/* initialize the root page */ /* initialize the root page */
buffer = gistNewBuffer(index); buffer = gistNewBuffer(index);
Assert(BufferGetBlockNumber(buffer) == GIST_ROOT_BLKNO); Assert(BufferGetBlockNumber(buffer) == GIST_ROOT_BLKNO);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
START_CRIT_SECTION(); START_CRIT_SECTION();
@ -589,7 +589,7 @@ gistProcessItup(GISTBuildState *buildstate, IndexTuple itup,
buffer = ReadBuffer(indexrel, blkno); buffer = ReadBuffer(indexrel, blkno);
LockBuffer(buffer, GIST_EXCLUSIVE); LockBuffer(buffer, GIST_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
childoffnum = gistchoose(indexrel, page, itup, giststate); childoffnum = gistchoose(indexrel, page, itup, giststate);
iid = PageGetItemId(page, childoffnum); iid = PageGetItemId(page, childoffnum);
idxtuple = (IndexTuple) PageGetItem(page, iid); idxtuple = (IndexTuple) PageGetItem(page, iid);
@ -699,8 +699,7 @@ gistbufferinginserttuples(GISTBuildState *buildstate, Buffer buffer, int level,
*/ */
if (is_split && BufferGetBlockNumber(buffer) == GIST_ROOT_BLKNO) if (is_split && BufferGetBlockNumber(buffer) == GIST_ROOT_BLKNO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
OffsetNumber off; OffsetNumber off;
OffsetNumber maxoff; OffsetNumber maxoff;
@ -867,7 +866,7 @@ gistBufferingFindCorrectParent(GISTBuildState *buildstate,
} }
buffer = ReadBuffer(buildstate->indexrel, parent); buffer = ReadBuffer(buildstate->indexrel, parent);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
LockBuffer(buffer, GIST_EXCLUSIVE); LockBuffer(buffer, GIST_EXCLUSIVE);
gistcheckpage(buildstate->indexrel, buffer); gistcheckpage(buildstate->indexrel, buffer);
maxoff = PageGetMaxOffsetNumber(page); maxoff = PageGetMaxOffsetNumber(page);
@ -1068,7 +1067,7 @@ gistGetMaxLevel(Relation index)
* pro forma. * pro forma.
*/ */
LockBuffer(buffer, GIST_SHARE); LockBuffer(buffer, GIST_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (GistPageIsLeaf(page)) if (GistPageIsLeaf(page))
{ {
@ -1168,8 +1167,7 @@ gistMemorizeAllDownlinks(GISTBuildState *buildstate, Buffer parentbuf)
OffsetNumber maxoff; OffsetNumber maxoff;
OffsetNumber off; OffsetNumber off;
BlockNumber parentblkno = BufferGetBlockNumber(parentbuf); BlockNumber parentblkno = BufferGetBlockNumber(parentbuf);
Page page = BufferGetPage(parentbuf, NULL, NULL, Page page = BufferGetPage(parentbuf);
BGP_NO_SNAPSHOT_TEST);
Assert(!GistPageIsLeaf(page)); Assert(!GistPageIsLeaf(page));

View File

@ -54,7 +54,7 @@ gistkillitems(IndexScanDesc scan)
LockBuffer(buffer, GIST_SHARE); LockBuffer(buffer, GIST_SHARE);
gistcheckpage(scan->indexRelation, buffer); gistcheckpage(scan->indexRelation, buffer);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* /*
* If page LSN differs it means that the page was modified since the last read. * If page LSN differs it means that the page was modified since the last read.
@ -336,7 +336,8 @@ gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, double *myDistances,
buffer = ReadBuffer(scan->indexRelation, pageItem->blkno); buffer = ReadBuffer(scan->indexRelation, pageItem->blkno);
LockBuffer(buffer, GIST_SHARE); LockBuffer(buffer, GIST_SHARE);
gistcheckpage(scan->indexRelation, buffer); gistcheckpage(scan->indexRelation, buffer);
page = BufferGetPage(buffer, scan->xs_snapshot, r, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buffer);
TestForOldSnapshot(scan->xs_snapshot, r, page);
opaque = GistPageGetOpaque(page); opaque = GistPageGetOpaque(page);
/* /*

View File

@ -701,7 +701,7 @@ GISTInitBuffer(Buffer b, uint32 f)
Size pageSize; Size pageSize;
pageSize = BufferGetPageSize(b); pageSize = BufferGetPageSize(b);
page = BufferGetPage(b, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(b);
PageInit(page, pageSize, sizeof(GISTPageOpaqueData)); PageInit(page, pageSize, sizeof(GISTPageOpaqueData));
opaque = GistPageGetOpaque(page); opaque = GistPageGetOpaque(page);
@ -718,7 +718,7 @@ GISTInitBuffer(Buffer b, uint32 f)
void void
gistcheckpage(Relation rel, Buffer buf) gistcheckpage(Relation rel, Buffer buf)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
/* /*
* ReadBuffer verifies that every newly-read page passes * ReadBuffer verifies that every newly-read page passes
@ -776,7 +776,7 @@ gistNewBuffer(Relation r)
*/ */
if (ConditionalLockBuffer(buffer)) if (ConditionalLockBuffer(buffer))
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
if (PageIsNew(page)) if (PageIsNew(page))
return buffer; /* OK to use, if never initialized */ return buffer; /* OK to use, if never initialized */

View File

@ -75,7 +75,7 @@ gistvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, buffer = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL,
info->strategy); info->strategy);
LockBuffer(buffer, GIST_SHARE); LockBuffer(buffer, GIST_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (PageIsNew(page) || GistPageIsDeleted(page)) if (PageIsNew(page) || GistPageIsDeleted(page))
{ {
@ -166,7 +166,7 @@ gistbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
RBM_NORMAL, info->strategy); RBM_NORMAL, info->strategy);
LockBuffer(buffer, GIST_SHARE); LockBuffer(buffer, GIST_SHARE);
gistcheckpage(rel, buffer); gistcheckpage(rel, buffer);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (GistPageIsLeaf(page)) if (GistPageIsLeaf(page))
{ {
@ -176,7 +176,7 @@ gistbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
LockBuffer(buffer, GIST_UNLOCK); LockBuffer(buffer, GIST_UNLOCK);
LockBuffer(buffer, GIST_EXCLUSIVE); LockBuffer(buffer, GIST_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (stack->blkno == GIST_ROOT_BLKNO && !GistPageIsLeaf(page)) if (stack->blkno == GIST_ROOT_BLKNO && !GistPageIsLeaf(page))
{ {
/* only the root can become non-leaf during relock */ /* only the root can become non-leaf during relock */

View File

@ -46,7 +46,7 @@ gistRedoClearFollowRight(XLogReaderState *record, uint8 block_id)
action = XLogReadBufferForRedo(record, block_id, &buffer); action = XLogReadBufferForRedo(record, block_id, &buffer);
if (action == BLK_NEEDS_REDO || action == BLK_RESTORED) if (action == BLK_NEEDS_REDO || action == BLK_RESTORED)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
GistPageSetNSN(page, lsn); GistPageSetNSN(page, lsn);
GistClearFollowRight(page); GistClearFollowRight(page);
@ -78,7 +78,7 @@ gistRedoPageUpdateRecord(XLogReaderState *record)
data = begin = XLogRecGetBlockData(record, 0, &datalen); data = begin = XLogRecGetBlockData(record, 0, &datalen);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
/* Delete old tuples */ /* Delete old tuples */
if (xldata->ntodelete > 0) if (xldata->ntodelete > 0)
@ -199,7 +199,7 @@ gistRedoPageSplitRecord(XLogReaderState *record)
} }
buffer = XLogInitBufferForRedo(record, i + 1); buffer = XLogInitBufferForRedo(record, i + 1);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
data = XLogRecGetBlockData(record, i + 1, &datalen); data = XLogRecGetBlockData(record, i + 1, &datalen);
tuples = decodePageSplitRecord(data, datalen, &num); tuples = decodePageSplitRecord(data, datalen, &num);
@ -265,7 +265,7 @@ gistRedoCreateIndex(XLogReaderState *record)
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
Assert(BufferGetBlockNumber(buffer) == GIST_ROOT_BLKNO); Assert(BufferGetBlockNumber(buffer) == GIST_ROOT_BLKNO);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
GISTInitBuffer(buffer, F_LEAF); GISTInitBuffer(buffer, F_LEAF);

View File

@ -278,8 +278,8 @@ hashgettuple(IndexScanDesc scan, ScanDirection dir)
buf = so->hashso_curbuf; buf = so->hashso_curbuf;
Assert(BufferIsValid(buf)); Assert(BufferIsValid(buf));
page = BufferGetPage(buf, scan->xs_snapshot, rel, page = BufferGetPage(buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, rel, page);
maxoffnum = PageGetMaxOffsetNumber(page); maxoffnum = PageGetMaxOffsetNumber(page);
for (offnum = ItemPointerGetOffsetNumber(current); for (offnum = ItemPointerGetOffsetNumber(current);
offnum <= maxoffnum; offnum <= maxoffnum;
@ -328,8 +328,7 @@ hashgettuple(IndexScanDesc scan, ScanDirection dir)
while (res) while (res)
{ {
offnum = ItemPointerGetOffsetNumber(current); offnum = ItemPointerGetOffsetNumber(current);
page = BufferGetPage(so->hashso_curbuf, NULL, NULL, page = BufferGetPage(so->hashso_curbuf);
BGP_NO_SNAPSHOT_TEST);
if (!ItemIdIsDead(PageGetItemId(page, offnum))) if (!ItemIdIsDead(PageGetItemId(page, offnum)))
break; break;
res = _hash_next(scan, dir); res = _hash_next(scan, dir);
@ -372,8 +371,7 @@ hashgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
OffsetNumber offnum; OffsetNumber offnum;
offnum = ItemPointerGetOffsetNumber(&(so->hashso_curpos)); offnum = ItemPointerGetOffsetNumber(&(so->hashso_curpos));
page = BufferGetPage(so->hashso_curbuf, NULL, NULL, page = BufferGetPage(so->hashso_curbuf);
BGP_NO_SNAPSHOT_TEST);
add_tuple = !ItemIdIsDead(PageGetItemId(page, offnum)); add_tuple = !ItemIdIsDead(PageGetItemId(page, offnum));
} }
else else
@ -518,8 +516,7 @@ hashbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
* each bucket. * each bucket.
*/ */
metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE); metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE);
metap = HashPageGetMeta(BufferGetPage(metabuf, NULL, NULL, metap = HashPageGetMeta(BufferGetPage(metabuf));
BGP_NO_SNAPSHOT_TEST));
orig_maxbucket = metap->hashm_maxbucket; orig_maxbucket = metap->hashm_maxbucket;
orig_ntuples = metap->hashm_ntuples; orig_ntuples = metap->hashm_ntuples;
memcpy(&local_metapage, metap, sizeof(local_metapage)); memcpy(&local_metapage, metap, sizeof(local_metapage));
@ -563,7 +560,7 @@ loop_top:
buf = _hash_getbuf_with_strategy(rel, blkno, HASH_WRITE, buf = _hash_getbuf_with_strategy(rel, blkno, HASH_WRITE,
LH_BUCKET_PAGE | LH_OVERFLOW_PAGE, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE,
info->strategy); info->strategy);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (HashPageOpaque) PageGetSpecialPointer(page); opaque = (HashPageOpaque) PageGetSpecialPointer(page);
Assert(opaque->hasho_bucket == cur_bucket); Assert(opaque->hasho_bucket == cur_bucket);
@ -618,8 +615,7 @@ loop_top:
/* Write-lock metapage and check for split since we started */ /* Write-lock metapage and check for split since we started */
metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_WRITE, LH_META_PAGE); metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_WRITE, LH_META_PAGE);
metap = HashPageGetMeta(BufferGetPage(metabuf, NULL, NULL, metap = HashPageGetMeta(BufferGetPage(metabuf));
BGP_NO_SNAPSHOT_TEST));
if (cur_maxbucket != metap->hashm_maxbucket) if (cur_maxbucket != metap->hashm_maxbucket)
{ {

View File

@ -53,8 +53,7 @@ _hash_doinsert(Relation rel, IndexTuple itup)
/* Read the metapage */ /* Read the metapage */
metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE); metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE);
metap = HashPageGetMeta(BufferGetPage(metabuf, NULL, NULL, metap = HashPageGetMeta(BufferGetPage(metabuf));
BGP_NO_SNAPSHOT_TEST));
/* /*
* Check whether the item can fit on a hash page at all. (Eventually, we * Check whether the item can fit on a hash page at all. (Eventually, we
@ -112,7 +111,7 @@ _hash_doinsert(Relation rel, IndexTuple itup)
/* Fetch the primary bucket page for the bucket */ /* Fetch the primary bucket page for the bucket */
buf = _hash_getbuf(rel, blkno, HASH_WRITE, LH_BUCKET_PAGE); buf = _hash_getbuf(rel, blkno, HASH_WRITE, LH_BUCKET_PAGE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page); pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
Assert(pageopaque->hasho_bucket == bucket); Assert(pageopaque->hasho_bucket == bucket);
@ -132,7 +131,7 @@ _hash_doinsert(Relation rel, IndexTuple itup)
*/ */
_hash_relbuf(rel, buf); _hash_relbuf(rel, buf);
buf = _hash_getbuf(rel, nextblkno, HASH_WRITE, LH_OVERFLOW_PAGE); buf = _hash_getbuf(rel, nextblkno, HASH_WRITE, LH_OVERFLOW_PAGE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
} }
else else
{ {
@ -146,7 +145,7 @@ _hash_doinsert(Relation rel, IndexTuple itup)
/* chain to a new overflow page */ /* chain to a new overflow page */
buf = _hash_addovflpage(rel, metabuf, buf); buf = _hash_addovflpage(rel, metabuf, buf);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* should fit now, given test above */ /* should fit now, given test above */
Assert(PageGetFreeSpace(page) >= itemsz); Assert(PageGetFreeSpace(page) >= itemsz);
@ -207,7 +206,7 @@ _hash_pgaddtup(Relation rel, Buffer buf, Size itemsize, IndexTuple itup)
uint32 hashkey; uint32 hashkey;
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE); _hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* Find where to insert the tuple (preserving page's hashkey ordering) */ /* Find where to insert the tuple (preserving page's hashkey ordering) */
hashkey = _hash_get_indextuple_hashkey(itup); hashkey = _hash_get_indextuple_hashkey(itup);

View File

@ -123,7 +123,7 @@ _hash_addovflpage(Relation rel, Buffer metabuf, Buffer buf)
{ {
BlockNumber nextblkno; BlockNumber nextblkno;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page); pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
nextblkno = pageopaque->hasho_nextblkno; nextblkno = pageopaque->hasho_nextblkno;
@ -137,7 +137,7 @@ _hash_addovflpage(Relation rel, Buffer metabuf, Buffer buf)
} }
/* now that we have correct backlink, initialize new overflow page */ /* now that we have correct backlink, initialize new overflow page */
ovflpage = BufferGetPage(ovflbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); ovflpage = BufferGetPage(ovflbuf);
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage); ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
ovflopaque->hasho_prevblkno = BufferGetBlockNumber(buf); ovflopaque->hasho_prevblkno = BufferGetBlockNumber(buf);
ovflopaque->hasho_nextblkno = InvalidBlockNumber; ovflopaque->hasho_nextblkno = InvalidBlockNumber;
@ -186,8 +186,7 @@ _hash_getovflpage(Relation rel, Buffer metabuf)
_hash_chgbufaccess(rel, metabuf, HASH_NOLOCK, HASH_WRITE); _hash_chgbufaccess(rel, metabuf, HASH_NOLOCK, HASH_WRITE);
_hash_checkpage(rel, metabuf, LH_META_PAGE); _hash_checkpage(rel, metabuf, LH_META_PAGE);
metap = HashPageGetMeta(BufferGetPage(metabuf, NULL, NULL, metap = HashPageGetMeta(BufferGetPage(metabuf));
BGP_NO_SNAPSHOT_TEST));
/* start search at hashm_firstfree */ /* start search at hashm_firstfree */
orig_firstfree = metap->hashm_firstfree; orig_firstfree = metap->hashm_firstfree;
@ -225,7 +224,7 @@ _hash_getovflpage(Relation rel, Buffer metabuf)
_hash_chgbufaccess(rel, metabuf, HASH_READ, HASH_NOLOCK); _hash_chgbufaccess(rel, metabuf, HASH_READ, HASH_NOLOCK);
mapbuf = _hash_getbuf(rel, mapblkno, HASH_WRITE, LH_BITMAP_PAGE); mapbuf = _hash_getbuf(rel, mapblkno, HASH_WRITE, LH_BITMAP_PAGE);
mappage = BufferGetPage(mapbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); mappage = BufferGetPage(mapbuf);
freep = HashPageGetBitmap(mappage); freep = HashPageGetBitmap(mappage);
for (; bit <= last_inpage; j++, bit += BITS_PER_MAP) for (; bit <= last_inpage; j++, bit += BITS_PER_MAP)
@ -397,7 +396,7 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf,
/* Get information from the doomed page */ /* Get information from the doomed page */
_hash_checkpage(rel, ovflbuf, LH_OVERFLOW_PAGE); _hash_checkpage(rel, ovflbuf, LH_OVERFLOW_PAGE);
ovflblkno = BufferGetBlockNumber(ovflbuf); ovflblkno = BufferGetBlockNumber(ovflbuf);
ovflpage = BufferGetPage(ovflbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); ovflpage = BufferGetPage(ovflbuf);
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage); ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
nextblkno = ovflopaque->hasho_nextblkno; nextblkno = ovflopaque->hasho_nextblkno;
prevblkno = ovflopaque->hasho_prevblkno; prevblkno = ovflopaque->hasho_prevblkno;
@ -424,7 +423,7 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf,
HASH_WRITE, HASH_WRITE,
LH_BUCKET_PAGE | LH_OVERFLOW_PAGE, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE,
bstrategy); bstrategy);
Page prevpage = BufferGetPage(prevbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page prevpage = BufferGetPage(prevbuf);
HashPageOpaque prevopaque = (HashPageOpaque) PageGetSpecialPointer(prevpage); HashPageOpaque prevopaque = (HashPageOpaque) PageGetSpecialPointer(prevpage);
Assert(prevopaque->hasho_bucket == bucket); Assert(prevopaque->hasho_bucket == bucket);
@ -438,7 +437,7 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf,
HASH_WRITE, HASH_WRITE,
LH_OVERFLOW_PAGE, LH_OVERFLOW_PAGE,
bstrategy); bstrategy);
Page nextpage = BufferGetPage(nextbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page nextpage = BufferGetPage(nextbuf);
HashPageOpaque nextopaque = (HashPageOpaque) PageGetSpecialPointer(nextpage); HashPageOpaque nextopaque = (HashPageOpaque) PageGetSpecialPointer(nextpage);
Assert(nextopaque->hasho_bucket == bucket); Assert(nextopaque->hasho_bucket == bucket);
@ -450,8 +449,7 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf,
/* Read the metapage so we can determine which bitmap page to use */ /* Read the metapage so we can determine which bitmap page to use */
metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE); metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE);
metap = HashPageGetMeta(BufferGetPage(metabuf, NULL, NULL, metap = HashPageGetMeta(BufferGetPage(metabuf));
BGP_NO_SNAPSHOT_TEST));
/* Identify which bit to set */ /* Identify which bit to set */
ovflbitno = blkno_to_bitno(metap, ovflblkno); ovflbitno = blkno_to_bitno(metap, ovflblkno);
@ -468,7 +466,7 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf,
/* Clear the bitmap bit to indicate that this overflow page is free */ /* Clear the bitmap bit to indicate that this overflow page is free */
mapbuf = _hash_getbuf(rel, blkno, HASH_WRITE, LH_BITMAP_PAGE); mapbuf = _hash_getbuf(rel, blkno, HASH_WRITE, LH_BITMAP_PAGE);
mappage = BufferGetPage(mapbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); mappage = BufferGetPage(mapbuf);
freep = HashPageGetBitmap(mappage); freep = HashPageGetBitmap(mappage);
Assert(ISSET(freep, bitmapbit)); Assert(ISSET(freep, bitmapbit));
CLRBIT(freep, bitmapbit); CLRBIT(freep, bitmapbit);
@ -523,7 +521,7 @@ _hash_initbitmap(Relation rel, HashMetaPage metap, BlockNumber blkno,
* that it's not worth worrying about. * that it's not worth worrying about.
*/ */
buf = _hash_getnewbuf(rel, blkno, forkNum); buf = _hash_getnewbuf(rel, blkno, forkNum);
pg = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); pg = BufferGetPage(buf);
/* initialize the page's special space */ /* initialize the page's special space */
op = (HashPageOpaque) PageGetSpecialPointer(pg); op = (HashPageOpaque) PageGetSpecialPointer(pg);
@ -603,7 +601,7 @@ _hash_squeezebucket(Relation rel,
HASH_WRITE, HASH_WRITE,
LH_BUCKET_PAGE, LH_BUCKET_PAGE,
bstrategy); bstrategy);
wpage = BufferGetPage(wbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); wpage = BufferGetPage(wbuf);
wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage); wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage);
/* /*
@ -633,7 +631,7 @@ _hash_squeezebucket(Relation rel,
HASH_WRITE, HASH_WRITE,
LH_OVERFLOW_PAGE, LH_OVERFLOW_PAGE,
bstrategy); bstrategy);
rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rpage = BufferGetPage(rbuf);
ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage); ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage);
Assert(ropaque->hasho_bucket == bucket); Assert(ropaque->hasho_bucket == bucket);
} while (BlockNumberIsValid(ropaque->hasho_nextblkno)); } while (BlockNumberIsValid(ropaque->hasho_nextblkno));
@ -698,7 +696,7 @@ _hash_squeezebucket(Relation rel,
HASH_WRITE, HASH_WRITE,
LH_OVERFLOW_PAGE, LH_OVERFLOW_PAGE,
bstrategy); bstrategy);
wpage = BufferGetPage(wbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); wpage = BufferGetPage(wbuf);
wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage); wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage);
Assert(wopaque->hasho_bucket == bucket); Assert(wopaque->hasho_bucket == bucket);
wbuf_dirty = false; wbuf_dirty = false;
@ -754,7 +752,7 @@ _hash_squeezebucket(Relation rel,
HASH_WRITE, HASH_WRITE,
LH_OVERFLOW_PAGE, LH_OVERFLOW_PAGE,
bstrategy); bstrategy);
rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rpage = BufferGetPage(rbuf);
ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage); ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage);
Assert(ropaque->hasho_bucket == bucket); Assert(ropaque->hasho_bucket == bucket);
} }

View File

@ -161,8 +161,7 @@ _hash_getinitbuf(Relation rel, BlockNumber blkno)
/* ref count and lock type are correct */ /* ref count and lock type are correct */
/* initialize the page */ /* initialize the page */
_hash_pageinit(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST), _hash_pageinit(BufferGetPage(buf), BufferGetPageSize(buf));
BufferGetPageSize(buf));
return buf; return buf;
} }
@ -211,8 +210,7 @@ _hash_getnewbuf(Relation rel, BlockNumber blkno, ForkNumber forkNum)
/* ref count and lock type are correct */ /* ref count and lock type are correct */
/* initialize the page */ /* initialize the page */
_hash_pageinit(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST), _hash_pageinit(BufferGetPage(buf), BufferGetPageSize(buf));
BufferGetPageSize(buf));
return buf; return buf;
} }
@ -386,7 +384,7 @@ _hash_metapinit(Relation rel, double num_tuples, ForkNumber forkNum)
* the physical index length. * the physical index length.
*/ */
metabuf = _hash_getnewbuf(rel, HASH_METAPAGE, forkNum); metabuf = _hash_getnewbuf(rel, HASH_METAPAGE, forkNum);
pg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); pg = BufferGetPage(metabuf);
pageopaque = (HashPageOpaque) PageGetSpecialPointer(pg); pageopaque = (HashPageOpaque) PageGetSpecialPointer(pg);
pageopaque->hasho_prevblkno = InvalidBlockNumber; pageopaque->hasho_prevblkno = InvalidBlockNumber;
@ -454,7 +452,7 @@ _hash_metapinit(Relation rel, double num_tuples, ForkNumber forkNum)
CHECK_FOR_INTERRUPTS(); CHECK_FOR_INTERRUPTS();
buf = _hash_getnewbuf(rel, BUCKET_TO_BLKNO(metap, i), forkNum); buf = _hash_getnewbuf(rel, BUCKET_TO_BLKNO(metap, i), forkNum);
pg = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); pg = BufferGetPage(buf);
pageopaque = (HashPageOpaque) PageGetSpecialPointer(pg); pageopaque = (HashPageOpaque) PageGetSpecialPointer(pg);
pageopaque->hasho_prevblkno = InvalidBlockNumber; pageopaque->hasho_prevblkno = InvalidBlockNumber;
pageopaque->hasho_nextblkno = InvalidBlockNumber; pageopaque->hasho_nextblkno = InvalidBlockNumber;
@ -519,8 +517,7 @@ _hash_expandtable(Relation rel, Buffer metabuf)
_hash_chgbufaccess(rel, metabuf, HASH_NOLOCK, HASH_WRITE); _hash_chgbufaccess(rel, metabuf, HASH_NOLOCK, HASH_WRITE);
_hash_checkpage(rel, metabuf, LH_META_PAGE); _hash_checkpage(rel, metabuf, LH_META_PAGE);
metap = HashPageGetMeta(BufferGetPage(metabuf, NULL, NULL, metap = HashPageGetMeta(BufferGetPage(metabuf));
BGP_NO_SNAPSHOT_TEST));
/* /*
* Check to see if split is still needed; someone else might have already * Check to see if split is still needed; someone else might have already
@ -777,10 +774,10 @@ _hash_splitbucket(Relation rel,
* either bucket. * either bucket.
*/ */
obuf = _hash_getbuf(rel, start_oblkno, HASH_WRITE, LH_BUCKET_PAGE); obuf = _hash_getbuf(rel, start_oblkno, HASH_WRITE, LH_BUCKET_PAGE);
opage = BufferGetPage(obuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); opage = BufferGetPage(obuf);
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage); oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
npage = BufferGetPage(nbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); npage = BufferGetPage(nbuf);
/* initialize the new bucket's primary page */ /* initialize the new bucket's primary page */
nopaque = (HashPageOpaque) PageGetSpecialPointer(npage); nopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
@ -844,7 +841,7 @@ _hash_splitbucket(Relation rel,
_hash_chgbufaccess(rel, nbuf, HASH_WRITE, HASH_NOLOCK); _hash_chgbufaccess(rel, nbuf, HASH_WRITE, HASH_NOLOCK);
/* chain to a new overflow page */ /* chain to a new overflow page */
nbuf = _hash_addovflpage(rel, metabuf, nbuf); nbuf = _hash_addovflpage(rel, metabuf, nbuf);
npage = BufferGetPage(nbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); npage = BufferGetPage(nbuf);
/* we don't need nopaque within the loop */ /* we don't need nopaque within the loop */
} }
@ -891,7 +888,7 @@ _hash_splitbucket(Relation rel,
/* Else, advance to next old page */ /* Else, advance to next old page */
obuf = _hash_getbuf(rel, oblkno, HASH_WRITE, LH_OVERFLOW_PAGE); obuf = _hash_getbuf(rel, oblkno, HASH_WRITE, LH_OVERFLOW_PAGE);
opage = BufferGetPage(obuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); opage = BufferGetPage(obuf);
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage); oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
} }

View File

@ -55,7 +55,7 @@ _hash_next(IndexScanDesc scan, ScanDirection dir)
current = &(so->hashso_curpos); current = &(so->hashso_curpos);
offnum = ItemPointerGetOffsetNumber(current); offnum = ItemPointerGetOffsetNumber(current);
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE); _hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum)); itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum));
so->hashso_heappos = itup->t_tid; so->hashso_heappos = itup->t_tid;
@ -79,7 +79,7 @@ _hash_readnext(Relation rel,
if (BlockNumberIsValid(blkno)) if (BlockNumberIsValid(blkno))
{ {
*bufp = _hash_getbuf(rel, blkno, HASH_READ, LH_OVERFLOW_PAGE); *bufp = _hash_getbuf(rel, blkno, HASH_READ, LH_OVERFLOW_PAGE);
*pagep = BufferGetPage(*bufp, NULL, NULL, BGP_NO_SNAPSHOT_TEST); *pagep = BufferGetPage(*bufp);
*opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep); *opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep);
} }
} }
@ -102,7 +102,7 @@ _hash_readprev(Relation rel,
{ {
*bufp = _hash_getbuf(rel, blkno, HASH_READ, *bufp = _hash_getbuf(rel, blkno, HASH_READ,
LH_BUCKET_PAGE | LH_OVERFLOW_PAGE); LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
*pagep = BufferGetPage(*bufp, NULL, NULL, BGP_NO_SNAPSHOT_TEST); *pagep = BufferGetPage(*bufp);
*opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep); *opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep);
} }
} }
@ -188,8 +188,8 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
/* Read the metapage */ /* Read the metapage */
metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE); metabuf = _hash_getbuf(rel, HASH_METAPAGE, HASH_READ, LH_META_PAGE);
page = BufferGetPage(metabuf, scan->xs_snapshot, rel, page = BufferGetPage(metabuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, rel, page);
metap = HashPageGetMeta(page); metap = HashPageGetMeta(page);
/* /*
@ -242,8 +242,8 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
/* Fetch the primary bucket page for the bucket */ /* Fetch the primary bucket page for the bucket */
buf = _hash_getbuf(rel, blkno, HASH_READ, LH_BUCKET_PAGE); buf = _hash_getbuf(rel, blkno, HASH_READ, LH_BUCKET_PAGE);
page = BufferGetPage(buf, scan->xs_snapshot, rel, page = BufferGetPage(buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, rel, page);
opaque = (HashPageOpaque) PageGetSpecialPointer(page); opaque = (HashPageOpaque) PageGetSpecialPointer(page);
Assert(opaque->hasho_bucket == bucket); Assert(opaque->hasho_bucket == bucket);
@ -261,7 +261,7 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
/* if we're here, _hash_step found a valid tuple */ /* if we're here, _hash_step found a valid tuple */
offnum = ItemPointerGetOffsetNumber(current); offnum = ItemPointerGetOffsetNumber(current);
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE); _hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum)); itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum));
so->hashso_heappos = itup->t_tid; so->hashso_heappos = itup->t_tid;
@ -297,7 +297,7 @@ _hash_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
buf = *bufP; buf = *bufP;
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE); _hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (HashPageOpaque) PageGetSpecialPointer(page); opaque = (HashPageOpaque) PageGetSpecialPointer(page);
/* /*

View File

@ -155,7 +155,7 @@ _hash_log2(uint32 num)
void void
_hash_checkpage(Relation rel, Buffer buf, int flags) _hash_checkpage(Relation rel, Buffer buf, int flags)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
/* /*
* ReadBuffer verifies that every newly-read page passes * ReadBuffer verifies that every newly-read page passes

View File

@ -394,8 +394,8 @@ heapgetpage(HeapScanDesc scan, BlockNumber page)
*/ */
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
dp = BufferGetPage(buffer, snapshot, scan->rs_rd, dp = BufferGetPage(buffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, scan->rs_rd, dp);
lines = PageGetMaxOffsetNumber(dp); lines = PageGetMaxOffsetNumber(dp);
ntup = 0; ntup = 0;
@ -538,7 +538,8 @@ heapgettup(HeapScanDesc scan,
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
dp = BufferGetPage(scan->rs_cbuf, snapshot, scan->rs_rd, BGP_TEST_FOR_OLD_SNAPSHOT); dp = BufferGetPage(scan->rs_cbuf);
TestForOldSnapshot(snapshot, scan->rs_rd, dp);
lines = PageGetMaxOffsetNumber(dp); lines = PageGetMaxOffsetNumber(dp);
/* page and lineoff now reference the physically next tid */ /* page and lineoff now reference the physically next tid */
@ -583,8 +584,8 @@ heapgettup(HeapScanDesc scan,
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
dp = BufferGetPage(scan->rs_cbuf, snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, scan->rs_rd, dp);
lines = PageGetMaxOffsetNumber(dp); lines = PageGetMaxOffsetNumber(dp);
if (!scan->rs_inited) if (!scan->rs_inited)
@ -618,8 +619,8 @@ heapgettup(HeapScanDesc scan,
heapgetpage(scan, page); heapgetpage(scan, page);
/* Since the tuple was previously fetched, needn't lock page here */ /* Since the tuple was previously fetched, needn't lock page here */
dp = BufferGetPage(scan->rs_cbuf, snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, scan->rs_rd, dp);
lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self));
lpp = PageGetItemId(dp, lineoff); lpp = PageGetItemId(dp, lineoff);
Assert(ItemIdIsNormal(lpp)); Assert(ItemIdIsNormal(lpp));
@ -748,8 +749,8 @@ heapgettup(HeapScanDesc scan,
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
dp = BufferGetPage(scan->rs_cbuf, snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, scan->rs_rd, dp);
lines = PageGetMaxOffsetNumber((Page) dp); lines = PageGetMaxOffsetNumber((Page) dp);
linesleft = lines; linesleft = lines;
if (backward) if (backward)
@ -836,8 +837,8 @@ heapgettup_pagemode(HeapScanDesc scan,
lineindex = scan->rs_cindex + 1; lineindex = scan->rs_cindex + 1;
} }
dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp);
lines = scan->rs_ntuples; lines = scan->rs_ntuples;
/* page and lineindex now reference the next visible tid */ /* page and lineindex now reference the next visible tid */
@ -880,8 +881,8 @@ heapgettup_pagemode(HeapScanDesc scan,
page = scan->rs_cblock; /* current page */ page = scan->rs_cblock; /* current page */
} }
dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp);
lines = scan->rs_ntuples; lines = scan->rs_ntuples;
if (!scan->rs_inited) if (!scan->rs_inited)
@ -914,8 +915,8 @@ heapgettup_pagemode(HeapScanDesc scan,
heapgetpage(scan, page); heapgetpage(scan, page);
/* Since the tuple was previously fetched, needn't lock page here */ /* Since the tuple was previously fetched, needn't lock page here */
dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp);
lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self));
lpp = PageGetItemId(dp, lineoff); lpp = PageGetItemId(dp, lineoff);
Assert(ItemIdIsNormal(lpp)); Assert(ItemIdIsNormal(lpp));
@ -1034,8 +1035,8 @@ heapgettup_pagemode(HeapScanDesc scan,
heapgetpage(scan, page); heapgetpage(scan, page);
dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, dp = BufferGetPage(scan->rs_cbuf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp);
lines = scan->rs_ntuples; lines = scan->rs_ntuples;
linesleft = lines; linesleft = lines;
if (backward) if (backward)
@ -1879,7 +1880,8 @@ heap_fetch(Relation relation,
* Need share lock on buffer to examine tuple commit status. * Need share lock on buffer to examine tuple commit status.
*/ */
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, snapshot, relation, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buffer);
TestForOldSnapshot(snapshot, relation, page);
/* /*
* We'd better check for out-of-range offnum in case of VACUUM since the * We'd better check for out-of-range offnum in case of VACUUM since the
@ -1994,7 +1996,7 @@ heap_hot_search_buffer(ItemPointer tid, Relation relation, Buffer buffer,
Snapshot snapshot, HeapTuple heapTuple, Snapshot snapshot, HeapTuple heapTuple,
bool *all_dead, bool first_call) bool *all_dead, bool first_call)
{ {
Page dp = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page dp = (Page) BufferGetPage(buffer);
TransactionId prev_xmax = InvalidTransactionId; TransactionId prev_xmax = InvalidTransactionId;
OffsetNumber offnum; OffsetNumber offnum;
bool at_chain_start; bool at_chain_start;
@ -2208,8 +2210,8 @@ heap_get_latest_tid(Relation relation,
*/ */
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&ctid)); buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&ctid));
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, snapshot, relation, page = BufferGetPage(buffer);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, relation, page);
/* /*
* Check for bogus item number. This is not treated as an error * Check for bogus item number. This is not treated as an error
@ -2427,12 +2429,10 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid,
RelationPutHeapTuple(relation, buffer, heaptup, RelationPutHeapTuple(relation, buffer, heaptup,
(options & HEAP_INSERT_SPECULATIVE) != 0); (options & HEAP_INSERT_SPECULATIVE) != 0);
if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, if (PageIsAllVisible(BufferGetPage(buffer)))
BGP_NO_SNAPSHOT_TEST)))
{ {
all_visible_cleared = true; all_visible_cleared = true;
PageClearAllVisible(BufferGetPage(buffer, NULL, NULL, PageClearAllVisible(BufferGetPage(buffer));
BGP_NO_SNAPSHOT_TEST));
visibilitymap_clear(relation, visibilitymap_clear(relation,
ItemPointerGetBlockNumber(&(heaptup->t_self)), ItemPointerGetBlockNumber(&(heaptup->t_self)),
vmbuffer); vmbuffer);
@ -2457,8 +2457,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid,
xl_heap_insert xlrec; xl_heap_insert xlrec;
xl_heap_header xlhdr; xl_heap_header xlhdr;
XLogRecPtr recptr; XLogRecPtr recptr;
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
uint8 info = XLOG_HEAP_INSERT; uint8 info = XLOG_HEAP_INSERT;
int bufflags = 0; int bufflags = 0;
@ -2717,7 +2716,7 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples,
buffer = RelationGetBufferForTuple(relation, heaptuples[ndone]->t_len, buffer = RelationGetBufferForTuple(relation, heaptuples[ndone]->t_len,
InvalidBuffer, options, bistate, InvalidBuffer, options, bistate,
&vmbuffer, NULL); &vmbuffer, NULL);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* NO EREPORT(ERROR) from here till changes are logged */ /* NO EREPORT(ERROR) from here till changes are logged */
START_CRIT_SECTION(); START_CRIT_SECTION();
@ -3031,7 +3030,7 @@ heap_delete(Relation relation, ItemPointer tid,
block = ItemPointerGetBlockNumber(tid); block = ItemPointerGetBlockNumber(tid);
buffer = ReadBuffer(relation, block); buffer = ReadBuffer(relation, block);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* /*
* Before locking the buffer, pin the visibility map page if it appears to * Before locking the buffer, pin the visibility map page if it appears to
@ -3521,7 +3520,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
block = ItemPointerGetBlockNumber(otid); block = ItemPointerGetBlockNumber(otid);
buffer = ReadBuffer(relation, block); buffer = ReadBuffer(relation, block);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* /*
* Before locking the buffer, pin the visibility map page if it appears to * Before locking the buffer, pin the visibility map page if it appears to
@ -4122,22 +4121,17 @@ l2:
oldtup.t_data->t_ctid = heaptup->t_self; oldtup.t_data->t_ctid = heaptup->t_self;
/* clear PD_ALL_VISIBLE flags */ /* clear PD_ALL_VISIBLE flags */
if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, if (PageIsAllVisible(BufferGetPage(buffer)))
BGP_NO_SNAPSHOT_TEST)))
{ {
all_visible_cleared = true; all_visible_cleared = true;
PageClearAllVisible(BufferGetPage(buffer, NULL, NULL, PageClearAllVisible(BufferGetPage(buffer));
BGP_NO_SNAPSHOT_TEST));
visibilitymap_clear(relation, BufferGetBlockNumber(buffer), visibilitymap_clear(relation, BufferGetBlockNumber(buffer),
vmbuffer); vmbuffer);
} }
if (newbuf != buffer && if (newbuf != buffer && PageIsAllVisible(BufferGetPage(newbuf)))
PageIsAllVisible(BufferGetPage(newbuf, NULL, NULL,
BGP_NO_SNAPSHOT_TEST)))
{ {
all_visible_cleared_new = true; all_visible_cleared_new = true;
PageClearAllVisible(BufferGetPage(newbuf, NULL, NULL, PageClearAllVisible(BufferGetPage(newbuf));
BGP_NO_SNAPSHOT_TEST));
visibilitymap_clear(relation, BufferGetBlockNumber(newbuf), visibilitymap_clear(relation, BufferGetBlockNumber(newbuf),
vmbuffer_new); vmbuffer_new);
} }
@ -4168,12 +4162,9 @@ l2:
all_visible_cleared_new); all_visible_cleared_new);
if (newbuf != buffer) if (newbuf != buffer)
{ {
PageSetLSN(BufferGetPage(newbuf, NULL, NULL, PageSetLSN(BufferGetPage(newbuf), recptr);
BGP_NO_SNAPSHOT_TEST),
recptr);
} }
PageSetLSN(BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST), PageSetLSN(BufferGetPage(buffer), recptr);
recptr);
} }
END_CRIT_SECTION(); END_CRIT_SECTION();
@ -4537,7 +4528,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,
*buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); *buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(*buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(*buffer);
lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid)); lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid));
Assert(ItemIdIsNormal(lp)); Assert(ItemIdIsNormal(lp));
@ -5715,8 +5706,7 @@ l4:
{ {
xl_heap_lock_updated xlrec; xl_heap_lock_updated xlrec;
XLogRecPtr recptr; XLogRecPtr recptr;
Page page = BufferGetPage(buf, NULL, NULL, Page page = BufferGetPage(buf);
BGP_NO_SNAPSHOT_TEST);
XLogBeginInsert(); XLogBeginInsert();
XLogRegisterBuffer(0, buf, REGBUF_STANDARD); XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
@ -5823,7 +5813,7 @@ heap_finish_speculative(Relation relation, HeapTuple tuple)
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self))); buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self)));
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
offnum = ItemPointerGetOffsetNumber(&(tuple->t_self)); offnum = ItemPointerGetOffsetNumber(&(tuple->t_self));
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)
@ -5917,7 +5907,7 @@ heap_abort_speculative(Relation relation, HeapTuple tuple)
block = ItemPointerGetBlockNumber(tid); block = ItemPointerGetBlockNumber(tid);
buffer = ReadBuffer(relation, block); buffer = ReadBuffer(relation, block);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
@ -6064,7 +6054,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self))); buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self)));
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
offnum = ItemPointerGetOffsetNumber(&(tuple->t_self)); offnum = ItemPointerGetOffsetNumber(&(tuple->t_self));
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)
@ -7319,8 +7309,7 @@ log_heap_update(Relation reln, Buffer oldbuf,
uint16 prefixlen = 0, uint16 prefixlen = 0,
suffixlen = 0; suffixlen = 0;
XLogRecPtr recptr; XLogRecPtr recptr;
Page page = BufferGetPage(newbuf, NULL, NULL, Page page = BufferGetPage(newbuf);
BGP_NO_SNAPSHOT_TEST);
bool need_tuple_data = RelationIsLogicallyLogged(reln); bool need_tuple_data = RelationIsLogicallyLogged(reln);
bool init; bool init;
int bufflags; int bufflags;
@ -7769,8 +7758,7 @@ heap_xlog_clean(XLogReaderState *record)
&buffer); &buffer);
if (action == BLK_NEEDS_REDO) if (action == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = (Page) BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
OffsetNumber *end; OffsetNumber *end;
OffsetNumber *redirected; OffsetNumber *redirected;
OffsetNumber *nowdead; OffsetNumber *nowdead;
@ -7876,7 +7864,7 @@ heap_xlog_visible(XLogReaderState *record)
* XLOG record's LSN, we mustn't mark the page all-visible, because * XLOG record's LSN, we mustn't mark the page all-visible, because
* the subsequent update won't be replayed to clear the flag. * the subsequent update won't be replayed to clear the flag.
*/ */
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
PageSetAllVisible(page); PageSetAllVisible(page);
@ -7902,8 +7890,7 @@ heap_xlog_visible(XLogReaderState *record)
if (XLogReadBufferForRedoExtended(record, 0, RBM_ZERO_ON_ERROR, false, if (XLogReadBufferForRedoExtended(record, 0, RBM_ZERO_ON_ERROR, false,
&vmbuffer) == BLK_NEEDS_REDO) &vmbuffer) == BLK_NEEDS_REDO)
{ {
Page vmpage = BufferGetPage(vmbuffer, NULL, NULL, Page vmpage = BufferGetPage(vmbuffer);
BGP_NO_SNAPSHOT_TEST);
Relation reln; Relation reln;
/* initialize the page if it was read as zeros */ /* initialize the page if it was read as zeros */
@ -7970,8 +7957,7 @@ heap_xlog_freeze_page(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
xl_heap_freeze_tuple *tuples; xl_heap_freeze_tuple *tuples;
tuples = (xl_heap_freeze_tuple *) XLogRecGetBlockData(record, 0, NULL); tuples = (xl_heap_freeze_tuple *) XLogRecGetBlockData(record, 0, NULL);
@ -8058,7 +8044,7 @@ heap_xlog_delete(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (PageGetMaxOffsetNumber(page) >= xlrec->offnum) if (PageGetMaxOffsetNumber(page) >= xlrec->offnum)
lp = PageGetItemId(page, xlrec->offnum); lp = PageGetItemId(page, xlrec->offnum);
@ -8141,7 +8127,7 @@ heap_xlog_insert(XLogReaderState *record)
if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE)
{ {
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
PageInit(page, BufferGetPageSize(buffer), 0); PageInit(page, BufferGetPageSize(buffer), 0);
action = BLK_NEEDS_REDO; action = BLK_NEEDS_REDO;
} }
@ -8152,7 +8138,7 @@ heap_xlog_insert(XLogReaderState *record)
Size datalen; Size datalen;
char *data; char *data;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (PageGetMaxOffsetNumber(page) + 1 < xlrec->offnum) if (PageGetMaxOffsetNumber(page) + 1 < xlrec->offnum)
elog(PANIC, "invalid max offset number"); elog(PANIC, "invalid max offset number");
@ -8257,7 +8243,7 @@ heap_xlog_multi_insert(XLogReaderState *record)
if (isinit) if (isinit)
{ {
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
PageInit(page, BufferGetPageSize(buffer), 0); PageInit(page, BufferGetPageSize(buffer), 0);
action = BLK_NEEDS_REDO; action = BLK_NEEDS_REDO;
} }
@ -8273,7 +8259,7 @@ heap_xlog_multi_insert(XLogReaderState *record)
tupdata = XLogRecGetBlockData(record, 0, &len); tupdata = XLogRecGetBlockData(record, 0, &len);
endptr = tupdata + len; endptr = tupdata + len;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
for (i = 0; i < xlrec->ntuples; i++) for (i = 0; i < xlrec->ntuples; i++)
{ {
@ -8424,7 +8410,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
&obuffer); &obuffer);
if (oldaction == BLK_NEEDS_REDO) if (oldaction == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(obuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(obuffer);
offnum = xlrec->old_offnum; offnum = xlrec->old_offnum;
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)
lp = PageGetItemId(page, offnum); lp = PageGetItemId(page, offnum);
@ -8471,7 +8457,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
else if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) else if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE)
{ {
nbuffer = XLogInitBufferForRedo(record, 0); nbuffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(nbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(nbuffer);
PageInit(page, BufferGetPageSize(nbuffer), 0); PageInit(page, BufferGetPageSize(nbuffer), 0);
newaction = BLK_NEEDS_REDO; newaction = BLK_NEEDS_REDO;
} }
@ -8504,7 +8490,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update)
recdata = XLogRecGetBlockData(record, 0, &datalen); recdata = XLogRecGetBlockData(record, 0, &datalen);
recdata_end = recdata + datalen; recdata_end = recdata + datalen;
page = BufferGetPage(nbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(nbuffer);
offnum = xlrec->new_offnum; offnum = xlrec->new_offnum;
if (PageGetMaxOffsetNumber(page) + 1 < offnum) if (PageGetMaxOffsetNumber(page) + 1 < offnum)
@ -8634,7 +8620,7 @@ heap_xlog_confirm(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
offnum = xlrec->offnum; offnum = xlrec->offnum;
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)
@ -8670,7 +8656,7 @@ heap_xlog_lock(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
offnum = xlrec->offnum; offnum = xlrec->offnum;
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)
@ -8720,7 +8706,7 @@ heap_xlog_lock_updated(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
offnum = xlrec->offnum; offnum = xlrec->offnum;
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)
@ -8759,7 +8745,7 @@ heap_xlog_inplace(XLogReaderState *record)
{ {
char *newtup = XLogRecGetBlockData(record, 0, &newlen); char *newtup = XLogRecGetBlockData(record, 0, &newlen);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
offnum = xlrec->offnum; offnum = xlrec->offnum;
if (PageGetMaxOffsetNumber(page) >= offnum) if (PageGetMaxOffsetNumber(page) >= offnum)

View File

@ -48,7 +48,7 @@ RelationPutHeapTuple(Relation relation,
Assert(!token || HeapTupleHeaderIsSpeculative(tuple->t_data)); Assert(!token || HeapTupleHeaderIsSpeculative(tuple->t_data));
/* Add the tuple to the page */ /* Add the tuple to the page */
pageHeader = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); pageHeader = BufferGetPage(buffer);
offnum = PageAddItem(pageHeader, (Item) tuple->t_data, offnum = PageAddItem(pageHeader, (Item) tuple->t_data,
tuple->t_len, InvalidOffsetNumber, false, true); tuple->t_len, InvalidOffsetNumber, false, true);
@ -132,13 +132,10 @@ GetVisibilityMapPins(Relation relation, Buffer buffer1, Buffer buffer2,
while (1) while (1)
{ {
/* Figure out which pins we need but don't have. */ /* Figure out which pins we need but don't have. */
need_to_pin_buffer1 = need_to_pin_buffer1 = PageIsAllVisible(BufferGetPage(buffer1))
PageIsAllVisible(BufferGetPage(buffer1, NULL, NULL,
BGP_NO_SNAPSHOT_TEST))
&& !visibilitymap_pin_ok(block1, *vmbuffer1); && !visibilitymap_pin_ok(block1, *vmbuffer1);
need_to_pin_buffer2 = buffer2 != InvalidBuffer need_to_pin_buffer2 = buffer2 != InvalidBuffer
&& PageIsAllVisible(BufferGetPage(buffer2, NULL, NULL, && PageIsAllVisible(BufferGetPage(buffer2))
BGP_NO_SNAPSHOT_TEST))
&& !visibilitymap_pin_ok(block2, *vmbuffer2); && !visibilitymap_pin_ok(block2, *vmbuffer2);
if (!need_to_pin_buffer1 && !need_to_pin_buffer2) if (!need_to_pin_buffer1 && !need_to_pin_buffer2)
return; return;
@ -208,7 +205,7 @@ RelationAddExtraBlocks(Relation relation, BulkInsertState bistate)
/* Extend by one page. */ /* Extend by one page. */
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
PageInit(page, BufferGetPageSize(buffer), 0); PageInit(page, BufferGetPageSize(buffer), 0);
MarkBufferDirty(buffer); MarkBufferDirty(buffer);
blockNum = BufferGetBlockNumber(buffer); blockNum = BufferGetBlockNumber(buffer);
@ -400,8 +397,7 @@ loop:
{ {
/* easy case */ /* easy case */
buffer = ReadBufferBI(relation, targetBlock, bistate); buffer = ReadBufferBI(relation, targetBlock, bistate);
if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, if (PageIsAllVisible(BufferGetPage(buffer)))
BGP_NO_SNAPSHOT_TEST)))
visibilitymap_pin(relation, targetBlock, vmbuffer); visibilitymap_pin(relation, targetBlock, vmbuffer);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
} }
@ -409,8 +405,7 @@ loop:
{ {
/* also easy case */ /* also easy case */
buffer = otherBuffer; buffer = otherBuffer;
if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, if (PageIsAllVisible(BufferGetPage(buffer)))
BGP_NO_SNAPSHOT_TEST)))
visibilitymap_pin(relation, targetBlock, vmbuffer); visibilitymap_pin(relation, targetBlock, vmbuffer);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
} }
@ -418,8 +413,7 @@ loop:
{ {
/* lock other buffer first */ /* lock other buffer first */
buffer = ReadBuffer(relation, targetBlock); buffer = ReadBuffer(relation, targetBlock);
if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, if (PageIsAllVisible(BufferGetPage(buffer)))
BGP_NO_SNAPSHOT_TEST)))
visibilitymap_pin(relation, targetBlock, vmbuffer); visibilitymap_pin(relation, targetBlock, vmbuffer);
LockBuffer(otherBuffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(otherBuffer, BUFFER_LOCK_EXCLUSIVE);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
@ -428,8 +422,7 @@ loop:
{ {
/* lock target buffer first */ /* lock target buffer first */
buffer = ReadBuffer(relation, targetBlock); buffer = ReadBuffer(relation, targetBlock);
if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, if (PageIsAllVisible(BufferGetPage(buffer)))
BGP_NO_SNAPSHOT_TEST)))
visibilitymap_pin(relation, targetBlock, vmbuffer); visibilitymap_pin(relation, targetBlock, vmbuffer);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
LockBuffer(otherBuffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(otherBuffer, BUFFER_LOCK_EXCLUSIVE);
@ -469,7 +462,7 @@ loop:
* Now we can check to see if there's enough free space here. If so, * Now we can check to see if there's enough free space here. If so,
* we're done. * we're done.
*/ */
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
pageFreeSpace = PageGetHeapFreeSpace(page); pageFreeSpace = PageGetHeapFreeSpace(page);
if (len + saveFreeSpace <= pageFreeSpace) if (len + saveFreeSpace <= pageFreeSpace)
{ {
@ -590,7 +583,7 @@ loop:
* is empty (this should never happen, but if it does we don't want to * is empty (this should never happen, but if it does we don't want to
* risk wiping out valid data). * risk wiping out valid data).
*/ */
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (!PageIsNew(page)) if (!PageIsNew(page))
elog(ERROR, "page %u of relation \"%s\" should be empty but is not", elog(ERROR, "page %u of relation \"%s\" should be empty but is not",

View File

@ -74,7 +74,7 @@ static void heap_prune_record_unused(PruneState *prstate, OffsetNumber offnum);
void void
heap_page_prune_opt(Relation relation, Buffer buffer) heap_page_prune_opt(Relation relation, Buffer buffer)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
Size minfree; Size minfree;
TransactionId OldestXmin; TransactionId OldestXmin;
@ -183,7 +183,7 @@ heap_page_prune(Relation relation, Buffer buffer, TransactionId OldestXmin,
bool report_stats, TransactionId *latestRemovedXid) bool report_stats, TransactionId *latestRemovedXid)
{ {
int ndeleted = 0; int ndeleted = 0;
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
OffsetNumber offnum, OffsetNumber offnum,
maxoff; maxoff;
PruneState prstate; PruneState prstate;
@ -270,8 +270,7 @@ heap_page_prune(Relation relation, Buffer buffer, TransactionId OldestXmin,
prstate.nowunused, prstate.nunused, prstate.nowunused, prstate.nunused,
prstate.latestRemovedXid); prstate.latestRemovedXid);
PageSetLSN(BufferGetPage(buffer, NULL, NULL, PageSetLSN(BufferGetPage(buffer), recptr);
BGP_NO_SNAPSHOT_TEST), recptr);
} }
} }
else else
@ -357,7 +356,7 @@ heap_prune_chain(Relation relation, Buffer buffer, OffsetNumber rootoffnum,
PruneState *prstate) PruneState *prstate)
{ {
int ndeleted = 0; int ndeleted = 0;
Page dp = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page dp = (Page) BufferGetPage(buffer);
TransactionId priorXmax = InvalidTransactionId; TransactionId priorXmax = InvalidTransactionId;
ItemId rootlp; ItemId rootlp;
HeapTupleHeader htup; HeapTupleHeader htup;
@ -683,8 +682,7 @@ heap_page_prune_execute(Buffer buffer,
OffsetNumber *nowdead, int ndead, OffsetNumber *nowdead, int ndead,
OffsetNumber *nowunused, int nunused) OffsetNumber *nowunused, int nunused)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = (Page) BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
OffsetNumber *offnum; OffsetNumber *offnum;
int i; int i;

View File

@ -179,8 +179,7 @@ visibilitymap_clear(Relation rel, BlockNumber heapBlk, Buffer buf)
elog(ERROR, "wrong buffer passed to visibilitymap_clear"); elog(ERROR, "wrong buffer passed to visibilitymap_clear");
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
map = PageGetContents(BufferGetPage(buf, NULL, NULL, map = PageGetContents(BufferGetPage(buf));
BGP_NO_SNAPSHOT_TEST));
if (map[mapByte] & mask) if (map[mapByte] & mask)
{ {
@ -288,7 +287,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
if (!BufferIsValid(vmBuf) || BufferGetBlockNumber(vmBuf) != mapBlock) if (!BufferIsValid(vmBuf) || BufferGetBlockNumber(vmBuf) != mapBlock)
elog(ERROR, "wrong VM buffer passed to visibilitymap_set"); elog(ERROR, "wrong VM buffer passed to visibilitymap_set");
page = BufferGetPage(vmBuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(vmBuf);
map = (uint8 *)PageGetContents(page); map = (uint8 *)PageGetContents(page);
LockBuffer(vmBuf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(vmBuf, BUFFER_LOCK_EXCLUSIVE);
@ -313,8 +312,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
*/ */
if (XLogHintBitIsNeeded()) if (XLogHintBitIsNeeded())
{ {
Page heapPage = BufferGetPage(heapBuf, NULL, NULL, Page heapPage = BufferGetPage(heapBuf);
BGP_NO_SNAPSHOT_TEST);
/* caller is expected to set PD_ALL_VISIBLE first */ /* caller is expected to set PD_ALL_VISIBLE first */
Assert(PageIsAllVisible(heapPage)); Assert(PageIsAllVisible(heapPage));
@ -379,8 +377,7 @@ visibilitymap_get_status(Relation rel, BlockNumber heapBlk, Buffer *buf)
return false; return false;
} }
map = PageGetContents(BufferGetPage(*buf, NULL, NULL, map = PageGetContents(BufferGetPage(*buf));
BGP_NO_SNAPSHOT_TEST));
/* /*
* A single byte read is atomic. There could be memory-ordering effects * A single byte read is atomic. There could be memory-ordering effects
@ -429,8 +426,7 @@ visibilitymap_count(Relation rel, BlockNumber *all_visible, BlockNumber *all_fro
* immediately stale anyway if anyone is concurrently setting or * immediately stale anyway if anyone is concurrently setting or
* clearing bits, and we only really need an approximate value. * clearing bits, and we only really need an approximate value.
*/ */
map = (unsigned char *) PageGetContents(BufferGetPage map = (unsigned char *) PageGetContents(BufferGetPage(mapBuffer));
(mapBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST));
for (i = 0; i < MAPSIZE; i++) for (i = 0; i < MAPSIZE; i++)
{ {
@ -497,7 +493,7 @@ visibilitymap_truncate(Relation rel, BlockNumber nheapblocks)
return; return;
} }
page = BufferGetPage(mapBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(mapBuffer);
map = PageGetContents(page); map = PageGetContents(page);
LockBuffer(mapBuffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(mapBuffer, BUFFER_LOCK_EXCLUSIVE);
@ -591,9 +587,8 @@ vm_readbuf(Relation rel, BlockNumber blkno, bool extend)
*/ */
buf = ReadBufferExtended(rel, VISIBILITYMAP_FORKNUM, blkno, buf = ReadBufferExtended(rel, VISIBILITYMAP_FORKNUM, blkno,
RBM_ZERO_ON_ERROR, NULL); RBM_ZERO_ON_ERROR, NULL);
if (PageIsNew(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST))) if (PageIsNew(BufferGetPage(buf)))
PageInit(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST), PageInit(BufferGetPage(buf), BLCKSZ, 0);
BLCKSZ, 0);
return buf; return buf;
} }

View File

@ -255,7 +255,7 @@ _bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
InitDirtySnapshot(SnapshotDirty); InitDirtySnapshot(SnapshotDirty);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
maxoff = PageGetMaxOffsetNumber(page); maxoff = PageGetMaxOffsetNumber(page);
@ -472,7 +472,7 @@ _bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
{ {
nblkno = opaque->btpo_next; nblkno = opaque->btpo_next;
nbuf = _bt_relandgetbuf(rel, nbuf, nblkno, BT_READ); nbuf = _bt_relandgetbuf(rel, nbuf, nblkno, BT_READ);
page = BufferGetPage(nbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(nbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque)) if (!P_IGNORE(opaque))
break; break;
@ -546,7 +546,7 @@ _bt_findinsertloc(Relation rel,
Relation heapRel) Relation heapRel)
{ {
Buffer buf = *bufptr; Buffer buf = *bufptr;
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
Size itemsz; Size itemsz;
BTPageOpaque lpageop; BTPageOpaque lpageop;
bool movedright, bool movedright,
@ -646,7 +646,7 @@ _bt_findinsertloc(Relation rel,
for (;;) for (;;)
{ {
rbuf = _bt_relandgetbuf(rel, rbuf, rblkno, BT_WRITE); rbuf = _bt_relandgetbuf(rel, rbuf, rblkno, BT_WRITE);
page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(rbuf);
lpageop = (BTPageOpaque) PageGetSpecialPointer(page); lpageop = (BTPageOpaque) PageGetSpecialPointer(page);
/* /*
@ -742,7 +742,7 @@ _bt_insertonpg(Relation rel,
OffsetNumber firstright = InvalidOffsetNumber; OffsetNumber firstright = InvalidOffsetNumber;
Size itemsz; Size itemsz;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
lpageop = (BTPageOpaque) PageGetSpecialPointer(page); lpageop = (BTPageOpaque) PageGetSpecialPointer(page);
/* child buffer must be given iff inserting on an internal page */ /* child buffer must be given iff inserting on an internal page */
@ -824,7 +824,7 @@ _bt_insertonpg(Relation rel,
Assert(!P_ISLEAF(lpageop)); Assert(!P_ISLEAF(lpageop));
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
if (metad->btm_fastlevel >= lpageop->btpo.level) 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 */ /* clear INCOMPLETE_SPLIT flag on child if inserting a downlink */
if (BufferIsValid(cbuf)) if (BufferIsValid(cbuf))
{ {
Page cpage = BufferGetPage(cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page cpage = BufferGetPage(cbuf);
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage); BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
Assert(P_INCOMPLETE_SPLIT(cpageop)); Assert(P_INCOMPLETE_SPLIT(cpageop));
@ -922,8 +922,7 @@ _bt_insertonpg(Relation rel,
} }
if (BufferIsValid(cbuf)) if (BufferIsValid(cbuf))
{ {
PageSetLSN(BufferGetPage(cbuf, NULL, NULL, PageSetLSN(BufferGetPage(cbuf), recptr);
BGP_NO_SNAPSHOT_TEST), recptr);
} }
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
@ -996,9 +995,9 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
* possibly-confusing junk behind, we are careful to rewrite rightpage as * possibly-confusing junk behind, we are careful to rewrite rightpage as
* zeroes before throwing any error. * zeroes before throwing any error.
*/ */
origpage = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); origpage = BufferGetPage(buf);
leftpage = PageGetTempPage(origpage); leftpage = PageGetTempPage(origpage);
rightpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rightpage = BufferGetPage(rbuf);
origpagenumber = BufferGetBlockNumber(buf); origpagenumber = BufferGetBlockNumber(buf);
rightpagenumber = BufferGetBlockNumber(rbuf); rightpagenumber = BufferGetBlockNumber(rbuf);
@ -1187,7 +1186,7 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
if (!P_RIGHTMOST(oopaque)) if (!P_RIGHTMOST(oopaque))
{ {
sbuf = _bt_getbuf(rel, oopaque->btpo_next, BT_WRITE); sbuf = _bt_getbuf(rel, oopaque->btpo_next, BT_WRITE);
spage = BufferGetPage(sbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); spage = BufferGetPage(sbuf);
sopaque = (BTPageOpaque) PageGetSpecialPointer(spage); sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
if (sopaque->btpo_prev != origpagenumber) if (sopaque->btpo_prev != origpagenumber)
{ {
@ -1257,8 +1256,7 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
*/ */
if (!isleaf) if (!isleaf)
{ {
Page cpage = BufferGetPage(cbuf, NULL, NULL, Page cpage = BufferGetPage(cbuf);
BGP_NO_SNAPSHOT_TEST);
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage); BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
cpageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT; cpageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
@ -1345,8 +1343,7 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
} }
if (!isleaf) if (!isleaf)
{ {
PageSetLSN(BufferGetPage(cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST), PageSetLSN(BufferGetPage(cbuf), recptr);
recptr);
} }
} }
@ -1669,7 +1666,7 @@ _bt_insert_parent(Relation rel,
{ {
BlockNumber bknum = BufferGetBlockNumber(buf); BlockNumber bknum = BufferGetBlockNumber(buf);
BlockNumber rbknum = BufferGetBlockNumber(rbuf); BlockNumber rbknum = BufferGetBlockNumber(rbuf);
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
IndexTuple new_item; IndexTuple new_item;
BTStackData fakestack; BTStackData fakestack;
IndexTuple ritem; IndexTuple ritem;
@ -1745,7 +1742,7 @@ _bt_insert_parent(Relation rel,
void void
_bt_finish_split(Relation rel, Buffer lbuf, BTStack stack) _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
{ {
Page lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page lpage = BufferGetPage(lbuf);
BTPageOpaque lpageop = (BTPageOpaque) PageGetSpecialPointer(lpage); BTPageOpaque lpageop = (BTPageOpaque) PageGetSpecialPointer(lpage);
Buffer rbuf; Buffer rbuf;
Page rpage; Page rpage;
@ -1757,7 +1754,7 @@ _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
/* Lock right sibling, the one missing the downlink */ /* Lock right sibling, the one missing the downlink */
rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE); rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE);
rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rpage = BufferGetPage(rbuf);
rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage); rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage);
/* Could this be a root split? */ /* Could this be a root split? */
@ -1769,7 +1766,7 @@ _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
/* acquire lock on the metapage */ /* acquire lock on the metapage */
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
was_root = (metad->btm_root == BufferGetBlockNumber(lbuf)); was_root = (metad->btm_root == BufferGetBlockNumber(lbuf));
@ -1817,7 +1814,7 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access)
BTPageOpaque opaque; BTPageOpaque opaque;
buf = _bt_getbuf(rel, blkno, access); buf = _bt_getbuf(rel, blkno, access);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (access == BT_WRITE && P_INCOMPLETE_SPLIT(opaque)) if (access == BT_WRITE && P_INCOMPLETE_SPLIT(opaque))
@ -1943,17 +1940,17 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
lbkno = BufferGetBlockNumber(lbuf); lbkno = BufferGetBlockNumber(lbuf);
rbkno = BufferGetBlockNumber(rbuf); rbkno = BufferGetBlockNumber(rbuf);
lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lpage = BufferGetPage(lbuf);
lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage); lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
/* get a new root page */ /* get a new root page */
rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE); rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE);
rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rootpage = BufferGetPage(rootbuf);
rootblknum = BufferGetBlockNumber(rootbuf); rootblknum = BufferGetBlockNumber(rootbuf);
/* acquire lock on the metapage */ /* acquire lock on the metapage */
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
/* /*
@ -2177,7 +2174,7 @@ _bt_vacuum_one_page(Relation rel, Buffer buffer, Relation heapRel)
OffsetNumber offnum, OffsetNumber offnum,
minoff, minoff,
maxoff; maxoff;
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page); BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/* /*

View File

@ -130,7 +130,7 @@ _bt_getroot(Relation rel, int access)
rootlevel = metad->btm_fastlevel; rootlevel = metad->btm_fastlevel;
rootbuf = _bt_getbuf(rel, rootblkno, BT_READ); rootbuf = _bt_getbuf(rel, rootblkno, BT_READ);
rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rootpage = BufferGetPage(rootbuf);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage); rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
/* /*
@ -156,7 +156,7 @@ _bt_getroot(Relation rel, int access)
} }
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg); metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
@ -213,7 +213,7 @@ _bt_getroot(Relation rel, int access)
*/ */
rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE); rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE);
rootblkno = BufferGetBlockNumber(rootbuf); rootblkno = BufferGetBlockNumber(rootbuf);
rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rootpage = BufferGetPage(rootbuf);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage); rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
rootopaque->btpo_prev = rootopaque->btpo_next = P_NONE; rootopaque->btpo_prev = rootopaque->btpo_next = P_NONE;
rootopaque->btpo_flags = (BTP_LEAF | BTP_ROOT); rootopaque->btpo_flags = (BTP_LEAF | BTP_ROOT);
@ -295,7 +295,7 @@ _bt_getroot(Relation rel, int access)
for (;;) for (;;)
{ {
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ); rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rootpage = BufferGetPage(rootbuf);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage); rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
if (!P_IGNORE(rootopaque)) if (!P_IGNORE(rootopaque))
@ -360,7 +360,7 @@ _bt_gettrueroot(Relation rel)
rel->rd_amcache = NULL; rel->rd_amcache = NULL;
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg); metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
@ -397,7 +397,7 @@ _bt_gettrueroot(Relation rel)
for (;;) for (;;)
{ {
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ); rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
rootpage = BufferGetPage(rootbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rootpage = BufferGetPage(rootbuf);
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage); rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
if (!P_IGNORE(rootopaque)) if (!P_IGNORE(rootopaque))
@ -446,7 +446,7 @@ _bt_getrootheight(Relation rel)
BTPageOpaque metaopaque; BTPageOpaque metaopaque;
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg); metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
@ -501,7 +501,7 @@ _bt_getrootheight(Relation rel)
void void
_bt_checkpage(Relation rel, Buffer buf) _bt_checkpage(Relation rel, Buffer buf)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
/* /*
* ReadBuffer verifies that every newly-read page passes * ReadBuffer verifies that every newly-read page passes
@ -616,7 +616,7 @@ _bt_getbuf(Relation rel, BlockNumber blkno, int access)
buf = ReadBuffer(rel, blkno); buf = ReadBuffer(rel, blkno);
if (ConditionalLockBuffer(buf)) if (ConditionalLockBuffer(buf))
{ {
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (_bt_page_recyclable(page)) if (_bt_page_recyclable(page))
{ {
/* /*
@ -674,7 +674,7 @@ _bt_getbuf(Relation rel, BlockNumber blkno, int access)
UnlockRelationForExtension(rel, ExclusiveLock); UnlockRelationForExtension(rel, ExclusiveLock);
/* Initialize the new page before returning it */ /* Initialize the new page before returning it */
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
Assert(PageIsNew(page)); Assert(PageIsNew(page));
_bt_pageinit(page, BufferGetPageSize(buf)); _bt_pageinit(page, BufferGetPageSize(buf));
} }
@ -789,7 +789,7 @@ _bt_delitems_vacuum(Relation rel, Buffer buf,
OffsetNumber *itemnos, int nitems, OffsetNumber *itemnos, int nitems,
BlockNumber lastBlockVacuumed) BlockNumber lastBlockVacuumed)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
BTPageOpaque opaque; BTPageOpaque opaque;
/* No ereport(ERROR) until changes are logged */ /* No ereport(ERROR) until changes are logged */
@ -862,7 +862,7 @@ _bt_delitems_delete(Relation rel, Buffer buf,
OffsetNumber *itemnos, int nitems, OffsetNumber *itemnos, int nitems,
Relation heapRel) Relation heapRel)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
BTPageOpaque opaque; BTPageOpaque opaque;
/* Shouldn't be called unless there's something to do */ /* Shouldn't be called unless there's something to do */
@ -931,7 +931,7 @@ _bt_is_page_halfdead(Relation rel, BlockNumber blk)
bool result; bool result;
buf = _bt_getbuf(rel, blk, BT_READ); buf = _bt_getbuf(rel, blk, BT_READ);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
result = P_ISHALFDEAD(opaque); result = P_ISHALFDEAD(opaque);
@ -991,7 +991,7 @@ _bt_lock_branch_parent(Relation rel, BlockNumber child, BTStack stack,
parent = stack->bts_blkno; parent = stack->bts_blkno;
poffset = stack->bts_offset; poffset = stack->bts_offset;
page = BufferGetPage(pbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(pbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
maxoff = PageGetMaxOffsetNumber(page); maxoff = PageGetMaxOffsetNumber(page);
@ -1035,7 +1035,7 @@ _bt_lock_branch_parent(Relation rel, BlockNumber child, BTStack stack,
BTPageOpaque lopaque; BTPageOpaque lopaque;
lbuf = _bt_getbuf(rel, leftsib, BT_READ); lbuf = _bt_getbuf(rel, leftsib, BT_READ);
lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lpage = BufferGetPage(lbuf);
lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage); lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
/* /*
@ -1126,7 +1126,7 @@ _bt_pagedel(Relation rel, Buffer buf)
for (;;) for (;;)
{ {
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/* /*
@ -1231,7 +1231,7 @@ _bt_pagedel(Relation rel, Buffer buf)
Page lpage; Page lpage;
lbuf = _bt_getbuf(rel, leftsib, BT_READ); lbuf = _bt_getbuf(rel, leftsib, BT_READ);
lpage = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lpage = BufferGetPage(lbuf);
lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage); lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
/* /*
@ -1332,7 +1332,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
IndexTuple itup; IndexTuple itup;
IndexTupleData trunctuple; IndexTupleData trunctuple;
page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(leafbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(!P_RIGHTMOST(opaque) && !P_ISROOT(opaque) && !P_ISDELETED(opaque) && 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 * contents. The test on the next-child downlink is known to sometimes
* fail in the field, though. * fail in the field, though.
*/ */
page = BufferGetPage(topparent, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(topparent);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
#ifdef USE_ASSERT_CHECKING #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 * to copy the right sibling's downlink over the target downlink, and then
* delete the following item. * delete the following item.
*/ */
page = BufferGetPage(topparent, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(topparent);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
itemid = PageGetItemId(page, topoff); 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 * highest internal page in the branch we're deleting. We use the tid of
* the high key to store it. * the high key to store it.
*/ */
page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(leafbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
opaque->btpo_flags |= BTP_HALF_DEAD; 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(0, leafbuf, REGBUF_WILL_INIT);
XLogRegisterBuffer(1, topparent, REGBUF_STANDARD); XLogRegisterBuffer(1, topparent, REGBUF_STANDARD);
page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(leafbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
xlrec.leftblk = opaque->btpo_prev; xlrec.leftblk = opaque->btpo_prev;
xlrec.rightblk = opaque->btpo_next; 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); recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_MARK_PAGE_HALFDEAD);
page = BufferGetPage(topparent, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(topparent);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(leafbuf);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
@ -1525,7 +1525,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
ItemPointer leafhikey; ItemPointer leafhikey;
BlockNumber nextchild; BlockNumber nextchild;
page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(leafbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(P_ISLEAF(opaque) && P_ISHALFDEAD(opaque)); 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 */ /* fetch the block number of the topmost parent's left sibling */
buf = _bt_getbuf(rel, target, BT_READ); buf = _bt_getbuf(rel, target, BT_READ);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
leftsib = opaque->btpo_prev; leftsib = opaque->btpo_prev;
targetlevel = opaque->btpo.level; targetlevel = opaque->btpo.level;
@ -1589,7 +1589,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
if (leftsib != P_NONE) if (leftsib != P_NONE)
{ {
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE); lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(lbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
while (P_ISDELETED(opaque) || opaque->btpo_next != target) 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; return false;
} }
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE); lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(lbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
} }
} }
@ -1616,7 +1616,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
* empty page. * empty page.
*/ */
LockBuffer(buf, BT_WRITE); LockBuffer(buf, BT_WRITE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/* /*
@ -1660,7 +1660,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
*/ */
rightsib = opaque->btpo_next; rightsib = opaque->btpo_next;
rbuf = _bt_getbuf(rel, rightsib, BT_WRITE); rbuf = _bt_getbuf(rel, rightsib, BT_WRITE);
page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(rbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (opaque->btpo_prev != target) if (opaque->btpo_prev != target)
elog(ERROR, "right sibling's left-link doesn't match: " 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) if (leftsib == P_NONE && rightsib_is_rightmost)
{ {
page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(rbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_RIGHTMOST(opaque)) if (P_RIGHTMOST(opaque))
{ {
/* rightsib will be the only one left on the level */ /* rightsib will be the only one left on the level */
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE); metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_WRITE);
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
metad = BTPageGetMeta(metapg); metad = BTPageGetMeta(metapg);
/* /*
@ -1721,12 +1721,12 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
*/ */
if (BufferIsValid(lbuf)) if (BufferIsValid(lbuf))
{ {
page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(lbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(opaque->btpo_next == target); Assert(opaque->btpo_next == target);
opaque->btpo_next = rightsib; opaque->btpo_next = rightsib;
} }
page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(rbuf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(opaque->btpo_prev == target); Assert(opaque->btpo_prev == target);
opaque->btpo_prev = leftsib; 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 * will continue to do so, holding back RecentGlobalXmin, for the duration
* of that scan. * of that scan.
*/ */
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
opaque->btpo_flags &= ~BTP_HALF_DEAD; opaque->btpo_flags &= ~BTP_HALF_DEAD;
opaque->btpo_flags |= BTP_DELETED; opaque->btpo_flags |= BTP_DELETED;
@ -1826,18 +1826,18 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
{ {
PageSetLSN(metapg, recptr); PageSetLSN(metapg, recptr);
} }
page = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(rbuf);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
if (BufferIsValid(lbuf)) if (BufferIsValid(lbuf))
{ {
page = BufferGetPage(lbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(lbuf);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
if (target != leafblkno) if (target != leafblkno)
{ {
page = BufferGetPage(leafbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(leafbuf);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
} }

View File

@ -910,7 +910,7 @@ restart:
buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL, buf = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL,
info->strategy); info->strategy);
LockBuffer(buf, BT_READ); LockBuffer(buf, BT_READ);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (!PageIsNew(page)) if (!PageIsNew(page))
{ {
_bt_checkpage(rel, buf); _bt_checkpage(rel, buf);

View File

@ -100,9 +100,7 @@ _bt_search(Relation rel, int keysz, ScanKey scankey, bool nextkey,
/* If index is empty and access = BT_READ, no root page is created. */ /* If index is empty and access = BT_READ, no root page is created. */
if (!BufferIsValid(*bufP)) if (!BufferIsValid(*bufP))
{
return (BTStack) NULL; return (BTStack) NULL;
}
/* Loop iterates once per level descended in the tree */ /* Loop iterates once per level descended in the tree */
for (;;) for (;;)
@ -133,7 +131,7 @@ _bt_search(Relation rel, int keysz, ScanKey scankey, bool nextkey,
BT_READ, snapshot); BT_READ, snapshot);
/* if this is a leaf page, we're done */ /* if this is a leaf page, we're done */
page = BufferGetPage(*bufP, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(*bufP);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_ISLEAF(opaque)) if (P_ISLEAF(opaque))
break; break;
@ -242,7 +240,8 @@ _bt_moveright(Relation rel,
for (;;) for (;;)
{ {
page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_RIGHTMOST(opaque)) if (P_RIGHTMOST(opaque))
@ -330,7 +329,7 @@ _bt_binsrch(Relation rel,
int32 result, int32 result,
cmpval; cmpval;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
low = P_FIRSTDATAKEY(opaque); low = P_FIRSTDATAKEY(opaque);
@ -1153,7 +1152,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum)
*/ */
Assert(BufferIsValid(so->currPos.buf)); Assert(BufferIsValid(so->currPos.buf));
page = BufferGetPage(so->currPos.buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(so->currPos.buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
minoff = P_FIRSTDATAKEY(opaque); minoff = P_FIRSTDATAKEY(opaque);
maxoff = PageGetMaxOffsetNumber(page); maxoff = PageGetMaxOffsetNumber(page);
@ -1347,8 +1346,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir)
/* step right one page */ /* step right one page */
so->currPos.buf = _bt_getbuf(rel, blkno, BT_READ); so->currPos.buf = _bt_getbuf(rel, blkno, BT_READ);
/* check for deleted page */ /* check for deleted page */
page = BufferGetPage(so->currPos.buf, scan->xs_snapshot, rel, page = BufferGetPage(so->currPos.buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque)) if (!P_IGNORE(opaque))
{ {
@ -1422,8 +1421,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir)
* it's not half-dead and contains matching tuples. Else loop back * it's not half-dead and contains matching tuples. Else loop back
* and do it all again. * and do it all again.
*/ */
page = BufferGetPage(so->currPos.buf, scan->xs_snapshot, rel, page = BufferGetPage(so->currPos.buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(scan->xs_snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque)) if (!P_IGNORE(opaque))
{ {
@ -1462,7 +1461,7 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
Page page; Page page;
BTPageOpaque opaque; BTPageOpaque opaque;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
for (;;) for (;;)
@ -1486,7 +1485,8 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
/* check for interrupts while we're not holding any buffer lock */ /* check for interrupts while we're not holding any buffer lock */
CHECK_FOR_INTERRUPTS(); CHECK_FOR_INTERRUPTS();
buf = _bt_getbuf(rel, blkno, BT_READ); buf = _bt_getbuf(rel, blkno, BT_READ);
page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/* /*
@ -1512,14 +1512,15 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
break; break;
blkno = opaque->btpo_next; blkno = opaque->btpo_next;
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf, snapshot, rel, page = BufferGetPage(buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
} }
/* Return to the original page to see what's up */ /* Return to the original page to see what's up */
buf = _bt_relandgetbuf(rel, buf, obknum, BT_READ); buf = _bt_relandgetbuf(rel, buf, obknum, BT_READ);
page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_ISDELETED(opaque)) if (P_ISDELETED(opaque))
{ {
@ -1536,8 +1537,8 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
RelationGetRelationName(rel)); RelationGetRelationName(rel));
blkno = opaque->btpo_next; blkno = opaque->btpo_next;
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf, snapshot, rel, page = BufferGetPage(buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_ISDELETED(opaque)) if (!P_ISDELETED(opaque))
break; break;
@ -1597,7 +1598,8 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
if (!BufferIsValid(buf)) if (!BufferIsValid(buf))
return InvalidBuffer; return InvalidBuffer;
page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
for (;;) for (;;)
@ -1616,8 +1618,8 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
elog(ERROR, "fell off the end of index \"%s\"", elog(ERROR, "fell off the end of index \"%s\"",
RelationGetRelationName(rel)); RelationGetRelationName(rel));
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf, snapshot, rel, page = BufferGetPage(buf);
BGP_TEST_FOR_OLD_SNAPSHOT); TestForOldSnapshot(snapshot, rel, page);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
} }
@ -1638,7 +1640,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
blkno = ItemPointerGetBlockNumber(&(itup->t_tid)); blkno = ItemPointerGetBlockNumber(&(itup->t_tid));
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
} }
@ -1684,7 +1686,7 @@ _bt_endpoint(IndexScanDesc scan, ScanDirection dir)
} }
PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot); PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque = (BTPageOpaque) PageGetSpecialPointer(page);
Assert(P_ISLEAF(opaque)); Assert(P_ISLEAF(opaque));

View File

@ -1756,7 +1756,7 @@ _bt_killitems(IndexScanDesc scan)
*/ */
LockBuffer(so->currPos.buf, BT_READ); LockBuffer(so->currPos.buf, BT_READ);
page = BufferGetPage(so->currPos.buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(so->currPos.buf);
} }
else else
{ {
@ -1769,7 +1769,7 @@ _bt_killitems(IndexScanDesc scan)
if (!BufferIsValid(buf)) if (!BufferIsValid(buf))
return; return;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (PageGetLSN(page) == so->currPos.lsn) if (PageGetLSN(page) == so->currPos.lsn)
so->currPos.buf = buf; so->currPos.buf = buf;
else else

View File

@ -89,7 +89,7 @@ _bt_restore_meta(XLogReaderState *record, uint8 block_id)
Assert(len == sizeof(xl_btree_metadata)); Assert(len == sizeof(xl_btree_metadata));
Assert(BufferGetBlockNumber(metabuf) == BTREE_METAPAGE); Assert(BufferGetBlockNumber(metabuf) == BTREE_METAPAGE);
xlrec = (xl_btree_metadata *) ptr; xlrec = (xl_btree_metadata *) ptr;
metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metapg = BufferGetPage(metabuf);
_bt_pageinit(metapg, BufferGetPageSize(metabuf)); _bt_pageinit(metapg, BufferGetPageSize(metabuf));
@ -130,8 +130,7 @@ _bt_clear_incomplete_split(XLogReaderState *record, uint8 block_id)
if (XLogReadBufferForRedo(record, block_id, &buf) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, block_id, &buf) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buf, NULL, NULL, Page page = (Page) BufferGetPage(buf);
BGP_NO_SNAPSHOT_TEST);
BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page); BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
Assert((pageop->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0); Assert((pageop->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0);
@ -168,7 +167,7 @@ btree_xlog_insert(bool isleaf, bool ismeta, XLogReaderState *record)
Size datalen; Size datalen;
char *datapos = XLogRecGetBlockData(record, 0, &datalen); char *datapos = XLogRecGetBlockData(record, 0, &datalen);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (PageAddItem(page, (Item) datapos, datalen, xlrec->offnum, if (PageAddItem(page, (Item) datapos, datalen, xlrec->offnum,
false, false) == InvalidOffsetNumber) false, false) == InvalidOffsetNumber)
@ -225,7 +224,7 @@ btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
/* Reconstruct right (new) sibling page from scratch */ /* Reconstruct right (new) sibling page from scratch */
rbuf = XLogInitBufferForRedo(record, 1); rbuf = XLogInitBufferForRedo(record, 1);
datapos = XLogRecGetBlockData(record, 1, &datalen); datapos = XLogRecGetBlockData(record, 1, &datalen);
rpage = BufferGetPage(rbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); rpage = (Page) BufferGetPage(rbuf);
_bt_pageinit(rpage, BufferGetPageSize(rbuf)); _bt_pageinit(rpage, BufferGetPageSize(rbuf));
ropaque = (BTPageOpaque) PageGetSpecialPointer(rpage); ropaque = (BTPageOpaque) PageGetSpecialPointer(rpage);
@ -267,8 +266,7 @@ btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
* but it helps debugging. See also _bt_restore_page(), which does * but it helps debugging. See also _bt_restore_page(), which does
* the same for the right page. * the same for the right page.
*/ */
Page lpage = BufferGetPage(lbuf, NULL, NULL, Page lpage = (Page) BufferGetPage(lbuf);
BGP_NO_SNAPSHOT_TEST);
BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage); BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
OffsetNumber off; OffsetNumber off;
Item newitem = NULL; Item newitem = NULL;
@ -370,8 +368,7 @@ btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = (Page) BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page); BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
pageop->btpo_prev = rightsib; pageop->btpo_prev = rightsib;
@ -479,7 +476,7 @@ btree_xlog_vacuum(XLogReaderState *record)
ptr = XLogRecGetBlockData(record, 0, &len); ptr = XLogRecGetBlockData(record, 0, &len);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (len > 0) if (len > 0)
{ {
@ -573,7 +570,7 @@ btree_xlog_delete_get_latestRemovedXid(XLogReaderState *record)
if (!BufferIsValid(ibuffer)) if (!BufferIsValid(ibuffer))
return InvalidTransactionId; return InvalidTransactionId;
LockBuffer(ibuffer, BT_READ); LockBuffer(ibuffer, BT_READ);
ipage = BufferGetPage(ibuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); ipage = (Page) BufferGetPage(ibuffer);
/* /*
* Loop through the deleted index items to obtain the TransactionId from * Loop through the deleted index items to obtain the TransactionId from
@ -600,7 +597,7 @@ btree_xlog_delete_get_latestRemovedXid(XLogReaderState *record)
return InvalidTransactionId; return InvalidTransactionId;
} }
LockBuffer(hbuffer, BUFFER_LOCK_SHARE); LockBuffer(hbuffer, BUFFER_LOCK_SHARE);
hpage = BufferGetPage(hbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); hpage = (Page) BufferGetPage(hbuffer);
/* /*
* Look up the heap tuple header that the index tuple points at by * Look up the heap tuple header that the index tuple points at by
@ -696,7 +693,7 @@ btree_xlog_delete(XLogReaderState *record)
*/ */
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (XLogRecGetDataLen(record) > SizeOfBtreeDelete) if (XLogRecGetDataLen(record) > SizeOfBtreeDelete)
{ {
@ -748,7 +745,7 @@ btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
OffsetNumber nextoffset; OffsetNumber nextoffset;
BlockNumber rightsib; BlockNumber rightsib;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
poffset = xlrec->poffset; poffset = xlrec->poffset;
@ -772,7 +769,7 @@ btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
/* Rewrite the leaf page as a halfdead page */ /* Rewrite the leaf page as a halfdead page */
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
_bt_pageinit(page, BufferGetPageSize(buffer)); _bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
@ -828,7 +825,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
/* Fix left-link of right sibling */ /* Fix left-link of right sibling */
if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
pageop->btpo_prev = leftsib; pageop->btpo_prev = leftsib;
@ -843,7 +840,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
{ {
if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 1, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
pageop->btpo_next = rightsib; pageop->btpo_next = rightsib;
@ -856,7 +853,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
/* Rewrite target page as empty deleted page */ /* Rewrite target page as empty deleted page */
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
_bt_pageinit(page, BufferGetPageSize(buffer)); _bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
@ -885,7 +882,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
IndexTupleData trunctuple; IndexTupleData trunctuple;
buffer = XLogInitBufferForRedo(record, 3); buffer = XLogInitBufferForRedo(record, 3);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
_bt_pageinit(page, BufferGetPageSize(buffer)); _bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
@ -929,7 +926,7 @@ btree_xlog_newroot(XLogReaderState *record)
Size len; Size len;
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
_bt_pageinit(page, BufferGetPageSize(buffer)); _bt_pageinit(page, BufferGetPageSize(buffer));
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);

View File

@ -451,7 +451,7 @@ moveLeafs(Relation index, SpGistState *state,
/* Find a leaf page that will hold them */ /* Find a leaf page that will hold them */
nbuf = SpGistGetBuffer(index, GBUF_LEAF | (isNulls ? GBUF_NULLS : 0), nbuf = SpGistGetBuffer(index, GBUF_LEAF | (isNulls ? GBUF_NULLS : 0),
size, &xlrec.newPage); size, &xlrec.newPage);
npage = BufferGetPage(nbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); npage = BufferGetPage(nbuf);
nblkno = BufferGetBlockNumber(nbuf); nblkno = BufferGetBlockNumber(nbuf);
Assert(nblkno != current->blkno); Assert(nblkno != current->blkno);
@ -1037,8 +1037,7 @@ doPickSplit(Relation index, SpGistState *state,
nodePageSelect = (uint8 *) palloc(sizeof(uint8) * out.nNodes); nodePageSelect = (uint8 *) palloc(sizeof(uint8) * out.nNodes);
curspace = currentFreeSpace; curspace = currentFreeSpace;
newspace = PageGetExactFreeSpace newspace = PageGetExactFreeSpace(BufferGetPage(newLeafBuffer));
(BufferGetPage(newLeafBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST));
for (i = 0; i < out.nNodes; i++) for (i = 0; i < out.nNodes; i++)
{ {
if (leafSizes[i] <= curspace) if (leafSizes[i] <= curspace)
@ -1071,9 +1070,7 @@ doPickSplit(Relation index, SpGistState *state,
/* Repeat the node assignment process --- should succeed now */ /* Repeat the node assignment process --- should succeed now */
curspace = currentFreeSpace; curspace = currentFreeSpace;
newspace = PageGetExactFreeSpace newspace = PageGetExactFreeSpace(BufferGetPage(newLeafBuffer));
(BufferGetPage(newLeafBuffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST));
for (i = 0; i < out.nNodes; i++) for (i = 0; i < out.nNodes; i++)
{ {
if (leafSizes[i] <= curspace) if (leafSizes[i] <= curspace)
@ -1204,9 +1201,7 @@ doPickSplit(Relation index, SpGistState *state,
it->nextOffset = InvalidOffsetNumber; it->nextOffset = InvalidOffsetNumber;
/* Insert it on page */ /* Insert it on page */
newoffset = SpGistPageAddNewItem(state, newoffset = SpGistPageAddNewItem(state, BufferGetPage(leafBuffer),
BufferGetPage(leafBuffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST),
(Item) it, it->size, (Item) it, it->size,
&startOffsets[leafPageSelect[i]], &startOffsets[leafPageSelect[i]],
false); false);
@ -1280,8 +1275,7 @@ doPickSplit(Relation index, SpGistState *state,
/* Repoint "current" at the new inner tuple */ /* Repoint "current" at the new inner tuple */
current->buffer = newInnerBuffer; current->buffer = newInnerBuffer;
current->blkno = BufferGetBlockNumber(current->buffer); current->blkno = BufferGetBlockNumber(current->buffer);
current->page = BufferGetPage(current->buffer, NULL, NULL, current->page = BufferGetPage(current->buffer);
BGP_NO_SNAPSHOT_TEST);
xlrec.offnumInner = current->offnum = xlrec.offnumInner = current->offnum =
SpGistPageAddNewItem(state, current->page, SpGistPageAddNewItem(state, current->page,
(Item) innerTuple, innerTuple->size, (Item) innerTuple, innerTuple->size,
@ -1397,22 +1391,24 @@ doPickSplit(Relation index, SpGistState *state,
/* Update page LSNs on all affected pages */ /* Update page LSNs on all affected pages */
if (newLeafBuffer != InvalidBuffer) if (newLeafBuffer != InvalidBuffer)
{ {
Page page = BufferGetPage(newLeafBuffer, NULL, NULL, Page page = BufferGetPage(newLeafBuffer);
BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
if (saveCurrent.buffer != InvalidBuffer) if (saveCurrent.buffer != InvalidBuffer)
{ {
Page page = BufferGetPage(saveCurrent.buffer, NULL, NULL, Page page = BufferGetPage(saveCurrent.buffer);
BGP_NO_SNAPSHOT_TEST);
PageSetLSN(page, recptr); PageSetLSN(page, recptr);
} }
PageSetLSN(current->page, recptr); PageSetLSN(current->page, recptr);
if (parent->buffer != InvalidBuffer) if (parent->buffer != InvalidBuffer)
{
PageSetLSN(parent->page, recptr); PageSetLSN(parent->page, recptr);
}
} }
END_CRIT_SECTION(); END_CRIT_SECTION();
@ -1582,8 +1578,7 @@ spgAddNodeAction(Relation index, SpGistState *state,
newInnerTuple->size + sizeof(ItemIdData), newInnerTuple->size + sizeof(ItemIdData),
&xlrec.newPage); &xlrec.newPage);
current->blkno = BufferGetBlockNumber(current->buffer); current->blkno = BufferGetBlockNumber(current->buffer);
current->page = BufferGetPage(current->buffer, NULL, NULL, current->page = BufferGetPage(current->buffer);
BGP_NO_SNAPSHOT_TEST);
/* /*
* Let's just make real sure new current isn't same as old. Right now * Let's just make real sure new current isn't same as old. Right now
@ -1798,9 +1793,7 @@ spgSplitNodeAction(Relation index, SpGistState *state,
{ {
postfixBlkno = BufferGetBlockNumber(newBuffer); postfixBlkno = BufferGetBlockNumber(newBuffer);
xlrec.offnumPostfix = postfixOffset = xlrec.offnumPostfix = postfixOffset =
SpGistPageAddNewItem(state, SpGistPageAddNewItem(state, BufferGetPage(newBuffer),
BufferGetPage(newBuffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST),
(Item) postfixTuple, postfixTuple->size, (Item) postfixTuple, postfixTuple->size,
NULL, false); NULL, false);
MarkBufferDirty(newBuffer); MarkBufferDirty(newBuffer);
@ -1847,8 +1840,7 @@ spgSplitNodeAction(Relation index, SpGistState *state,
if (newBuffer != InvalidBuffer) if (newBuffer != InvalidBuffer)
{ {
PageSetLSN(BufferGetPage(newBuffer, NULL, NULL, PageSetLSN(BufferGetPage(newBuffer), recptr);
BGP_NO_SNAPSHOT_TEST), recptr);
} }
} }
@ -1992,8 +1984,7 @@ spgdoinsert(Relation index, SpGistState *state,
/* inner tuple can be stored on the same page as parent one */ /* inner tuple can be stored on the same page as parent one */
current.buffer = parent.buffer; current.buffer = parent.buffer;
} }
current.page = BufferGetPage(current.buffer, NULL, NULL, current.page = BufferGetPage(current.buffer);
BGP_NO_SNAPSHOT_TEST);
/* should not arrive at a page of the wrong type */ /* should not arrive at a page of the wrong type */
if (isnull ? !SpGistPageStoresNulls(current.page) : if (isnull ? !SpGistPageStoresNulls(current.page) :

View File

@ -92,8 +92,7 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
START_CRIT_SECTION(); START_CRIT_SECTION();
SpGistInitMetapage(BufferGetPage(metabuffer, NULL, NULL, SpGistInitMetapage(BufferGetPage(metabuffer));
BGP_NO_SNAPSHOT_TEST));
MarkBufferDirty(metabuffer); MarkBufferDirty(metabuffer);
SpGistInitBuffer(rootbuffer, SPGIST_LEAF); SpGistInitBuffer(rootbuffer, SPGIST_LEAF);
MarkBufferDirty(rootbuffer); MarkBufferDirty(rootbuffer);
@ -116,12 +115,9 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_CREATE_INDEX); recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_CREATE_INDEX);
PageSetLSN(BufferGetPage(metabuffer, NULL, NULL, PageSetLSN(BufferGetPage(metabuffer), recptr);
BGP_NO_SNAPSHOT_TEST), recptr); PageSetLSN(BufferGetPage(rootbuffer), recptr);
PageSetLSN(BufferGetPage(rootbuffer, NULL, NULL, PageSetLSN(BufferGetPage(nullbuffer), recptr);
BGP_NO_SNAPSHOT_TEST), recptr);
PageSetLSN(BufferGetPage(nullbuffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST), recptr);
} }
END_CRIT_SECTION(); END_CRIT_SECTION();

View File

@ -341,7 +341,8 @@ redirect:
} }
/* else new pointer points to the same page, no work needed */ /* else new pointer points to the same page, no work needed */
page = BufferGetPage(buffer, snapshot, index, BGP_TEST_FOR_OLD_SNAPSHOT); page = BufferGetPage(buffer);
TestForOldSnapshot(snapshot, index, page);
isnull = SpGistPageStoresNulls(page) ? true : false; isnull = SpGistPageStoresNulls(page) ? true : false;

View File

@ -126,8 +126,7 @@ spgGetCache(Relation index)
metabuffer = ReadBuffer(index, SPGIST_METAPAGE_BLKNO); metabuffer = ReadBuffer(index, SPGIST_METAPAGE_BLKNO);
LockBuffer(metabuffer, BUFFER_LOCK_SHARE); LockBuffer(metabuffer, BUFFER_LOCK_SHARE);
metadata = SpGistPageGetMeta metadata = SpGistPageGetMeta(BufferGetPage(metabuffer));
(BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST));
if (metadata->magicNumber != SPGIST_MAGIC_NUMBER) if (metadata->magicNumber != SPGIST_MAGIC_NUMBER)
elog(ERROR, "index \"%s\" is not an SP-GiST index", elog(ERROR, "index \"%s\" is not an SP-GiST index",
@ -207,8 +206,7 @@ SpGistNewBuffer(Relation index)
*/ */
if (ConditionalLockBuffer(buffer)) if (ConditionalLockBuffer(buffer))
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
if (PageIsNew(page)) if (PageIsNew(page))
return buffer; /* OK to use, if never initialized */ return buffer; /* OK to use, if never initialized */
@ -258,8 +256,7 @@ SpGistUpdateMetaPage(Relation index)
if (ConditionalLockBuffer(metabuffer)) if (ConditionalLockBuffer(metabuffer))
{ {
metadata = SpGistPageGetMeta metadata = SpGistPageGetMeta(BufferGetPage(metabuffer));
(BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST));
metadata->lastUsedPages = cache->lastUsedPages; metadata->lastUsedPages = cache->lastUsedPages;
MarkBufferDirty(metabuffer); MarkBufferDirty(metabuffer);
@ -336,9 +333,7 @@ allocNewBuffer(Relation index, int flags)
blkFlags |= GBUF_NULLS; blkFlags |= GBUF_NULLS;
cache->lastUsedPages.cachedPage[blkFlags].blkno = blkno; cache->lastUsedPages.cachedPage[blkFlags].blkno = blkno;
cache->lastUsedPages.cachedPage[blkFlags].freeSpace = cache->lastUsedPages.cachedPage[blkFlags].freeSpace =
PageGetExactFreeSpace PageGetExactFreeSpace(BufferGetPage(buffer));
(BufferGetPage(buffer, NULL, NULL,
BGP_NO_SNAPSHOT_TEST));
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
} }
} }
@ -406,7 +401,7 @@ SpGistGetBuffer(Relation index, int flags, int needSpace, bool *isNew)
return allocNewBuffer(index, flags); return allocNewBuffer(index, flags);
} }
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (PageIsNew(page) || SpGistPageIsDeleted(page) || PageIsEmpty(page)) if (PageIsNew(page) || SpGistPageIsDeleted(page) || PageIsEmpty(page))
{ {
@ -465,7 +460,7 @@ SpGistSetLastUsedPage(Relation index, Buffer buffer)
SpGistCache *cache = spgGetCache(index); SpGistCache *cache = spgGetCache(index);
SpGistLastUsedPage *lup; SpGistLastUsedPage *lup;
int freeSpace; int freeSpace;
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
BlockNumber blkno = BufferGetBlockNumber(buffer); BlockNumber blkno = BufferGetBlockNumber(buffer);
int flags; int flags;
@ -513,7 +508,7 @@ void
SpGistInitBuffer(Buffer b, uint16 f) SpGistInitBuffer(Buffer b, uint16 f)
{ {
Assert(BufferGetPageSize(b) == BLCKSZ); Assert(BufferGetPageSize(b) == BLCKSZ);
SpGistInitPage(BufferGetPage(b, NULL, NULL, BGP_NO_SNAPSHOT_TEST), f); SpGistInitPage(BufferGetPage(b), f);
} }
/* /*

View File

@ -125,8 +125,7 @@ static void
vacuumLeafPage(spgBulkDeleteState *bds, Relation index, Buffer buffer, vacuumLeafPage(spgBulkDeleteState *bds, Relation index, Buffer buffer,
bool forPending) bool forPending)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
spgxlogVacuumLeaf xlrec; spgxlogVacuumLeaf xlrec;
OffsetNumber toDead[MaxIndexTuplesPerPage]; OffsetNumber toDead[MaxIndexTuplesPerPage];
OffsetNumber toPlaceholder[MaxIndexTuplesPerPage]; OffsetNumber toPlaceholder[MaxIndexTuplesPerPage];
@ -406,8 +405,7 @@ vacuumLeafPage(spgBulkDeleteState *bds, Relation index, Buffer buffer,
static void static void
vacuumLeafRoot(spgBulkDeleteState *bds, Relation index, Buffer buffer) vacuumLeafRoot(spgBulkDeleteState *bds, Relation index, Buffer buffer)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
spgxlogVacuumRoot xlrec; spgxlogVacuumRoot xlrec;
OffsetNumber toDelete[MaxIndexTuplesPerPage]; OffsetNumber toDelete[MaxIndexTuplesPerPage];
OffsetNumber i, OffsetNumber i,
@ -492,8 +490,7 @@ vacuumLeafRoot(spgBulkDeleteState *bds, Relation index, Buffer buffer)
static void static void
vacuumRedirectAndPlaceholder(Relation index, Buffer buffer) vacuumRedirectAndPlaceholder(Relation index, Buffer buffer)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
SpGistPageOpaque opaque = SpGistPageGetOpaque(page); SpGistPageOpaque opaque = SpGistPageGetOpaque(page);
OffsetNumber i, OffsetNumber i,
max = PageGetMaxOffsetNumber(page), max = PageGetMaxOffsetNumber(page),
@ -618,7 +615,7 @@ spgvacuumpage(spgBulkDeleteState *bds, BlockNumber blkno)
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno, buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
RBM_NORMAL, bds->info->strategy); RBM_NORMAL, bds->info->strategy);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (PageIsNew(page)) if (PageIsNew(page))
{ {
@ -699,7 +696,7 @@ spgprocesspending(spgBulkDeleteState *bds)
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno, buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
RBM_NORMAL, bds->info->strategy); RBM_NORMAL, bds->info->strategy);
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
if (PageIsNew(page) || SpGistPageIsDeleted(page)) if (PageIsNew(page) || SpGistPageIsDeleted(page))
{ {

View File

@ -79,7 +79,7 @@ spgRedoCreateIndex(XLogReaderState *record)
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
Assert(BufferGetBlockNumber(buffer) == SPGIST_METAPAGE_BLKNO); Assert(BufferGetBlockNumber(buffer) == SPGIST_METAPAGE_BLKNO);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
SpGistInitMetapage(page); SpGistInitMetapage(page);
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
MarkBufferDirty(buffer); MarkBufferDirty(buffer);
@ -88,7 +88,7 @@ spgRedoCreateIndex(XLogReaderState *record)
buffer = XLogInitBufferForRedo(record, 1); buffer = XLogInitBufferForRedo(record, 1);
Assert(BufferGetBlockNumber(buffer) == SPGIST_ROOT_BLKNO); Assert(BufferGetBlockNumber(buffer) == SPGIST_ROOT_BLKNO);
SpGistInitBuffer(buffer, SPGIST_LEAF); SpGistInitBuffer(buffer, SPGIST_LEAF);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
MarkBufferDirty(buffer); MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
@ -96,7 +96,7 @@ spgRedoCreateIndex(XLogReaderState *record)
buffer = XLogInitBufferForRedo(record, 2); buffer = XLogInitBufferForRedo(record, 2);
Assert(BufferGetBlockNumber(buffer) == SPGIST_NULL_BLKNO); Assert(BufferGetBlockNumber(buffer) == SPGIST_NULL_BLKNO);
SpGistInitBuffer(buffer, SPGIST_LEAF | SPGIST_NULLS); SpGistInitBuffer(buffer, SPGIST_LEAF | SPGIST_NULLS);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
PageSetLSN(page, lsn); PageSetLSN(page, lsn);
MarkBufferDirty(buffer); MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
@ -136,7 +136,7 @@ spgRedoAddLeaf(XLogReaderState *record)
if (action == BLK_NEEDS_REDO) if (action == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* insert new tuple */ /* insert new tuple */
if (xldata->offnumLeaf != xldata->offnumHeadLeaf) if (xldata->offnumLeaf != xldata->offnumHeadLeaf)
@ -183,7 +183,7 @@ spgRedoAddLeaf(XLogReaderState *record)
XLogRecGetBlockTag(record, 0, NULL, NULL, &blknoLeaf); XLogRecGetBlockTag(record, 0, NULL, NULL, &blknoLeaf);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
tuple = (SpGistInnerTuple) PageGetItem(page, tuple = (SpGistInnerTuple) PageGetItem(page,
PageGetItemId(page, xldata->offnumParent)); PageGetItemId(page, xldata->offnumParent));
@ -249,7 +249,7 @@ spgRedoMoveLeafs(XLogReaderState *record)
{ {
int i; int i;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
for (i = 0; i < nInsert; i++) for (i = 0; i < nInsert; i++)
{ {
@ -278,7 +278,7 @@ spgRedoMoveLeafs(XLogReaderState *record)
/* Delete tuples from the source page, inserting a redirection pointer */ /* Delete tuples from the source page, inserting a redirection pointer */
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
spgPageIndexMultiDelete(&state, page, toDelete, xldata->nMoves, spgPageIndexMultiDelete(&state, page, toDelete, xldata->nMoves,
state.isBuild ? SPGIST_PLACEHOLDER : SPGIST_REDIRECT, state.isBuild ? SPGIST_PLACEHOLDER : SPGIST_REDIRECT,
@ -297,7 +297,7 @@ spgRedoMoveLeafs(XLogReaderState *record)
{ {
SpGistInnerTuple tuple; SpGistInnerTuple tuple;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
tuple = (SpGistInnerTuple) PageGetItem(page, tuple = (SpGistInnerTuple) PageGetItem(page,
PageGetItemId(page, xldata->offnumParent)); PageGetItemId(page, xldata->offnumParent));
@ -338,7 +338,7 @@ spgRedoAddNode(XLogReaderState *record)
Assert(xldata->parentBlk == -1); Assert(xldata->parentBlk == -1);
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
PageIndexTupleDelete(page, xldata->offnum); PageIndexTupleDelete(page, xldata->offnum);
if (PageAddItem(page, (Item) innerTuple, innerTupleHdr.size, if (PageAddItem(page, (Item) innerTuple, innerTupleHdr.size,
@ -381,7 +381,7 @@ spgRedoAddNode(XLogReaderState *record)
action = XLogReadBufferForRedo(record, 1, &buffer); action = XLogReadBufferForRedo(record, 1, &buffer);
if (action == BLK_NEEDS_REDO) if (action == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
addOrReplaceTuple(page, (Item) innerTuple, addOrReplaceTuple(page, (Item) innerTuple,
innerTupleHdr.size, xldata->offnumNew); innerTupleHdr.size, xldata->offnumNew);
@ -410,7 +410,7 @@ spgRedoAddNode(XLogReaderState *record)
{ {
SpGistDeadTuple dt; SpGistDeadTuple dt;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (state.isBuild) if (state.isBuild)
dt = spgFormDeadTuple(&state, SPGIST_PLACEHOLDER, dt = spgFormDeadTuple(&state, SPGIST_PLACEHOLDER,
@ -462,7 +462,7 @@ spgRedoAddNode(XLogReaderState *record)
{ {
SpGistInnerTuple parentTuple; SpGistInnerTuple parentTuple;
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
parentTuple = (SpGistInnerTuple) PageGetItem(page, parentTuple = (SpGistInnerTuple) PageGetItem(page,
PageGetItemId(page, xldata->offnumParent)); PageGetItemId(page, xldata->offnumParent));
@ -522,7 +522,7 @@ spgRedoSplitTuple(XLogReaderState *record)
action = XLogReadBufferForRedo(record, 1, &buffer); action = XLogReadBufferForRedo(record, 1, &buffer);
if (action == BLK_NEEDS_REDO) if (action == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
addOrReplaceTuple(page, (Item) postfixTuple, addOrReplaceTuple(page, (Item) postfixTuple,
postfixTupleHdr.size, xldata->offnumPostfix); postfixTupleHdr.size, xldata->offnumPostfix);
@ -537,7 +537,7 @@ spgRedoSplitTuple(XLogReaderState *record)
/* now handle the original page */ /* now handle the original page */
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
PageIndexTupleDelete(page, xldata->offnumPrefix); PageIndexTupleDelete(page, xldata->offnumPrefix);
if (PageAddItem(page, (Item) prefixTuple, prefixTupleHdr.size, if (PageAddItem(page, (Item) prefixTuple, prefixTupleHdr.size,
@ -608,7 +608,7 @@ spgRedoPickSplit(XLogReaderState *record)
{ {
/* just re-init the source page */ /* just re-init the source page */
srcBuffer = XLogInitBufferForRedo(record, 0); srcBuffer = XLogInitBufferForRedo(record, 0);
srcPage = BufferGetPage(srcBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); srcPage = (Page) BufferGetPage(srcBuffer);
SpGistInitBuffer(srcBuffer, SpGistInitBuffer(srcBuffer,
SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0)); SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0));
@ -625,7 +625,7 @@ spgRedoPickSplit(XLogReaderState *record)
srcPage = NULL; srcPage = NULL;
if (XLogReadBufferForRedo(record, 0, &srcBuffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &srcBuffer) == BLK_NEEDS_REDO)
{ {
srcPage = BufferGetPage(srcBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); srcPage = BufferGetPage(srcBuffer);
/* /*
* We have it a bit easier here than in doPickSplit(), because we * We have it a bit easier here than in doPickSplit(), because we
@ -661,8 +661,7 @@ spgRedoPickSplit(XLogReaderState *record)
{ {
/* just re-init the dest page */ /* just re-init the dest page */
destBuffer = XLogInitBufferForRedo(record, 1); destBuffer = XLogInitBufferForRedo(record, 1);
destPage = BufferGetPage(destBuffer, NULL, NULL, destPage = (Page) BufferGetPage(destBuffer);
BGP_NO_SNAPSHOT_TEST);
SpGistInitBuffer(destBuffer, SpGistInitBuffer(destBuffer,
SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0)); SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0));
@ -675,8 +674,7 @@ spgRedoPickSplit(XLogReaderState *record)
* full-page-image case, but for safety let's hold it till later. * full-page-image case, but for safety let's hold it till later.
*/ */
if (XLogReadBufferForRedo(record, 1, &destBuffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 1, &destBuffer) == BLK_NEEDS_REDO)
destPage = BufferGetPage(destBuffer, NULL, NULL, destPage = (Page) BufferGetPage(destBuffer);
BGP_NO_SNAPSHOT_TEST);
else else
destPage = NULL; /* don't do any page updates */ destPage = NULL; /* don't do any page updates */
} }
@ -724,7 +722,7 @@ spgRedoPickSplit(XLogReaderState *record)
if (action == BLK_NEEDS_REDO) if (action == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(innerBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(innerBuffer);
addOrReplaceTuple(page, (Item) innerTuple, innerTupleHdr.size, addOrReplaceTuple(page, (Item) innerTuple, innerTupleHdr.size,
xldata->offnumInner); xldata->offnumInner);
@ -764,8 +762,7 @@ spgRedoPickSplit(XLogReaderState *record)
{ {
SpGistInnerTuple parent; SpGistInnerTuple parent;
page = BufferGetPage(parentBuffer, NULL, NULL, page = BufferGetPage(parentBuffer);
BGP_NO_SNAPSHOT_TEST);
parent = (SpGistInnerTuple) PageGetItem(page, parent = (SpGistInnerTuple) PageGetItem(page,
PageGetItemId(page, xldata->offnumParent)); PageGetItemId(page, xldata->offnumParent));
@ -816,7 +813,7 @@ spgRedoVacuumLeaf(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
spgPageIndexMultiDelete(&state, page, spgPageIndexMultiDelete(&state, page,
toDead, xldata->nDead, toDead, xldata->nDead,
@ -879,7 +876,7 @@ spgRedoVacuumRoot(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
/* The tuple numbers are in order */ /* The tuple numbers are in order */
PageIndexMultiDelete(page, toDelete, xldata->nDelete); PageIndexMultiDelete(page, toDelete, xldata->nDelete);
@ -920,8 +917,7 @@ spgRedoVacuumRedirect(XLogReaderState *record)
if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, Page page = BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
SpGistPageOpaque opaque = SpGistPageGetOpaque(page); SpGistPageOpaque opaque = SpGistPageGetOpaque(page);
int i; int i;

View File

@ -298,9 +298,7 @@ GenericXLogRegisterBuffer(GenericXLogState *state, Buffer buffer, int flags)
/* Empty slot, so use it (there cannot be a match later) */ /* Empty slot, so use it (there cannot be a match later) */
page->buffer = buffer; page->buffer = buffer;
page->flags = flags; page->flags = flags;
memcpy(page->image, memcpy(page->image, BufferGetPage(buffer), BLCKSZ);
BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST),
BLCKSZ);
return (Page) page->image; return (Page) page->image;
} }
else if (page->buffer == buffer) else if (page->buffer == buffer)
@ -345,8 +343,7 @@ GenericXLogFinish(GenericXLogState *state)
if (BufferIsInvalid(pageData->buffer)) if (BufferIsInvalid(pageData->buffer))
continue; continue;
page = BufferGetPage(pageData->buffer, NULL, NULL, page = BufferGetPage(pageData->buffer);
BGP_NO_SNAPSHOT_TEST);
pageHeader = (PageHeader) pageData->image; pageHeader = (PageHeader) pageData->image;
if (pageData->flags & GENERIC_XLOG_FULL_IMAGE) if (pageData->flags & GENERIC_XLOG_FULL_IMAGE)
@ -399,8 +396,7 @@ GenericXLogFinish(GenericXLogState *state)
if (BufferIsInvalid(pageData->buffer)) if (BufferIsInvalid(pageData->buffer))
continue; continue;
PageSetLSN(BufferGetPage(pageData->buffer, NULL, NULL, PageSetLSN(BufferGetPage(pageData->buffer), lsn);
BGP_NO_SNAPSHOT_TEST), lsn);
MarkBufferDirty(pageData->buffer); MarkBufferDirty(pageData->buffer);
} }
END_CRIT_SECTION(); END_CRIT_SECTION();
@ -415,8 +411,7 @@ GenericXLogFinish(GenericXLogState *state)
if (BufferIsInvalid(pageData->buffer)) if (BufferIsInvalid(pageData->buffer))
continue; continue;
memcpy(BufferGetPage(pageData->buffer, NULL, NULL, memcpy(BufferGetPage(pageData->buffer),
BGP_NO_SNAPSHOT_TEST),
pageData->image, pageData->image,
BLCKSZ); BLCKSZ);
/* We don't worry about zeroing the "hole" in this case */ /* We don't worry about zeroing the "hole" in this case */
@ -502,8 +497,7 @@ generic_redo(XLogReaderState *record)
char *blockDelta; char *blockDelta;
Size blockDeltaSize; Size blockDeltaSize;
page = BufferGetPage(buffers[block_id], NULL, NULL, page = BufferGetPage(buffers[block_id]);
BGP_NO_SNAPSHOT_TEST);
blockDelta = XLogRecGetBlockData(record, block_id, &blockDeltaSize); blockDelta = XLogRecGetBlockData(record, block_id, &blockDeltaSize);
applyPageRedo(page, blockDelta, blockDeltaSize); applyPageRedo(page, blockDelta, blockDeltaSize);

View File

@ -228,7 +228,7 @@ XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
regbuf = &registered_buffers[block_id]; regbuf = &registered_buffers[block_id];
BufferGetTag(buffer, &regbuf->rnode, &regbuf->forkno, &regbuf->block); BufferGetTag(buffer, &regbuf->rnode, &regbuf->forkno, &regbuf->block);
regbuf->page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); regbuf->page = BufferGetPage(buffer);
regbuf->flags = flags; regbuf->flags = flags;
regbuf->rdata_tail = (XLogRecData *) &regbuf->rdata_head; regbuf->rdata_tail = (XLogRecData *) &regbuf->rdata_head;
regbuf->rdata_len = 0; regbuf->rdata_len = 0;
@ -825,7 +825,7 @@ XLogCheckBufferNeedsBackup(Buffer buffer)
GetFullPageWriteInfo(&RedoRecPtr, &doPageWrites); GetFullPageWriteInfo(&RedoRecPtr, &doPageWrites);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
if (doPageWrites && PageGetLSN(page) <= RedoRecPtr) if (doPageWrites && PageGetLSN(page) <= RedoRecPtr)
return true; /* buffer requires backup */ return true; /* buffer requires backup */
@ -896,7 +896,7 @@ XLogSaveBufferForHint(Buffer buffer, bool buffer_std)
if (buffer_std) if (buffer_std)
{ {
/* Assume we can omit data between pd_lower and pd_upper */ /* Assume we can omit data between pd_lower and pd_upper */
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
uint16 lower = ((PageHeader) page)->pd_lower; uint16 lower = ((PageHeader) page)->pd_lower;
uint16 upper = ((PageHeader) page)->pd_upper; uint16 upper = ((PageHeader) page)->pd_upper;
@ -973,7 +973,7 @@ log_newpage(RelFileNode *rnode, ForkNumber forkNum, BlockNumber blkno,
XLogRecPtr XLogRecPtr
log_newpage_buffer(Buffer buffer, bool page_std) log_newpage_buffer(Buffer buffer, bool page_std)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
RelFileNode rnode; RelFileNode rnode;
ForkNumber forkNum; ForkNumber forkNum;
BlockNumber blkno; BlockNumber blkno;

View File

@ -358,7 +358,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record,
{ {
*buf = XLogReadBufferExtended(rnode, forknum, blkno, *buf = XLogReadBufferExtended(rnode, forknum, blkno,
get_cleanup_lock ? RBM_ZERO_AND_CLEANUP_LOCK : RBM_ZERO_AND_LOCK); get_cleanup_lock ? RBM_ZERO_AND_CLEANUP_LOCK : RBM_ZERO_AND_LOCK);
page = BufferGetPage(*buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(*buf);
if (!RestoreBlockImage(record, block_id, page)) if (!RestoreBlockImage(record, block_id, page))
elog(ERROR, "failed to restore block image"); elog(ERROR, "failed to restore block image");
@ -396,8 +396,7 @@ XLogReadBufferForRedoExtended(XLogReaderState *record,
else else
LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
} }
if (lsn <= PageGetLSN(BufferGetPage(*buf, NULL, NULL, if (lsn <= PageGetLSN(BufferGetPage(*buf)))
BGP_NO_SNAPSHOT_TEST)))
return BLK_DONE; return BLK_DONE;
else else
return BLK_NEEDS_REDO; return BLK_NEEDS_REDO;
@ -503,8 +502,7 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum,
if (mode == RBM_NORMAL) if (mode == RBM_NORMAL)
{ {
/* check that page has been initialized */ /* check that page has been initialized */
Page page = BufferGetPage(buffer, NULL, NULL, Page page = (Page) BufferGetPage(buffer);
BGP_NO_SNAPSHOT_TEST);
/* /*
* We assume that PageIsNew is safe without a lock. During recovery, * We assume that PageIsNew is safe without a lock. During recovery,

View File

@ -2306,7 +2306,7 @@ IndexBuildHeapRangeScan(Relation heapRelation,
*/ */
if (scan->rs_cblock != root_blkno) if (scan->rs_cblock != root_blkno)
{ {
Page page = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(scan->rs_cbuf);
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
heap_get_root_tuples(page, root_offsets); heap_get_root_tuples(page, root_offsets);
@ -3016,7 +3016,7 @@ validate_index_heapscan(Relation heapRelation,
*/ */
if (scan->rs_cblock != root_blkno) if (scan->rs_cblock != root_blkno)
{ {
Page page = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(scan->rs_cbuf);
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
heap_get_root_tuples(page, root_offsets); heap_get_root_tuples(page, root_offsets);

View File

@ -1025,7 +1025,7 @@ acquire_sample_rows(Relation onerel, int elevel,
targbuffer = ReadBufferExtended(onerel, MAIN_FORKNUM, targblock, targbuffer = ReadBufferExtended(onerel, MAIN_FORKNUM, targblock,
RBM_NORMAL, vac_strategy); RBM_NORMAL, vac_strategy);
LockBuffer(targbuffer, BUFFER_LOCK_SHARE); LockBuffer(targbuffer, BUFFER_LOCK_SHARE);
targpage = BufferGetPage(targbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); targpage = BufferGetPage(targbuffer);
maxoffset = PageGetMaxOffsetNumber(targpage); maxoffset = PageGetMaxOffsetNumber(targpage);
/* Inner loop over all tuples on the selected page */ /* Inner loop over all tuples on the selected page */

View File

@ -337,7 +337,7 @@ fill_seq_with_data(Relation rel, HeapTuple tuple)
buf = ReadBuffer(rel, P_NEW); buf = ReadBuffer(rel, P_NEW);
Assert(BufferGetBlockNumber(buf) == 0); Assert(BufferGetBlockNumber(buf) == 0);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
PageInit(page, BufferGetPageSize(buf), sizeof(sequence_magic)); PageInit(page, BufferGetPageSize(buf), sizeof(sequence_magic));
sm = (sequence_magic *) PageGetSpecialPointer(page); sm = (sequence_magic *) PageGetSpecialPointer(page);
@ -462,7 +462,7 @@ AlterSequence(AlterSeqStmt *stmt)
{ {
xl_seq_rec xlrec; xl_seq_rec xlrec;
XLogRecPtr recptr; XLogRecPtr recptr;
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
XLogBeginInsert(); XLogBeginInsert();
XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT); XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
@ -584,7 +584,7 @@ nextval_internal(Oid relid)
/* lock page' buffer and read tuple */ /* lock page' buffer and read tuple */
seq = read_seq_tuple(elm, seqrel, &buf, &seqtuple); seq = read_seq_tuple(elm, seqrel, &buf, &seqtuple);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
last = next = result = seq->last_value; last = next = result = seq->last_value;
incby = seq->increment_by; incby = seq->increment_by;
@ -923,7 +923,7 @@ do_setval(Oid relid, int64 next, bool iscalled)
{ {
xl_seq_rec xlrec; xl_seq_rec xlrec;
XLogRecPtr recptr; XLogRecPtr recptr;
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
XLogBeginInsert(); XLogBeginInsert();
XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT); XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
@ -1115,7 +1115,7 @@ read_seq_tuple(SeqTable elm, Relation rel, Buffer *buf, HeapTuple seqtuple)
*buf = ReadBuffer(rel, 0); *buf = ReadBuffer(rel, 0);
LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(*buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(*buf);
sm = (sequence_magic *) PageGetSpecialPointer(page); sm = (sequence_magic *) PageGetSpecialPointer(page);
if (sm->magic != SEQ_MAGIC) if (sm->magic != SEQ_MAGIC)
@ -1591,7 +1591,7 @@ seq_redo(XLogReaderState *record)
elog(PANIC, "seq_redo: unknown op code %u", info); elog(PANIC, "seq_redo: unknown op code %u", info);
buffer = XLogInitBufferForRedo(record, 0); buffer = XLogInitBufferForRedo(record, 0);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(buffer);
/* /*
* We always reinit the page. However, since this WAL record type is also * We always reinit the page. However, since this WAL record type is also

View File

@ -2798,7 +2798,7 @@ ltrmark:;
*/ */
LockBuffer(buffer, BUFFER_LOCK_SHARE); LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buffer);
lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid)); lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid));
Assert(ItemIdIsNormal(lp)); Assert(ItemIdIsNormal(lp));

View File

@ -803,7 +803,7 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
vacrelstats->scanned_pages++; vacrelstats->scanned_pages++;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (PageIsNew(page)) if (PageIsNew(page))
{ {
@ -1378,7 +1378,7 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats)
&vmbuffer); &vmbuffer);
/* Now that we've compacted the page, record its available space */ /* Now that we've compacted the page, record its available space */
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
freespace = PageGetHeapFreeSpace(page); freespace = PageGetHeapFreeSpace(page);
UnlockReleaseBuffer(buf); UnlockReleaseBuffer(buf);
@ -1414,7 +1414,7 @@ static int
lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer, lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
int tupindex, LVRelStats *vacrelstats, Buffer *vmbuffer) int tupindex, LVRelStats *vacrelstats, Buffer *vmbuffer)
{ {
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
OffsetNumber unused[MaxOffsetNumber]; OffsetNumber unused[MaxOffsetNumber];
int uncnt = 0; int uncnt = 0;
TransactionId visibility_cutoff_xid; TransactionId visibility_cutoff_xid;
@ -1511,7 +1511,7 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
static bool static bool
lazy_check_needs_freeze(Buffer buf, bool *hastup) lazy_check_needs_freeze(Buffer buf, bool *hastup)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
OffsetNumber offnum, OffsetNumber offnum,
maxoff; maxoff;
HeapTupleHeader tupleheader; HeapTupleHeader tupleheader;
@ -1864,7 +1864,7 @@ count_nondeletable_pages(Relation onerel, LVRelStats *vacrelstats)
/* In this phase we only need shared access to the buffer */ /* In this phase we only need shared access to the buffer */
LockBuffer(buf, BUFFER_LOCK_SHARE); LockBuffer(buf, BUFFER_LOCK_SHARE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (PageIsNew(page) || PageIsEmpty(page)) if (PageIsNew(page) || PageIsEmpty(page))
{ {
@ -2032,7 +2032,7 @@ heap_page_is_all_visible(Relation rel, Buffer buf,
TransactionId *visibility_cutoff_xid, TransactionId *visibility_cutoff_xid,
bool *all_frozen) bool *all_frozen)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
BlockNumber blockno = BufferGetBlockNumber(buf); BlockNumber blockno = BufferGetBlockNumber(buf);
OffsetNumber offnum, OffsetNumber offnum,
maxoff; maxoff;

View File

@ -257,7 +257,7 @@ BitmapHeapNext(BitmapHeapScanState *node)
* Okay to fetch the tuple * Okay to fetch the tuple
*/ */
targoffset = scan->rs_vistuples[scan->rs_cindex]; targoffset = scan->rs_vistuples[scan->rs_cindex];
dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); dp = (Page) BufferGetPage(scan->rs_cbuf);
lp = PageGetItemId(dp, targoffset); lp = PageGetItemId(dp, targoffset);
Assert(ItemIdIsNormal(lp)); Assert(ItemIdIsNormal(lp));
@ -375,7 +375,7 @@ bitgetpage(HeapScanDesc scan, TBMIterateResult *tbmres)
* Bitmap is lossy, so we must examine each item pointer on the page. * Bitmap is lossy, so we must examine each item pointer on the page.
* But we can ignore HOT chains, since we'll check each tuple anyway. * But we can ignore HOT chains, since we'll check each tuple anyway.
*/ */
Page dp = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page dp = (Page) BufferGetPage(buffer);
OffsetNumber maxoff = PageGetMaxOffsetNumber(dp); OffsetNumber maxoff = PageGetMaxOffsetNumber(dp);
OffsetNumber offnum; OffsetNumber offnum;

View File

@ -435,7 +435,7 @@ tablesample_getnext(SampleScanState *scanstate)
if (!pagemode) if (!pagemode)
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
page = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(scan->rs_cbuf);
all_visible = PageIsAllVisible(page) && !snapshot->takenDuringRecovery; all_visible = PageIsAllVisible(page) && !snapshot->takenDuringRecovery;
maxoffset = PageGetMaxOffsetNumber(page); maxoffset = PageGetMaxOffsetNumber(page);
@ -546,7 +546,7 @@ tablesample_getnext(SampleScanState *scanstate)
if (!pagemode) if (!pagemode)
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
page = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = (Page) BufferGetPage(scan->rs_cbuf);
all_visible = PageIsAllVisible(page) && !snapshot->takenDuringRecovery; all_visible = PageIsAllVisible(page) && !snapshot->takenDuringRecovery;
maxoffset = PageGetMaxOffsetNumber(page); maxoffset = PageGetMaxOffsetNumber(page);
} }

View File

@ -2815,7 +2815,7 @@ XLogRecPtr
BufferGetLSNAtomic(Buffer buffer) BufferGetLSNAtomic(Buffer buffer)
{ {
BufferDesc *bufHdr = GetBufferDescriptor(buffer - 1); BufferDesc *bufHdr = GetBufferDescriptor(buffer - 1);
char *page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); char *page = BufferGetPage(buffer);
XLogRecPtr lsn; XLogRecPtr lsn;
uint32 buf_state; uint32 buf_state;
@ -3362,7 +3362,7 @@ void
MarkBufferDirtyHint(Buffer buffer, bool buffer_std) MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
{ {
BufferDesc *bufHdr; BufferDesc *bufHdr;
Page page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buffer);
if (!BufferIsValid(buffer)) if (!BufferIsValid(buffer))
elog(ERROR, "bad buffer ID: %d", buffer); elog(ERROR, "bad buffer ID: %d", buffer);
@ -4288,10 +4288,8 @@ IssuePendingWritebacks(WritebackContext *context)
* This test generally needs to be performed after every BufferGetPage() call * This test generally needs to be performed after every BufferGetPage() call
* that is executed as part of a scan. It is not needed for calls made for * that is executed as part of a scan. It is not needed for calls made for
* modifying the page (for example, to position to the right place to insert a * modifying the page (for example, to position to the right place to insert a
* new index tuple or for vacuuming). To minimize errors of omission, the * new index tuple or for vacuuming). It may also be omitted where calls to
* BufferGetPage() macro accepts parameters to specify whether the test should * lower-level functions will have already performed the test.
* be run, and supply the necessary snapshot and relation parameters. See the
* declaration of BufferGetPage() for more details.
* *
* Note that a NULL snapshot argument is allowed and causes a fast return * Note that a NULL snapshot argument is allowed and causes a fast return
* without error; this is to support call sites which can be called from * without error; this is to support call sites which can be called from

View File

@ -253,7 +253,7 @@ XLogRecordPageWithFreeSpace(RelFileNode rnode, BlockNumber heapBlk,
buf = XLogReadBufferExtended(rnode, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR); buf = XLogReadBufferExtended(rnode, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR);
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (PageIsNew(page)) if (PageIsNew(page))
PageInit(page, BLCKSZ, 0); PageInit(page, BLCKSZ, 0);
@ -280,8 +280,7 @@ GetRecordedFreeSpace(Relation rel, BlockNumber heapBlk)
buf = fsm_readbuf(rel, addr, false); buf = fsm_readbuf(rel, addr, false);
if (!BufferIsValid(buf)) if (!BufferIsValid(buf))
return 0; return 0;
cat = fsm_get_avail(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST), cat = fsm_get_avail(BufferGetPage(buf), slot);
slot);
ReleaseBuffer(buf); ReleaseBuffer(buf);
return fsm_space_cat_to_avail(cat); return fsm_space_cat_to_avail(cat);
@ -328,9 +327,7 @@ FreeSpaceMapTruncateRel(Relation rel, BlockNumber nblocks)
if (!BufferIsValid(buf)) if (!BufferIsValid(buf))
return; /* nothing to do; the FSM was already smaller */ return; /* nothing to do; the FSM was already smaller */
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
fsm_truncate_avail(BufferGetPage(buf, NULL, NULL, fsm_truncate_avail(BufferGetPage(buf), first_removed_slot);
BGP_NO_SNAPSHOT_TEST),
first_removed_slot);
MarkBufferDirtyHint(buf, false); MarkBufferDirtyHint(buf, false);
UnlockReleaseBuffer(buf); UnlockReleaseBuffer(buf);
@ -580,9 +577,8 @@ fsm_readbuf(Relation rel, FSMAddress addr, bool extend)
* headers, for example. * headers, for example.
*/ */
buf = ReadBufferExtended(rel, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR, NULL); buf = ReadBufferExtended(rel, FSM_FORKNUM, blkno, RBM_ZERO_ON_ERROR, NULL);
if (PageIsNew(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST))) if (PageIsNew(BufferGetPage(buf)))
PageInit(BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST), PageInit(BufferGetPage(buf), BLCKSZ, 0);
BLCKSZ, 0);
return buf; return buf;
} }
@ -661,7 +657,7 @@ fsm_set_and_search(Relation rel, FSMAddress addr, uint16 slot,
buf = fsm_readbuf(rel, addr, true); buf = fsm_readbuf(rel, addr, true);
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
if (fsm_set_avail(page, slot, newValue)) if (fsm_set_avail(page, slot, newValue))
MarkBufferDirtyHint(buf, false); MarkBufferDirtyHint(buf, false);
@ -705,9 +701,7 @@ fsm_search(Relation rel, uint8 min_cat)
(addr.level == FSM_BOTTOM_LEVEL), (addr.level == FSM_BOTTOM_LEVEL),
false); false);
if (slot == -1) if (slot == -1)
max_avail = max_avail = fsm_get_max_avail(BufferGetPage(buf));
fsm_get_max_avail(BufferGetPage(buf, NULL, NULL,
BGP_NO_SNAPSHOT_TEST));
UnlockReleaseBuffer(buf); UnlockReleaseBuffer(buf);
} }
else else
@ -789,7 +783,7 @@ fsm_vacuum_page(Relation rel, FSMAddress addr, bool *eof_p)
else else
*eof_p = false; *eof_p = false;
page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); page = BufferGetPage(buf);
/* /*
* Recurse into children, and fix the information stored about them at * Recurse into children, and fix the information stored about them at
@ -816,17 +810,14 @@ fsm_vacuum_page(Relation rel, FSMAddress addr, bool *eof_p)
if (fsm_get_avail(page, slot) != child_avail) if (fsm_get_avail(page, slot) != child_avail)
{ {
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
fsm_set_avail(BufferGetPage(buf, NULL, NULL, fsm_set_avail(BufferGetPage(buf), slot, child_avail);
BGP_NO_SNAPSHOT_TEST),
slot, child_avail);
MarkBufferDirtyHint(buf, false); MarkBufferDirtyHint(buf, false);
LockBuffer(buf, BUFFER_LOCK_UNLOCK); LockBuffer(buf, BUFFER_LOCK_UNLOCK);
} }
} }
} }
max_avail = fsm_get_max_avail(BufferGetPage(buf, NULL, NULL, max_avail = fsm_get_max_avail(BufferGetPage(buf));
BGP_NO_SNAPSHOT_TEST));
/* /*
* Reset the next slot pointer. This encourages the use of low-numbered * Reset the next slot pointer. This encourages the use of low-numbered

View File

@ -158,7 +158,7 @@ int
fsm_search_avail(Buffer buf, uint8 minvalue, bool advancenext, fsm_search_avail(Buffer buf, uint8 minvalue, bool advancenext,
bool exclusive_lock_held) bool exclusive_lock_held)
{ {
Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Page page = BufferGetPage(buf);
FSMPage fsmpage = (FSMPage) PageGetContents(page); FSMPage fsmpage = (FSMPage) PageGetContents(page);
int nodeno; int nodeno;
int target; int target;

View File

@ -48,19 +48,6 @@ typedef enum
* replay; otherwise same as RBM_NORMAL */ * replay; otherwise same as RBM_NORMAL */
} ReadBufferMode; } ReadBufferMode;
/*
* Forced choice for whether BufferGetPage() must check snapshot age
*
* A scan must test for old snapshot, unless the test would be redundant (for
* example, to tests already made at a lower level on all code paths).
* Positioning for DML or vacuuming does not need this sort of test.
*/
typedef enum
{
BGP_NO_SNAPSHOT_TEST, /* Not used for scan, or is redundant */
BGP_TEST_FOR_OLD_SNAPSHOT /* Test for old snapshot is needed */
} BufferGetPageAgeTest;
/* forward declared, to avoid having to expose buf_internals.h here */ /* forward declared, to avoid having to expose buf_internals.h here */
struct WritebackContext; struct WritebackContext;
@ -177,6 +164,15 @@ extern PGDLLIMPORT int32 *LocalRefCount;
(Size)BLCKSZ \ (Size)BLCKSZ \
) )
/*
* BufferGetPage
* Returns the page associated with a buffer.
*
* When this is called as part of a scan, there may be a need for a nearby
* call to TestForOldSnapshot(). See the definition of that for details.
*/
#define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
/* /*
* prototypes for functions in bufmgr.c * prototypes for functions in bufmgr.c
*/ */
@ -261,26 +257,6 @@ extern void FreeAccessStrategy(BufferAccessStrategy strategy);
#ifndef FRONTEND #ifndef FRONTEND
/*
* BufferGetPage
* Returns the page associated with a buffer.
*
* For call sites where the check is not needed (which is the vast majority of
* them), the snapshot and relation parameters can, and generally should, be
* NULL.
*/
static inline Page
BufferGetPage(Buffer buffer, Snapshot snapshot, Relation relation,
BufferGetPageAgeTest agetest)
{
Page page = (Page) BufferGetBlock(buffer);
if (agetest == BGP_TEST_FOR_OLD_SNAPSHOT)
TestForOldSnapshot(snapshot, relation, page);
return page;
}
#endif /* FRONTEND */ #endif /* FRONTEND */
#endif /* BUFMGR_H */ #endif /* BUFMGR_H */