diff options
Diffstat (limited to 'src/backend/access/heap/heapam.c')
-rw-r--r-- | src/backend/access/heap/heapam.c | 128 |
1 files changed, 57 insertions, 71 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 29fd31a819d..950bfc8e364 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -394,8 +394,8 @@ heapgetpage(HeapScanDesc scan, BlockNumber page) */ LockBuffer(buffer, BUFFER_LOCK_SHARE); - dp = BufferGetPage(buffer, snapshot, scan->rs_rd, - BGP_TEST_FOR_OLD_SNAPSHOT); + dp = BufferGetPage(buffer); + TestForOldSnapshot(snapshot, scan->rs_rd, dp); lines = PageGetMaxOffsetNumber(dp); ntup = 0; @@ -538,7 +538,8 @@ heapgettup(HeapScanDesc scan, 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); /* page and lineoff now reference the physically next tid */ @@ -583,8 +584,8 @@ heapgettup(HeapScanDesc scan, 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); if (!scan->rs_inited) @@ -618,8 +619,8 @@ heapgettup(HeapScanDesc scan, heapgetpage(scan, page); /* Since the tuple was previously fetched, needn't lock page here */ - 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); lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); lpp = PageGetItemId(dp, lineoff); Assert(ItemIdIsNormal(lpp)); @@ -748,8 +749,8 @@ heapgettup(HeapScanDesc scan, 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((Page) dp); linesleft = lines; if (backward) @@ -836,8 +837,8 @@ heapgettup_pagemode(HeapScanDesc scan, lineindex = scan->rs_cindex + 1; } - dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, - BGP_TEST_FOR_OLD_SNAPSHOT); + dp = BufferGetPage(scan->rs_cbuf); + TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp); lines = scan->rs_ntuples; /* page and lineindex now reference the next visible tid */ @@ -880,8 +881,8 @@ heapgettup_pagemode(HeapScanDesc scan, page = scan->rs_cblock; /* current page */ } - dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, - BGP_TEST_FOR_OLD_SNAPSHOT); + dp = BufferGetPage(scan->rs_cbuf); + TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp); lines = scan->rs_ntuples; if (!scan->rs_inited) @@ -914,8 +915,8 @@ heapgettup_pagemode(HeapScanDesc scan, heapgetpage(scan, page); /* Since the tuple was previously fetched, needn't lock page here */ - dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, - BGP_TEST_FOR_OLD_SNAPSHOT); + dp = BufferGetPage(scan->rs_cbuf); + TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp); lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); lpp = PageGetItemId(dp, lineoff); Assert(ItemIdIsNormal(lpp)); @@ -1034,8 +1035,8 @@ heapgettup_pagemode(HeapScanDesc scan, heapgetpage(scan, page); - dp = BufferGetPage(scan->rs_cbuf, scan->rs_snapshot, scan->rs_rd, - BGP_TEST_FOR_OLD_SNAPSHOT); + dp = BufferGetPage(scan->rs_cbuf); + TestForOldSnapshot(scan->rs_snapshot, scan->rs_rd, dp); lines = scan->rs_ntuples; linesleft = lines; if (backward) @@ -1879,7 +1880,8 @@ heap_fetch(Relation relation, * Need share lock on buffer to examine tuple commit status. */ 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 @@ -1994,7 +1996,7 @@ heap_hot_search_buffer(ItemPointer tid, Relation relation, Buffer buffer, Snapshot snapshot, HeapTuple heapTuple, 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; OffsetNumber offnum; bool at_chain_start; @@ -2208,8 +2210,8 @@ heap_get_latest_tid(Relation relation, */ buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&ctid)); LockBuffer(buffer, BUFFER_LOCK_SHARE); - page = BufferGetPage(buffer, snapshot, relation, - BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buffer); + TestForOldSnapshot(snapshot, relation, page); /* * 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, (options & HEAP_INSERT_SPECULATIVE) != 0); - if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST))) + if (PageIsAllVisible(BufferGetPage(buffer))) { all_visible_cleared = true; - PageClearAllVisible(BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST)); + PageClearAllVisible(BufferGetPage(buffer)); visibilitymap_clear(relation, ItemPointerGetBlockNumber(&(heaptup->t_self)), vmbuffer); @@ -2457,8 +2457,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid, xl_heap_insert xlrec; xl_heap_header xlhdr; XLogRecPtr recptr; - Page page = BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST); + Page page = BufferGetPage(buffer); uint8 info = XLOG_HEAP_INSERT; int bufflags = 0; @@ -2717,7 +2716,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, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); /* NO EREPORT(ERROR) from here till changes are logged */ START_CRIT_SECTION(); @@ -3031,7 +3030,7 @@ heap_delete(Relation relation, ItemPointer tid, block = ItemPointerGetBlockNumber(tid); 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 @@ -3521,7 +3520,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, block = ItemPointerGetBlockNumber(otid); 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 @@ -4122,22 +4121,17 @@ l2: oldtup.t_data->t_ctid = heaptup->t_self; /* clear PD_ALL_VISIBLE flags */ - if (PageIsAllVisible(BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST))) + if (PageIsAllVisible(BufferGetPage(buffer))) { all_visible_cleared = true; - PageClearAllVisible(BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST)); + PageClearAllVisible(BufferGetPage(buffer)); visibilitymap_clear(relation, BufferGetBlockNumber(buffer), vmbuffer); } - if (newbuf != buffer && - PageIsAllVisible(BufferGetPage(newbuf, NULL, NULL, - BGP_NO_SNAPSHOT_TEST))) + if (newbuf != buffer && PageIsAllVisible(BufferGetPage(newbuf))) { all_visible_cleared_new = true; - PageClearAllVisible(BufferGetPage(newbuf, NULL, NULL, - BGP_NO_SNAPSHOT_TEST)); + PageClearAllVisible(BufferGetPage(newbuf)); visibilitymap_clear(relation, BufferGetBlockNumber(newbuf), vmbuffer_new); } @@ -4168,12 +4162,9 @@ l2: all_visible_cleared_new); if (newbuf != buffer) { - PageSetLSN(BufferGetPage(newbuf, NULL, NULL, - BGP_NO_SNAPSHOT_TEST), - recptr); + PageSetLSN(BufferGetPage(newbuf), recptr); } - PageSetLSN(BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST), - recptr); + PageSetLSN(BufferGetPage(buffer), recptr); } END_CRIT_SECTION(); @@ -4537,7 +4528,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple, *buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE); - page = BufferGetPage(*buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(*buffer); lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid)); Assert(ItemIdIsNormal(lp)); @@ -5715,8 +5706,7 @@ l4: { xl_heap_lock_updated xlrec; XLogRecPtr recptr; - Page page = BufferGetPage(buf, NULL, NULL, - BGP_NO_SNAPSHOT_TEST); + Page page = BufferGetPage(buf); XLogBeginInsert(); XLogRegisterBuffer(0, buf, REGBUF_STANDARD); @@ -5823,7 +5813,7 @@ heap_finish_speculative(Relation relation, HeapTuple tuple) buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self))); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = (Page) BufferGetPage(buffer); offnum = ItemPointerGetOffsetNumber(&(tuple->t_self)); if (PageGetMaxOffsetNumber(page) >= offnum) @@ -5917,7 +5907,7 @@ heap_abort_speculative(Relation relation, HeapTuple tuple) block = ItemPointerGetBlockNumber(tid); buffer = ReadBuffer(relation, block); - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); @@ -6064,7 +6054,7 @@ heap_inplace_update(Relation relation, HeapTuple tuple) buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&(tuple->t_self))); LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE); - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = (Page) BufferGetPage(buffer); offnum = ItemPointerGetOffsetNumber(&(tuple->t_self)); if (PageGetMaxOffsetNumber(page) >= offnum) @@ -7319,8 +7309,7 @@ log_heap_update(Relation reln, Buffer oldbuf, uint16 prefixlen = 0, suffixlen = 0; XLogRecPtr recptr; - Page page = BufferGetPage(newbuf, NULL, NULL, - BGP_NO_SNAPSHOT_TEST); + Page page = BufferGetPage(newbuf); bool need_tuple_data = RelationIsLogicallyLogged(reln); bool init; int bufflags; @@ -7769,8 +7758,7 @@ heap_xlog_clean(XLogReaderState *record) &buffer); if (action == BLK_NEEDS_REDO) { - Page page = BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST); + Page page = (Page) BufferGetPage(buffer); OffsetNumber *end; OffsetNumber *redirected; OffsetNumber *nowdead; @@ -7876,7 +7864,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, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); PageSetAllVisible(page); @@ -7902,8 +7890,7 @@ heap_xlog_visible(XLogReaderState *record) if (XLogReadBufferForRedoExtended(record, 0, RBM_ZERO_ON_ERROR, false, &vmbuffer) == BLK_NEEDS_REDO) { - Page vmpage = BufferGetPage(vmbuffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST); + Page vmpage = BufferGetPage(vmbuffer); Relation reln; /* 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) { - Page page = BufferGetPage(buffer, NULL, NULL, - BGP_NO_SNAPSHOT_TEST); + Page page = BufferGetPage(buffer); xl_heap_freeze_tuple *tuples; 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) { - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); if (PageGetMaxOffsetNumber(page) >= xlrec->offnum) lp = PageGetItemId(page, xlrec->offnum); @@ -8141,7 +8127,7 @@ heap_xlog_insert(XLogReaderState *record) if (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) { buffer = XLogInitBufferForRedo(record, 0); - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); PageInit(page, BufferGetPageSize(buffer), 0); action = BLK_NEEDS_REDO; } @@ -8152,7 +8138,7 @@ heap_xlog_insert(XLogReaderState *record) Size datalen; char *data; - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); if (PageGetMaxOffsetNumber(page) + 1 < xlrec->offnum) elog(PANIC, "invalid max offset number"); @@ -8257,7 +8243,7 @@ heap_xlog_multi_insert(XLogReaderState *record) if (isinit) { buffer = XLogInitBufferForRedo(record, 0); - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); PageInit(page, BufferGetPageSize(buffer), 0); action = BLK_NEEDS_REDO; } @@ -8273,7 +8259,7 @@ heap_xlog_multi_insert(XLogReaderState *record) tupdata = XLogRecGetBlockData(record, 0, &len); endptr = tupdata + len; - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = (Page) BufferGetPage(buffer); for (i = 0; i < xlrec->ntuples; i++) { @@ -8424,7 +8410,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) &obuffer); if (oldaction == BLK_NEEDS_REDO) { - page = BufferGetPage(obuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(obuffer); offnum = xlrec->old_offnum; if (PageGetMaxOffsetNumber(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) { nbuffer = XLogInitBufferForRedo(record, 0); - page = BufferGetPage(nbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = (Page) BufferGetPage(nbuffer); PageInit(page, BufferGetPageSize(nbuffer), 0); newaction = BLK_NEEDS_REDO; } @@ -8504,7 +8490,7 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) recdata = XLogRecGetBlockData(record, 0, &datalen); recdata_end = recdata + datalen; - page = BufferGetPage(nbuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(nbuffer); offnum = xlrec->new_offnum; if (PageGetMaxOffsetNumber(page) + 1 < offnum) @@ -8634,7 +8620,7 @@ heap_xlog_confirm(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) @@ -8670,7 +8656,7 @@ heap_xlog_lock(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = (Page) BufferGetPage(buffer); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) @@ -8720,7 +8706,7 @@ heap_xlog_lock_updated(XLogReaderState *record) if (XLogReadBufferForRedo(record, 0, &buffer) == BLK_NEEDS_REDO) { - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) @@ -8759,7 +8745,7 @@ heap_xlog_inplace(XLogReaderState *record) { char *newtup = XLogRecGetBlockData(record, 0, &newlen); - page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buffer); offnum = xlrec->offnum; if (PageGetMaxOffsetNumber(page) >= offnum) |