39 char *end = from + len;
64 items[
i] = (
Item) from;
65 itemsizes[
i] = itemsz;
72 for (i = nitems - 1; i >= 0; i--)
74 if (
PageAddItem(page, items[i], itemsizes[i], nitems - i,
76 elog(
PANIC,
"_bt_restore_page: cannot add item to page");
186 elog(
PANIC,
"btree_xlog_insert: failed to add item");
210 bool isleaf = (xlrec->
level == 0);
280 datapos += newitemsz;
281 datalen -= newitemsz;
287 datapos += left_hikeysz;
288 datalen -= left_hikeysz;
298 elog(
PANIC,
"failed to add high key to left page after split");
312 elog(
ERROR,
"failed to add new item to left page after split");
321 elog(
ERROR,
"failed to add old item to left page after split");
330 elog(
ERROR,
"failed to add new item to left page after split");
487 if ((unend - unused) > 0)
637 elog(
ERROR,
"could not add dummy high key to half-dead page");
745 elog(
ERROR,
"could not add dummy high key to half-dead page");
777 if (xlrec->
level == 0)
781 if (xlrec->
level > 0)
864 elog(
PANIC,
"btree_redo: unknown op code %u", info);
BlockNumber lastBlockVacuumed
TransactionId latestRemovedXid
void LockBufferForCleanup(Buffer buffer)
void PageRestoreTempPage(Page tempPage, Page oldPage)
#define BTreeInnerTupleGetDownLink(itup)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
void MarkBufferDirty(Buffer buffer)
static void btree_xlog_vacuum(XLogReaderState *record)
#define P_FIRSTDATAKEY(opaque)
union BTPageOpaqueData::@46 btpo
Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum, BlockNumber blkno, ReadBufferMode mode)
void mask_page_hint_bits(Page page)
#define XLOG_BTREE_INSERT_META
#define XLogRecHasBlockRef(decoder, block_id)
#define BTP_INCOMPLETE_SPLIT
#define MemSet(start, val, len)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
#define P_INCOMPLETE_SPLIT(opaque)
void btree_redo(XLogReaderState *record)
static void btree_xlog_delete(XLogReaderState *record)
bool HotStandbyActiveInReplay(void)
BTPageOpaqueData * BTPageOpaque
void mask_unused_space(Page page)
Page PageGetTempPageCopySpecial(Page page)
void mask_page_content(Page page)
#define XLOG_BTREE_NEWROOT
#define ItemIdGetLength(itemId)
static void btree_xlog_newroot(XLogReaderState *record)
static void _bt_restore_meta(XLogReaderState *record, uint8 block_id)
#define XLogRecGetData(decoder)
void UnlockReleaseBuffer(Buffer buffer)
#define XLogRecGetDataLen(decoder)
static void btree_xlog_reuse_page(XLogReaderState *record)
Buffer XLogInitBufferForRedo(XLogReaderState *record, uint8 block_id)
#define XLOG_BTREE_INSERT_LEAF
#define BTreeTupleSetTopParent(itup, blkno)
static void _bt_clear_incomplete_split(XLogReaderState *record, uint8 block_id)
IndexTupleData * IndexTuple
#define XLOG_BTREE_VACUUM
static void btree_xlog_split(bool onleft, XLogReaderState *record)
#define XLOG_BTREE_UNLINK_PAGE
#define BTREE_NOVAC_VERSION
#define BufferGetPage(buffer)
#define XLogRecGetInfo(decoder)
#define P_ISDELETED(opaque)
#define XLOG_BTREE_DELETE
#define PageGetItemId(page, offsetNumber)
bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
#define XLOG_BTREE_REUSE_PAGE
void mask_page_lsn_and_checksum(Page page)
#define XLOG_BTREE_MARK_PAGE_HALFDEAD
struct IndexTupleData IndexTupleData
static void _bt_restore_page(Page page, char *from, int len)
#define BufferGetPageSize(buffer)
#define InvalidOffsetNumber
#define XLOG_BTREE_SPLIT_R
#define BlockNumberIsValid(blockNumber)
XLogRedoAction XLogReadBufferForRedo(XLogReaderState *record, uint8 block_id, Buffer *buf)
PageHeaderData * PageHeader
#define Assert(condition)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
#define OffsetNumberNext(offsetNumber)
#define PageGetSpecialPointer(page)
float8 btm_last_cleanup_num_heap_tuples
#define BufferIsValid(bufnum)
static void btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
#define XLOG_BTREE_INSERT_UPPER
#define BTreeInnerTupleSetDownLink(itup, blkno)
BlockNumber BufferGetBlockNumber(Buffer buffer)
#define MaxIndexTuplesPerPage
static void btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
XLogRedoAction XLogReadBufferForRedoExtended(XLogReaderState *record, uint8 block_id, ReadBufferMode mode, bool get_cleanup_lock, Buffer *buf)
void _bt_pageinit(Page page, Size size)
#define SizeOfBtreeDelete
void ResolveRecoveryConflictWithSnapshot(TransactionId latestRemovedXid, RelFileNode node)
#define XLOG_BTREE_SPLIT_L
#define XLOG_BTREE_UNLINK_PAGE_META
TransactionId latestRemovedXid
TransactionId btm_oldest_btpo_xact
#define PageSetLSN(page, lsn)
#define XLOG_BTREE_META_CLEANUP
void mask_lp_flags(Page page)
void btree_mask(char *pagedata, BlockNumber blkno)
#define PageGetItem(page, itemId)
#define IndexTupleSize(itup)
static void btree_xlog_insert(bool isleaf, bool ismeta, XLogReaderState *record)