103 elog(
ERROR,
"failed to add item to index page in %u/%u/%u",
144 if (nuncompressed > 0)
152 Assert(npacked == nuncompressed);
172 for (actionno = 0; actionno < data->
nactions; actionno++)
197 memcpy(&nitems, walbuf,
sizeof(
uint16));
205 while (segno < a_segno)
215 memcpy(writePtr, (
Pointer) oldseg, segsize);
236 Assert(nnewitems == nolditems + nitems);
240 Assert(npacked == nnewitems);
247 if (segptr != segmentend)
263 if (!tailCopy && segptr != segmentend)
265 int tailSize = segmentend - segptr;
268 memcpy(tailCopy, segptr, tailSize);
271 segmentend = segptr + tailSize;
284 memcpy(writePtr, newseg, newsegsize);
285 writePtr += newsegsize;
291 memcpy(writePtr, newseg, newsegsize);
292 writePtr += newsegsize;
298 elog(
ERROR,
"unexpected GIN leaf action: %u", a_action);
305 if (segptr != segmentend && tailCopy)
307 int restSize = segmentend - segptr;
310 memcpy(writePtr, segptr, restSize);
311 writePtr += restSize;
419 elog(
ERROR,
"GIN split record did not contain a full-page image of left page");
422 elog(
ERROR,
"GIN split record did not contain a full-page image of right page");
427 elog(
ERROR,
"GIN split record did not contain a full-page image of root page");
446 elog(
ERROR,
"replay of gin entry tree page vacuum did not restore the page");
573 for (i = 0; i < data->
ntuples; i++)
579 elog(
ERROR,
"failed to add item to index page");
581 tuples = (
IndexTuple) (((
char *) tuples) + tupsize);
585 Assert(payload + totaltupsize == (
char *) tuples);
654 for (i = 0; i < data->
ntuples; i++)
661 elog(
ERROR,
"failed to add item to index page");
663 tuples = (
IndexTuple) (((
char *) tuples) + tupsize);
666 Assert((
char *) tuples == payload + totaltupsize);
708 for (i = 0; i < data->
ndeleted; i++)
768 elog(
PANIC,
"gin_redo: unknown op code %u", info);
778 "GIN recovery temporary context",
#define BlockIdGetBlockNumber(blockId)
#define PostingItemSetBlockNumber(pointer, blockNumber)
GinPostingList * ginCompressPostingList(const ItemPointer ipd, int nipd, int maxsize, int *nwritten)
void GinInitMetabuffer(Buffer b)
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
static void ginRedoUpdateMetapage(XLogReaderState *record)
#define PageIsEmpty(page)
struct ginxlogCreatePostingTree ginxlogCreatePostingTree
void gin_xlog_startup(void)
ItemPointer ginPostingListDecode(GinPostingList *plist, int *ndecoded)
static void ginRedoRecompress(Page page, ginxlogRecompressDataLeaf *data)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
void MarkBufferDirty(Buffer buffer)
static void ginRedoSplit(XLogReaderState *record)
static MemoryContext opCtx
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void mask_page_hint_bits(Page page)
#define GinDataPageGetData(page)
static void ginRedoInsertEntry(Buffer buffer, bool isLeaf, BlockNumber rightblkno, void *rdata)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
void MemoryContextReset(MemoryContext context)
#define GinPageGetOpaque(page)
#define GIN_METAPAGE_BLKNO
void gin_xlog_cleanup(void)
#define SizeOfPageHeaderData
ItemPointer ginMergeItemPointers(ItemPointerData *a, uint32 na, ItemPointerData *b, uint32 nb, int *nmerged)
#define GIN_INSERT_ISLEAF
OffsetNumber parentOffset
#define PageGetMaxOffsetNumber(page)
#define GinPageIsCompressed(page)
#define GinSetDownlink(itup, blkno)
ginxlogRecompressDataLeaf data
#define GIN_SEGMENT_INSERT
void mask_unused_space(Page page)
ItemPointerData * ItemPointer
#define XLOG_GIN_INSERT_LISTPAGE
void mask_page_content(Page page)
#define GinDataPageSetDataSize(page, size)
#define XLogRecGetData(decoder)
void GinDataPageAddPostingItem(Page page, PostingItem *data, OffsetNumber offset)
#define GIN_SEGMENT_REPLACE
static void ginRedoDeleteListPages(XLogReaderState *record)
void UnlockReleaseBuffer(Buffer buffer)
#define GinNextPostingListSegment(cur)
#define GinPageSetCompressed(page)
#define XLOG_GIN_CREATE_PTREE
#define GinDataLeafPageGetPostingListSize(page)
#define GinDataPageGetPostingItem(page, i)
Buffer XLogInitBufferForRedo(XLogReaderState *record, uint8 block_id)
static void ginRedoVacuumDataLeafPage(XLogReaderState *record)
#define XLOG_GIN_UPDATE_META_PAGE
#define ALLOCSET_DEFAULT_SIZES
#define GIN_INSERT_ISDATA
#define FirstOffsetNumber
IndexTupleData * IndexTuple
#define GIN_SEGMENT_ADDITEMS
void gin_mask(char *pagedata, BlockNumber blkno)
#define GIN_SEGMENT_DELETE
void gin_redo(XLogReaderState *record)
static void ginRedoCreatePTree(XLogReaderState *record)
MemoryContext CurrentMemoryContext
#define GinPageIsLeaf(page)
#define BufferGetPage(buffer)
#define XLogRecGetInfo(decoder)
#define XLOG_GIN_VACUUM_DATA_LEAF_PAGE
#define GinPageSetFullRow(page)
#define PageGetItemId(page, offsetNumber)
#define XLOG_GIN_VACUUM_PAGE
static void ginRedoInsert(XLogReaderState *record)
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
#define GinDataLeafPageGetPostingList(page)
void mask_page_lsn_and_checksum(Page page)
void GinPageDeletePostingItem(Page page, OffsetNumber offset)
static void ginRedoClearIncompleteSplit(XLogReaderState *record, uint8 block_id)
static void ginRedoVacuumPage(XLogReaderState *record)
#define InvalidOffsetNumber
XLogRedoAction XLogReadBufferForRedo(XLogReaderState *record, uint8 block_id, Buffer *buf)
#define GinPageIsData(page)
struct BlockIdData BlockIdData
PageHeaderData * PageHeader
#define Assert(condition)
#define GinPageSetDeleteXid(page, xid)
struct ItemPointerData ItemPointerData
#define OffsetNumberNext(offsetNumber)
#define PageGetSpecialPointer(page)
#define InvalidBlockNumber
void GinInitBuffer(Buffer b, uint32 f)
#define BufferIsValid(bufnum)
#define GIN_INCOMPLETE_SPLIT
BlockNumber BufferGetBlockNumber(Buffer buffer)
#define SizeOfGinPostingList(plist)
#define GinPageSetDeleted(page)
static void ginRedoDeletePage(XLogReaderState *record)
#define GinPageGetMeta(p)
static void ginRedoInsertListPage(XLogReaderState *record)
void BufferGetTag(Buffer buffer, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
#define XLOG_GIN_DELETE_PAGE
#define PageSetLSN(page, lsn)
static void ginRedoInsertData(Buffer buffer, bool isLeaf, BlockNumber rightblkno, void *rdata)
#define PageGetItem(page, itemId)
#define IndexTupleSize(itup)
#define XLOG_GIN_DELETE_LISTPAGE