diff options
Diffstat (limited to 'src/backend/access/heap/heapam.c')
-rw-r--r-- | src/backend/access/heap/heapam.c | 108 |
1 files changed, 62 insertions, 46 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 34ba385748f..66b23540fe2 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -394,7 +394,7 @@ heapgetpage(HeapScanDesc scan, BlockNumber page) */ LockBuffer(buffer, BUFFER_LOCK_SHARE); - dp = (Page) BufferGetPage(buffer); + dp = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = PageGetMaxOffsetNumber(dp); ntup = 0; @@ -537,7 +537,7 @@ heapgettup(HeapScanDesc scan, LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = PageGetMaxOffsetNumber(dp); /* page and lineoff now reference the physically next tid */ @@ -582,7 +582,7 @@ heapgettup(HeapScanDesc scan, LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = PageGetMaxOffsetNumber(dp); if (!scan->rs_inited) @@ -616,7 +616,7 @@ heapgettup(HeapScanDesc scan, heapgetpage(scan, page); /* Since the tuple was previously fetched, needn't lock page here */ - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); lpp = PageGetItemId(dp, lineoff); Assert(ItemIdIsNormal(lpp)); @@ -745,7 +745,7 @@ heapgettup(HeapScanDesc scan, LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = PageGetMaxOffsetNumber((Page) dp); linesleft = lines; if (backward) @@ -832,7 +832,7 @@ heapgettup_pagemode(HeapScanDesc scan, lineindex = scan->rs_cindex + 1; } - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = scan->rs_ntuples; /* page and lineindex now reference the next visible tid */ @@ -875,7 +875,7 @@ heapgettup_pagemode(HeapScanDesc scan, page = scan->rs_cblock; /* current page */ } - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = scan->rs_ntuples; if (!scan->rs_inited) @@ -908,7 +908,7 @@ heapgettup_pagemode(HeapScanDesc scan, heapgetpage(scan, page); /* Since the tuple was previously fetched, needn't lock page here */ - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); lpp = PageGetItemId(dp, lineoff); Assert(ItemIdIsNormal(lpp)); @@ -1027,7 +1027,7 @@ heapgettup_pagemode(HeapScanDesc scan, heapgetpage(scan, page); - dp = (Page) BufferGetPage(scan->rs_cbuf); + dp = BufferGetPage(scan->rs_cbuf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lines = scan->rs_ntuples; linesleft = lines; if (backward) @@ -1871,7 +1871,7 @@ heap_fetch(Relation relation, * Need share lock on buffer to examine tuple commit status. */ LockBuffer(buffer, BUFFER_LOCK_SHARE); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* * We'd better check for out-of-range offnum in case of VACUUM since the @@ -1986,7 +1986,7 @@ heap_hot_search_buffer(ItemPointer tid, Relation relation, Buffer buffer, Snapshot snapshot, HeapTuple heapTuple, bool *all_dead, bool first_call) { - Page dp = (Page) BufferGetPage(buffer); + Page dp = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); TransactionId prev_xmax = InvalidTransactionId; OffsetNumber offnum; bool at_chain_start; @@ -2200,7 +2200,7 @@ heap_get_latest_tid(Relation relation, */ buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&ctid)); LockBuffer(buffer, BUFFER_LOCK_SHARE); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* * Check for bogus item number. This is not treated as an error @@ -2418,10 +2418,12 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, RelationPutHeapTuple(relation, buffer, heaptup, (options & HEAP_INSERT_SPECULATIVE) != 0); - if (PageIsAllVisible(BufferGetPage(buffer))) + if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST))) { all_visible_cleared = true; - PageClearAllVisible(BufferGetPage(buffer)); + PageClearAllVisible(BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)); visibilitymap_clear(relation, ItemPointerGetBlockNumber(&(heaptup->t_self)), vmbuffer); @@ -2446,7 +2448,8 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, xl_heap_insert xlrec; xl_heap_header xlhdr; XLogRecPtr recptr; - Page page = BufferGetPage(buffer); + Page page = BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); uint8 info = XLOG_HEAP_INSERT; int bufflags = 0; @@ -2705,7 +2708,7 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples, buffer = RelationGetBufferForTuple(relation, heaptuples[ndone]->t_len, InvalidBuffer, options, bistate, &vmbuffer, NULL); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* NO EREPORT(ERROR) from here till changes are logged */ START_CRIT_SECTION(); @@ -3019,7 +3022,7 @@ heap_delete(Relation relation, ItemPointer tid, block = ItemPointerGetBlockNumber(tid); buffer = ReadBuffer(relation, block); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* * Before locking the buffer, pin the visibility map page if it appears to @@ -3509,7 +3512,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, block = ItemPointerGetBlockNumber(otid); buffer = ReadBuffer(relation, block); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); /* * Before locking the buffer, pin the visibility map page if it appears to @@ -4110,17 +4113,22 @@ l2: oldtup.t_data->t_ctid = heaptup->t_self; /* clear PD_ALL_VISIBLE flags */ - if (PageIsAllVisible(BufferGetPage(buffer))) + if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST))) { all_visible_cleared = true; - PageClearAllVisible(BufferGetPage(buffer)); + PageClearAllVisible(BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)); visibilitymap_clear(relation, BufferGetBlockNumber(buffer), vmbuffer); } - if (newbuf != buffer && PageIsAllVisible(BufferGetPage(newbuf))) + if (newbuf != buffer && + PageIsAllVisible(BufferGetPage(newbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST))) { all_visible_cleared_new = true; - PageClearAllVisible(BufferGetPage(newbuf)); + PageClearAllVisible(BufferGetPage(newbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST)); visibilitymap_clear(relation, BufferGetBlockNumber(newbuf), vmbuffer_new); } @@ -4151,9 +4159,12 @@ l2: all_visible_cleared_new); if (newbuf != buffer) { - PageSetLSN(BufferGetPage(newbuf), recptr); + PageSetLSN(BufferGetPage(newbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST), + recptr); } - PageSetLSN(BufferGetPage(buffer), recptr); + PageSetLSN(BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST), + recptr); } END_CRIT_SECTION(); @@ -4517,7 +4528,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple, *buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE); - page = BufferGetPage(*buffer); + page = BufferGetPage(*buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid)); Assert(ItemIdIsNormal(lp)); @@ -5695,7 +5706,8 @@ l4: { xl_heap_lock_updated xlrec; XLogRecPtr recptr; - Page page = BufferGetPage(buf); + Page page = BufferGetPage(buf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); XLogBeginInsert(); XLogRegisterBuffer(0, buf, REGBUF_STANDARD); @@ -5802,7 +5814,7 @@ heap_finish_speculative(Relation relation, HeapTuple tuple) buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self))); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = ItemPointerGetOffsetNumber(&(tuple->t_self)); if (PageGetMaxOffsetNumber(page) >= offnum) @@ -5896,7 +5908,7 @@ heap_abort_speculative(Relation relation, HeapTuple tuple) block = ItemPointerGetBlockNumber(tid); buffer = ReadBuffer(relation, block); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); @@ -6043,7 +6055,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple) buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self))); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = ItemPointerGetOffsetNumber(&(tuple->t_self)); if (PageGetMaxOffsetNumber(page) >= offnum) @@ -7298,7 +7310,8 @@ log_heap_update(Relation reln, Buffer oldbuf, uint16 prefixlen = 0, suffixlen = 0; XLogRecPtr recptr; - Page page = BufferGetPage(newbuf); + Page page = BufferGetPage(newbuf, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); bool need_tuple_data = RelationIsLogicallyLogged(reln); bool init; int bufflags; @@ -7747,7 +7760,8 @@ heap_xlog_clean(XLogReaderState *record) &buffer); if (action == BLK_NEEDS_REDO) { - Page page = (Page) BufferGetPage(buffer); + Page page = BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); OffsetNumber *end; OffsetNumber *redirected; OffsetNumber *nowdead; @@ -7853,7 +7867,7 @@ heap_xlog_visible(XLogReaderState *record) * XLOG record's LSN, we mustn't mark the page all-visible, because * the subsequent update won't be replayed to clear the flag. */ - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); PageSetAllVisible(page); @@ -7879,7 +7893,8 @@ heap_xlog_visible(XLogReaderState *record) if (XLogReadBufferForRedoExtended(record, 0, RBM_ZERO_ON_ERROR, false, &vmbuffer) == BLK_NEEDS_REDO) { - Page vmpage = BufferGetPage(vmbuffer); + Page vmpage = BufferGetPage(vmbuffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); Relation reln; /* initialize the page if it was read as zeros */ @@ -7946,7 +7961,8 @@ heap_xlog_freeze_page(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - Page page = BufferGetPage(buffer); + Page page = BufferGetPage(buffer, NULL, NULL, + BGP_NO_SNAPSHOT_TEST); xl_heap_freeze_tuple *tuples; tuples = (xl_heap_freeze_tuple *) XLogRecGetBlockData(record, 0, NULL); @@ -8033,7 +8049,7 @@ heap_xlog_delete(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); if (PageGetMaxOffsetNumber(page) >= xlrec->offnum) lp = PageGetItemId(page, xlrec->offnum); @@ -8116,7 +8132,7 @@ heap_xlog_insert(XLogReaderState *record) if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) { buffer = XLogInitBufferForRedo(record, 0); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); PageInit(page, BufferGetPageSize(buffer), 0); action = BLK_NEEDS_REDO; } @@ -8127,7 +8143,7 @@ heap_xlog_insert(XLogReaderState *record) Size datalen; char *data; - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); if (PageGetMaxOffsetNumber(page) + 1 < xlrec->offnum) elog(PANIC, "invalid max offset number"); @@ -8232,7 +8248,7 @@ heap_xlog_multi_insert(XLogReaderState *record) if (isinit) { buffer = XLogInitBufferForRedo(record, 0); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); PageInit(page, BufferGetPageSize(buffer), 0); action = BLK_NEEDS_REDO; } @@ -8248,7 +8264,7 @@ heap_xlog_multi_insert(XLogReaderState *record) tupdata = XLogRecGetBlockData(record, 0, &len); endptr = tupdata + len; - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); for (i = 0; i < xlrec->ntuples; i++) { @@ -8399,7 +8415,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) &obuffer); if (oldaction == BLK_NEEDS_REDO) { - page = BufferGetPage(obuffer); + page = BufferGetPage(obuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->old_offnum; if (PageGetMaxOffsetNumber(page) >= offnum) lp = PageGetItemId(page, offnum); @@ -8446,7 +8462,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) else if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) { nbuffer = XLogInitBufferForRedo(record, 0); - page = (Page) BufferGetPage(nbuffer); + page = BufferGetPage(nbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); PageInit(page, BufferGetPageSize(nbuffer), 0); newaction = BLK_NEEDS_REDO; } @@ -8479,7 +8495,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) recdata = XLogRecGetBlockData(record, 0, &datalen); recdata_end = recdata + datalen; - page = BufferGetPage(nbuffer); + page = BufferGetPage(nbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->new_offnum; if (PageGetMaxOffsetNumber(page) + 1 < offnum) @@ -8609,7 +8625,7 @@ heap_xlog_confirm(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) @@ -8645,7 +8661,7 @@ heap_xlog_lock(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = (Page) BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) @@ -8695,7 +8711,7 @@ heap_xlog_lock_updated(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) @@ -8734,7 +8750,7 @@ heap_xlog_inplace(XLogReaderState *record) { char *newtup = XLogRecGetBlockData(record, 0, &newlen); - page = BufferGetPage(buffer); + page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) |