diff options
Diffstat (limited to 'src/backend/access/brin')
-rw-r--r-- | src/backend/access/brin/brin.c | 15 | ||||
-rw-r--r-- | src/backend/access/brin/brin_pageops.c | 52 | ||||
-rw-r--r-- | src/backend/access/brin/brin_revmap.c | 18 | ||||
-rw-r--r-- | src/backend/access/brin/brin_xlog.c | 16 |
4 files changed, 63 insertions, 38 deletions
diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index c7409529234..6f6f1b1b415 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -208,7 +208,8 @@ brininsert(Relation idxRel, Datum *values, bool *nulls, } else { - Page page = BufferGetPage(buf); + Page page = BufferGetPage(buf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); ItemId lp = PageGetItemId(page, off); Size origsz; BrinTuple *origtup; @@ -617,7 +618,8 @@ brinbuild(Relation heap, Relation index, IndexInfo *indexInfo) Assert(BufferGetBlockNumber(meta) == BRIN_METAPAGE_BLKNO); LockBuffer(meta, BUFFER_LOCK_EXCLUSIVE); - brin_metapage_init(BufferGetPage(meta), BrinGetPagesPerRange(index), + brin_metapage_init(BufferGetPage(meta, NULL, NULL, BGP_NO_SNAPSHOT_TEST), + BrinGetPagesPerRange(index), BRIN_CURRENT_VERSION); MarkBufferDirty(meta); @@ -636,7 +638,7 @@ brinbuild(Relation heap, Relation index, IndexInfo *indexInfo) recptr = XLogInsert(RM_BRIN_ID, XLOG_BRIN_CREATE_INDEX); - page = BufferGetPage(meta); + page = BufferGetPage(meta, NULL, NULL, BGP_NO_SNAPSHOT_TEST); PageSetLSN(page, recptr); } @@ -686,7 +688,9 @@ brinbuildempty(Relation index) /* Initialize and xlog metabuffer. */ START_CRIT_SECTION(); - brin_metapage_init(BufferGetPage(metabuf), BrinGetPagesPerRange(index), + brin_metapage_init(BufferGetPage(metabuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST), + BrinGetPagesPerRange(index), BRIN_CURRENT_VERSION); MarkBufferDirty(metabuf); log_newpage_buffer(metabuf, false); @@ -941,7 +945,8 @@ terminate_brin_buildstate(BrinBuildState *state) { Page page; - page = BufferGetPage(state->bs_currentInsertBuf); + page = BufferGetPage(state->bs_currentInsertBuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); RecordPageWithFreeSpace(state->bs_irel, BufferGetBlockNumber(state->bs_currentInsertBuf), PageGetFreeSpace(page)); diff --git a/src/backend/access/brin/brin_pageops.c b/src/backend/access/brin/brin_pageops.c index d0ca485caa6..a522b0b5dce 100644 --- a/src/backend/access/brin/brin_pageops.c +++ b/src/backend/access/brin/brin_pageops.c @@ -110,7 +110,7 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, newbuf = InvalidBuffer; extended = false; } - oldpage = BufferGetPage(oldbuf); + oldpage = BufferGetPage(oldbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); oldlp = PageGetItemId(oldpage, oldoff); /* @@ -228,7 +228,8 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, * Not enough free space on the oldpage. Put the new tuple on the new * page, and update the revmap. */ - Page newpage = BufferGetPage(newbuf); + Page newpage = BufferGetPage(newbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); Buffer revmapbuf; ItemPointerData newtid; OffsetNumber newoff; @@ -245,7 +246,9 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, * need to do that here. */ if (extended) - brin_page_init(BufferGetPage(newbuf), BRIN_PAGETYPE_REGULAR); + brin_page_init(BufferGetPage(newbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST), + BRIN_PAGETYPE_REGULAR); PageIndexDeleteNoCompact(oldpage, &oldoff, 1); newoff = PageAddItem(newpage, (Item) newtup, newsz, @@ -298,7 +301,9 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, PageSetLSN(oldpage, recptr); PageSetLSN(newpage, recptr); - PageSetLSN(BufferGetPage(revmapbuf), recptr); + PageSetLSN(BufferGetPage(revmapbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST), + recptr); } END_CRIT_SECTION(); @@ -326,7 +331,9 @@ brin_can_do_samepage_update(Buffer buffer, Size origsz, Size newsz) { return ((newsz <= origsz) || - PageGetExactFreeSpace(BufferGetPage(buffer)) >= (newsz - origsz)); + PageGetExactFreeSpace(BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)) + >= (newsz - origsz)); } /* @@ -381,7 +388,9 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, * it's still a regular page. */ LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE); - if (br_page_get_freespace(BufferGetPage(*buffer)) < itemsz) + if (br_page_get_freespace(BufferGetPage(*buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)) + < itemsz) { UnlockReleaseBuffer(*buffer); *buffer = InvalidBuffer; @@ -404,13 +413,15 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, /* Now obtain lock on revmap buffer */ revmapbuf = brinLockRevmapPageForUpdate(revmap, heapBlk); - page = BufferGetPage(*buffer); + page = BufferGetPage(*buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); blk = BufferGetBlockNumber(*buffer); /* Execute the actual insertion */ START_CRIT_SECTION(); if (extended) - brin_page_init(BufferGetPage(*buffer), BRIN_PAGETYPE_REGULAR); + brin_page_init(BufferGetPage(*buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST), + BRIN_PAGETYPE_REGULAR); off = PageAddItem(page, (Item) tup, itemsz, InvalidOffsetNumber, false, false); if (off == InvalidOffsetNumber) @@ -447,7 +458,8 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, recptr = XLogInsert(RM_BRIN_ID, info); PageSetLSN(page, recptr); - PageSetLSN(BufferGetPage(revmapbuf), recptr); + PageSetLSN(BufferGetPage(revmapbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST), recptr); } END_CRIT_SECTION(); @@ -515,7 +527,7 @@ brin_start_evacuating_page(Relation idxRel, Buffer buf) OffsetNumber maxoff; Page page; - page = BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); if (PageIsNew(page)) return false; @@ -551,7 +563,7 @@ brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange, OffsetNumber maxoff; Page page; - page = BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Assert(BrinPageFlags(page) & BRIN_EVACUATE_PAGE); @@ -598,7 +610,7 @@ brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange, bool brin_page_cleanup(Relation idxrel, Buffer buf) { - Page page = BufferGetPage(buf); + Page page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); Size freespace; /* @@ -627,8 +639,10 @@ brin_page_cleanup(Relation idxrel, Buffer buf) } /* Nothing to be done for non-regular index pages */ - if (BRIN_IS_META_PAGE(BufferGetPage(buf)) || - BRIN_IS_REVMAP_PAGE(BufferGetPage(buf))) + if (BRIN_IS_META_PAGE(BufferGetPage(buf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)) || + BRIN_IS_REVMAP_PAGE(BufferGetPage(buf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST))) return false; /* Measure free space and record it */ @@ -738,7 +752,8 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, if (BufferIsValid(oldbuf) && oldblk < newblk) { LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE); - if (!BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf))) + if (!BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST))) { LockBuffer(oldbuf, BUFFER_LOCK_UNLOCK); @@ -770,7 +785,7 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, if (extensionLockHeld) UnlockRelationForExtension(irel, ExclusiveLock); - page = BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* * We have a new buffer to insert into. Check that the new page has @@ -805,7 +820,8 @@ brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, if (BufferIsValid(oldbuf) && oldblk > newblk) { LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE); - Assert(BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf))); + Assert(BRIN_IS_REGULAR_PAGE(BufferGetPage(oldbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST))); } return buf; @@ -862,7 +878,7 @@ brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer) BufferGetBlockNumber(buffer))); START_CRIT_SECTION(); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); brin_page_init(page, BRIN_PAGETYPE_REGULAR); MarkBufferDirty(buffer); log_newpage_buffer(buffer, true); diff --git a/src/backend/access/brin/brin_revmap.c b/src/backend/access/brin/brin_revmap.c index b2c273daf6e..ce21cbabb7a 100644 --- a/src/backend/access/brin/brin_revmap.c +++ b/src/backend/access/brin/brin_revmap.c @@ -73,10 +73,12 @@ brinRevmapInitialize(Relation idxrel, BlockNumber *pagesPerRange) BrinRevmap *revmap; Buffer meta; BrinMetaPageData *metadata; + Page page; meta = ReadBuffer(idxrel, BRIN_METAPAGE_BLKNO); LockBuffer(meta, BUFFER_LOCK_SHARE); - metadata = (BrinMetaPageData *) PageGetContents(BufferGetPage(meta)); + page = BufferGetPage(meta, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + metadata = (BrinMetaPageData *) PageGetContents(page); revmap = palloc(sizeof(BrinRevmap)); revmap->rm_irel = idxrel; @@ -159,7 +161,7 @@ brinSetHeapBlockItemptr(Buffer buf, BlockNumber pagesPerRange, Page page; /* The correct page should already be pinned and locked */ - page = BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); contents = (RevmapContents *) PageGetContents(page); iptr = (ItemPointerData *) contents->rm_tids; iptr += HEAPBLK_TO_REVMAP_INDEX(pagesPerRange, heapBlk); @@ -226,7 +228,8 @@ brinGetTupleForHeapBlock(BrinRevmap *revmap, BlockNumber heapBlk, LockBuffer(revmap->rm_currBuf, BUFFER_LOCK_SHARE); contents = (RevmapContents *) - PageGetContents(BufferGetPage(revmap->rm_currBuf)); + PageGetContents(BufferGetPage(revmap->rm_currBuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)); iptr = contents->rm_tids; iptr += HEAPBLK_TO_REVMAP_INDEX(revmap->rm_pagesPerRange, heapBlk); @@ -261,7 +264,7 @@ brinGetTupleForHeapBlock(BrinRevmap *revmap, BlockNumber heapBlk, *buf = ReadBuffer(idxRel, blk); } LockBuffer(*buf, mode); - page = BufferGetPage(*buf); + page = BufferGetPage(*buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* If we land on a revmap page, start over */ if (BRIN_IS_REGULAR_PAGE(page)) @@ -393,7 +396,8 @@ revmap_physical_extend(BrinRevmap *revmap) * another backend can extend the index with regular BRIN pages. */ LockBuffer(revmap->rm_metaBuf, BUFFER_LOCK_EXCLUSIVE); - metapage = BufferGetPage(revmap->rm_metaBuf); + metapage = BufferGetPage(revmap->rm_metaBuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); metadata = (BrinMetaPageData *) PageGetContents(metapage); /* @@ -413,7 +417,7 @@ revmap_physical_extend(BrinRevmap *revmap) { buf = ReadBuffer(irel, mapBlk); LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); - page = BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); } else { @@ -436,7 +440,7 @@ revmap_physical_extend(BrinRevmap *revmap) return; } LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); - page = BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); if (needLock) UnlockRelationForExtension(irel, ExclusiveLock); diff --git a/src/backend/access/brin/brin_xlog.c b/src/backend/access/brin/brin_xlog.c index deb7af4ca6e..36e4a99fc10 100644 --- a/src/backend/access/brin/brin_xlog.c +++ b/src/backend/access/brin/brin_xlog.c @@ -30,7 +30,7 @@ brin_xlog_createidx(XLogReaderState *record) /* create the index' metapage */ buf = XLogInitBufferForRedo(record, 0); Assert(BufferIsValid(buf)); - page = (Page) BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); brin_metapage_init(page, xlrec->pagesPerRange, xlrec->version); PageSetLSN(page, lsn); MarkBufferDirty(buf); @@ -58,7 +58,7 @@ brin_xlog_insert_update(XLogReaderState *record, if (XLogRecGetInfo(record) & XLOG_BRIN_INIT_PAGE) { buffer = XLogInitBufferForRedo(record, 0); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); brin_page_init(page, BRIN_PAGETYPE_REGULAR); action = BLK_NEEDS_REDO; } @@ -81,7 +81,7 @@ brin_xlog_insert_update(XLogReaderState *record, Assert(tuple->bt_blkno == xlrec->heapBlk); - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) + 1 < offnum) elog(PANIC, "brin_xlog_insert_update: invalid max offset number"); @@ -103,7 +103,7 @@ brin_xlog_insert_update(XLogReaderState *record, ItemPointerData tid; ItemPointerSet(&tid, regpgno, xlrec->offnum); - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); brinSetHeapBlockItemptr(buffer, xlrec->pagesPerRange, xlrec->heapBlk, tid); @@ -145,7 +145,7 @@ brin_xlog_update(XLogReaderState *record) Page page; OffsetNumber offnum; - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->oldOffnum; if (PageGetMaxOffsetNumber(page) + 1 < offnum) @@ -186,7 +186,7 @@ brin_xlog_samepage_update(XLogReaderState *record) brintuple = (BrinTuple *) XLogRecGetBlockData(record, 0, &tuplen); - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) + 1 < offnum) @@ -232,7 +232,7 @@ brin_xlog_revmap_extend(XLogReaderState *record) Page metapg; BrinMetaPageData *metadata; - metapg = BufferGetPage(metabuf); + metapg = BufferGetPage(metabuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); metadata = (BrinMetaPageData *) PageGetContents(metapg); Assert(metadata->lastRevmapPage == xlrec->targetBlk - 1); @@ -248,7 +248,7 @@ brin_xlog_revmap_extend(XLogReaderState *record) */ buf = XLogInitBufferForRedo(record, 1); - page = (Page) BufferGetPage(buf); + page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); brin_page_init(page, BRIN_PAGETYPE_REVMAP); PageSetLSN(page, lsn); |