static void out_gistxlogPageSplit(StringInfo buf, gistxlogPageSplit *xlrec) { appendStringInfo(buf, "page_split: "); out_target(buf, xlrec->node); appendStringInfo(buf, "; block number %u splits to %d pages", xlrec->origblkno, xlrec->npage); }
void spg_desc(StringInfo buf, uint8 xl_info, char *rec) { uint8 info = xl_info & ~XLR_INFO_MASK; switch (info) { case XLOG_SPGIST_CREATE_INDEX: appendStringInfo(buf, "create_index: rel %u/%u/%u", ((RelFileNode *) rec)->spcNode, ((RelFileNode *) rec)->dbNode, ((RelFileNode *) rec)->relNode); break; case XLOG_SPGIST_ADD_LEAF: out_target(buf, ((spgxlogAddLeaf *) rec)->node); appendStringInfo(buf, "add leaf to page: %u", ((spgxlogAddLeaf *) rec)->blknoLeaf); break; case XLOG_SPGIST_MOVE_LEAFS: out_target(buf, ((spgxlogMoveLeafs *) rec)->node); appendStringInfo(buf, "move %u leafs from page %u to page %u", ((spgxlogMoveLeafs *) rec)->nMoves, ((spgxlogMoveLeafs *) rec)->blknoSrc, ((spgxlogMoveLeafs *) rec)->blknoDst); break; case XLOG_SPGIST_ADD_NODE: out_target(buf, ((spgxlogAddNode *) rec)->node); appendStringInfo(buf, "add node to %u:%u", ((spgxlogAddNode *) rec)->blkno, ((spgxlogAddNode *) rec)->offnum); break; case XLOG_SPGIST_SPLIT_TUPLE: out_target(buf, ((spgxlogSplitTuple *) rec)->node); appendStringInfo(buf, "split node %u:%u to %u:%u", ((spgxlogSplitTuple *) rec)->blknoPrefix, ((spgxlogSplitTuple *) rec)->offnumPrefix, ((spgxlogSplitTuple *) rec)->blknoPostfix, ((spgxlogSplitTuple *) rec)->offnumPostfix); break; case XLOG_SPGIST_PICKSPLIT: out_target(buf, ((spgxlogPickSplit *) rec)->node); appendStringInfo(buf, "split leaf page"); break; case XLOG_SPGIST_VACUUM_LEAF: out_target(buf, ((spgxlogVacuumLeaf *) rec)->node); appendStringInfo(buf, "vacuum leaf tuples on page %u", ((spgxlogVacuumLeaf *) rec)->blkno); break; case XLOG_SPGIST_VACUUM_ROOT: out_target(buf, ((spgxlogVacuumRoot *) rec)->node); appendStringInfo(buf, "vacuum leaf tuples on root page"); break; case XLOG_SPGIST_VACUUM_REDIRECT: out_target(buf, ((spgxlogVacuumRedirect *) rec)->node); appendStringInfo(buf, "vacuum redirect tuples on page %u", ((spgxlogVacuumRedirect *) rec)->blkno); break; default: appendStringInfo(buf, "unknown spgist op code %u", info); break; } }
static void out_gistxlogPageUpdate(StringInfo buf, gistxlogPageUpdate *xlrec) { out_target(buf, xlrec->node); appendStringInfo(buf, "; block number %u", xlrec->blkno); }
void bitmap_desc(char* buf, uint8 xl_info, char* rec) { uint8 info = xl_info & ~XLR_INFO_MASK; switch (info) { case XLOG_BITMAP_INSERT_NEWLOV: { xl_bm_newpage *xlrec = (xl_bm_newpage*)rec; strcat(buf, "insert a new LOV page: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_LOVITEM: { xl_bm_lovitem *xlrec = (xl_bm_lovitem*)rec; strcat(buf, "insert a new LOV item: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_META: { xl_bm_metapage *xlrec = (xl_bm_metapage*)rec; strcat(buf, "update the metapage: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_NEWLOVMETA: { xl_bm_newpage *xlrec = (xl_bm_newpage*)rec; strcat(buf, "insert a new LOV metapage: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_LOVMETA: { xl_bm_lovmetapage *xlrec = (xl_bm_lovmetapage*)rec; strcat(buf, "update the LOV metapage: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_NEWBITMAP: { xl_bm_newpage *xlrec = (xl_bm_newpage*)rec; strcat(buf, "insert a new bitmap page: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_BITMAP: { xl_bm_bitmappage *xlrec = (xl_bm_bitmappage*)rec; strcat(buf, "update a bitmap page: "); out_target(buf, &(xlrec->bm_node)); break; } case XLOG_BITMAP_INSERT_BITMAP_LASTWORDS: { xl_bm_bitmap_lastwords *xlrec = (xl_bm_bitmap_lastwords*)rec; strcat(buf, "update the last two words in a bitmap: "); out_target(buf, &(xlrec->bm_node)); break; } default: strcat(buf, "UNKNOWN"); break; } }
void heap_desc(StringInfo buf, uint8 xl_info, char *rec) { uint8 info = xl_info & ~XLR_INFO_MASK; info &= XLOG_HEAP_OPMASK; if (info == XLOG_HEAP_INSERT) { xl_heap_insert *xlrec = (xl_heap_insert *) rec; if (xl_info & XLOG_HEAP_INIT_PAGE) appendStringInfoString(buf, "insert(init): "); else appendStringInfoString(buf, "insert: "); out_target(buf, &(xlrec->target)); } else if (info == XLOG_HEAP_DELETE) { xl_heap_delete *xlrec = (xl_heap_delete *) rec; appendStringInfoString(buf, "delete: "); out_target(buf, &(xlrec->target)); appendStringInfoChar(buf, ' '); out_infobits(buf, xlrec->infobits_set); } else if (info == XLOG_HEAP_UPDATE) { xl_heap_update *xlrec = (xl_heap_update *) rec; if (xl_info & XLOG_HEAP_INIT_PAGE) appendStringInfoString(buf, "update(init): "); else appendStringInfoString(buf, "update: "); out_target(buf, &(xlrec->target)); appendStringInfo(buf, " xmax %u ", xlrec->old_xmax); out_infobits(buf, xlrec->old_infobits_set); appendStringInfo(buf, "; new tid %u/%u xmax %u", ItemPointerGetBlockNumber(&(xlrec->newtid)), ItemPointerGetOffsetNumber(&(xlrec->newtid)), xlrec->new_xmax); } else if (info == XLOG_HEAP_HOT_UPDATE) { xl_heap_update *xlrec = (xl_heap_update *) rec; if (xl_info & XLOG_HEAP_INIT_PAGE) /* can this case happen? */ appendStringInfoString(buf, "hot_update(init): "); else appendStringInfoString(buf, "hot_update: "); out_target(buf, &(xlrec->target)); appendStringInfo(buf, " xmax %u ", xlrec->old_xmax); out_infobits(buf, xlrec->old_infobits_set); appendStringInfo(buf, "; new tid %u/%u xmax %u", ItemPointerGetBlockNumber(&(xlrec->newtid)), ItemPointerGetOffsetNumber(&(xlrec->newtid)), xlrec->new_xmax); } else if (info == XLOG_HEAP_NEWPAGE) { xl_heap_newpage *xlrec = (xl_heap_newpage *) rec; appendStringInfo(buf, "newpage: rel %u/%u/%u; fork %u, blk %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->forknum, xlrec->blkno); } else if (info == XLOG_HEAP_LOCK) { xl_heap_lock *xlrec = (xl_heap_lock *) rec; appendStringInfo(buf, "lock %u: ", xlrec->locking_xid); out_target(buf, &(xlrec->target)); appendStringInfoChar(buf, ' '); out_infobits(buf, xlrec->infobits_set); } else if (info == XLOG_HEAP_INPLACE) { xl_heap_inplace *xlrec = (xl_heap_inplace *) rec; appendStringInfoString(buf, "inplace: "); out_target(buf, &(xlrec->target)); } else appendStringInfoString(buf, "UNKNOWN"); }
void heap2_desc(StringInfo buf, uint8 xl_info, char *rec) { uint8 info = xl_info & ~XLR_INFO_MASK; info &= XLOG_HEAP_OPMASK; if (info == XLOG_HEAP2_CLEAN) { xl_heap_clean *xlrec = (xl_heap_clean *) rec; appendStringInfo(buf, "clean: rel %u/%u/%u; blk %u remxid %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->block, xlrec->latestRemovedXid); } else if (info == XLOG_HEAP2_FREEZE_PAGE) { xl_heap_freeze_page *xlrec = (xl_heap_freeze_page *) rec; appendStringInfo(buf, "freeze_page: rel %u/%u/%u; blk %u; cutoff xid %u ntuples %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->block, xlrec->cutoff_xid, xlrec->ntuples); } else if (info == XLOG_HEAP2_REWRITE) { appendStringInfoString(buf, "heap rewrite:"); } else if (info == XLOG_HEAP2_CLEANUP_INFO) { xl_heap_cleanup_info *xlrec = (xl_heap_cleanup_info *) rec; appendStringInfo(buf, "cleanup info: remxid %u", xlrec->latestRemovedXid); } else if (info == XLOG_HEAP2_VISIBLE) { xl_heap_visible *xlrec = (xl_heap_visible *) rec; appendStringInfo(buf, "visible: rel %u/%u/%u; blk %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->block); } else if (info == XLOG_HEAP2_MULTI_INSERT) { xl_heap_multi_insert *xlrec = (xl_heap_multi_insert *) rec; if (xl_info & XLOG_HEAP_INIT_PAGE) appendStringInfoString(buf, "multi-insert (init): "); else appendStringInfoString(buf, "multi-insert: "); appendStringInfo(buf, "rel %u/%u/%u; blk %u; %d tuples", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->blkno, xlrec->ntuples); } else if (info == XLOG_HEAP2_LOCK_UPDATED) { xl_heap_lock_updated *xlrec = (xl_heap_lock_updated *) rec; appendStringInfo(buf, "lock updated: xmax %u msk %04x; ", xlrec->xmax, xlrec->infobits_set); out_target(buf, &(xlrec->target)); } else if (info == XLOG_HEAP2_NEW_CID) { xl_heap_new_cid *xlrec = (xl_heap_new_cid *) rec; appendStringInfo(buf, "new_cid: "); out_target(buf, &(xlrec->target)); appendStringInfo(buf, "; cmin: %u, cmax: %u, combo: %u", xlrec->cmin, xlrec->cmax, xlrec->combocid); } else appendStringInfoString(buf, "UNKNOWN"); }
void heap_desc(StringInfo buf, XLogRecord *record) { char *rec = XLogRecGetData(record); uint8 info = record->xl_info & ~XLR_INFO_MASK; info &= XLOG_HEAP_OPMASK; if (info == XLOG_HEAP_INSERT) { xl_heap_insert *xlrec = (xl_heap_insert *) rec; out_target(buf, &(xlrec->target)); } else if (info == XLOG_HEAP_DELETE) { xl_heap_delete *xlrec = (xl_heap_delete *) rec; out_target(buf, &(xlrec->target)); appendStringInfoChar(buf, ' '); out_infobits(buf, xlrec->infobits_set); } else if (info == XLOG_HEAP_UPDATE) { xl_heap_update *xlrec = (xl_heap_update *) rec; out_target(buf, &(xlrec->target)); appendStringInfo(buf, " xmax %u ", xlrec->old_xmax); out_infobits(buf, xlrec->old_infobits_set); appendStringInfo(buf, "; new tid %u/%u xmax %u", ItemPointerGetBlockNumber(&(xlrec->newtid)), ItemPointerGetOffsetNumber(&(xlrec->newtid)), xlrec->new_xmax); } else if (info == XLOG_HEAP_HOT_UPDATE) { xl_heap_update *xlrec = (xl_heap_update *) rec; out_target(buf, &(xlrec->target)); appendStringInfo(buf, " xmax %u ", xlrec->old_xmax); out_infobits(buf, xlrec->old_infobits_set); appendStringInfo(buf, "; new tid %u/%u xmax %u", ItemPointerGetBlockNumber(&(xlrec->newtid)), ItemPointerGetOffsetNumber(&(xlrec->newtid)), xlrec->new_xmax); } else if (info == XLOG_HEAP_LOCK) { xl_heap_lock *xlrec = (xl_heap_lock *) rec; appendStringInfo(buf, "xid %u: ", xlrec->locking_xid); out_target(buf, &(xlrec->target)); appendStringInfoChar(buf, ' '); out_infobits(buf, xlrec->infobits_set); } else if (info == XLOG_HEAP_INPLACE) { xl_heap_inplace *xlrec = (xl_heap_inplace *) rec; out_target(buf, &(xlrec->target)); } }
void heap2_desc(StringInfo buf, XLogRecord *record) { char *rec = XLogRecGetData(record); uint8 info = record->xl_info & ~XLR_INFO_MASK; info &= XLOG_HEAP_OPMASK; if (info == XLOG_HEAP2_CLEAN) { xl_heap_clean *xlrec = (xl_heap_clean *) rec; appendStringInfo(buf, "rel %u/%u/%u; blk %u remxid %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->block, xlrec->latestRemovedXid); } else if (info == XLOG_HEAP2_FREEZE_PAGE) { xl_heap_freeze_page *xlrec = (xl_heap_freeze_page *) rec; appendStringInfo(buf, "rel %u/%u/%u; blk %u; cutoff xid %u ntuples %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->block, xlrec->cutoff_xid, xlrec->ntuples); } else if (info == XLOG_HEAP2_CLEANUP_INFO) { xl_heap_cleanup_info *xlrec = (xl_heap_cleanup_info *) rec; appendStringInfo(buf, "remxid %u", xlrec->latestRemovedXid); } else if (info == XLOG_HEAP2_VISIBLE) { xl_heap_visible *xlrec = (xl_heap_visible *) rec; appendStringInfo(buf, "rel %u/%u/%u; blk %u", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->block); } else if (info == XLOG_HEAP2_MULTI_INSERT) { xl_heap_multi_insert *xlrec = (xl_heap_multi_insert *) rec; appendStringInfo(buf, "rel %u/%u/%u; blk %u; %d tuples", xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode, xlrec->blkno, xlrec->ntuples); } else if (info == XLOG_HEAP2_LOCK_UPDATED) { xl_heap_lock_updated *xlrec = (xl_heap_lock_updated *) rec; appendStringInfo(buf, "xmax %u msk %04x; ", xlrec->xmax, xlrec->infobits_set); out_target(buf, &(xlrec->target)); } else if (info == XLOG_HEAP2_NEW_CID) { xl_heap_new_cid *xlrec = (xl_heap_new_cid *) rec; out_target(buf, &(xlrec->target)); appendStringInfo(buf, "; cmin: %u, cmax: %u, combo: %u", xlrec->cmin, xlrec->cmax, xlrec->combocid); } }