PostgreSQL Source Code  git master
nbtxlog.h File Reference
#include "access/transam.h"
#include "access/xlogreader.h"
#include "lib/stringinfo.h"
#include "storage/off.h"
Include dependency graph for nbtxlog.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  xl_btree_metadata
 
struct  xl_btree_insert
 
struct  xl_btree_split
 
struct  xl_btree_dedup
 
struct  xl_btree_reuse_page
 
struct  xl_btree_vacuum
 
struct  xl_btree_delete
 
struct  xl_btree_update
 
struct  xl_btree_mark_page_halfdead
 
struct  xl_btree_unlink_page
 
struct  xl_btree_newroot
 

Macros

#define XLOG_BTREE_INSERT_LEAF   0x00 /* add index tuple without split */
 
#define XLOG_BTREE_INSERT_UPPER   0x10 /* same, on a non-leaf page */
 
#define XLOG_BTREE_INSERT_META   0x20 /* same, plus update metapage */
 
#define XLOG_BTREE_SPLIT_L   0x30 /* add index tuple with split */
 
#define XLOG_BTREE_SPLIT_R   0x40 /* as above, new item on right */
 
#define XLOG_BTREE_INSERT_POST   0x50 /* add index tuple with posting split */
 
#define XLOG_BTREE_DEDUP   0x60 /* deduplicate tuples for a page */
 
#define XLOG_BTREE_DELETE   0x70 /* delete leaf index tuples for a page */
 
#define XLOG_BTREE_UNLINK_PAGE   0x80 /* delete a half-dead page */
 
#define XLOG_BTREE_UNLINK_PAGE_META   0x90 /* same, and update metapage */
 
#define XLOG_BTREE_NEWROOT   0xA0 /* new root page */
 
#define XLOG_BTREE_MARK_PAGE_HALFDEAD   0xB0 /* mark a leaf as half-dead */
 
#define XLOG_BTREE_VACUUM
 
#define XLOG_BTREE_REUSE_PAGE
 
#define XLOG_BTREE_META_CLEANUP
 
#define SizeOfBtreeInsert   (offsetof(xl_btree_insert, offnum) + sizeof(OffsetNumber))
 
#define SizeOfBtreeSplit   (offsetof(xl_btree_split, postingoff) + sizeof(uint16))
 
#define SizeOfBtreeDedup   (offsetof(xl_btree_dedup, nintervals) + sizeof(uint16))
 
#define SizeOfBtreeReusePage   (sizeof(xl_btree_reuse_page))
 
#define SizeOfBtreeVacuum   (offsetof(xl_btree_vacuum, nupdated) + sizeof(uint16))
 
#define SizeOfBtreeDelete   (offsetof(xl_btree_delete, nupdated) + sizeof(uint16))
 
#define SizeOfBtreeUpdate   (offsetof(xl_btree_update, ndeletedtids) + sizeof(uint16))
 
#define SizeOfBtreeMarkPageHalfDead   (offsetof(xl_btree_mark_page_halfdead, topparent) + sizeof(BlockNumber))
 
#define SizeOfBtreeUnlinkPage   (offsetof(xl_btree_unlink_page, leaftopparent) + sizeof(BlockNumber))
 
#define SizeOfBtreeNewroot   (offsetof(xl_btree_newroot, level) + sizeof(uint32))
 

Typedefs

typedef struct xl_btree_metadata xl_btree_metadata
 
typedef struct xl_btree_insert xl_btree_insert
 
typedef struct xl_btree_split xl_btree_split
 
typedef struct xl_btree_dedup xl_btree_dedup
 
typedef struct xl_btree_reuse_page xl_btree_reuse_page
 
typedef struct xl_btree_vacuum xl_btree_vacuum
 
typedef struct xl_btree_delete xl_btree_delete
 
typedef struct xl_btree_update xl_btree_update
 
typedef struct xl_btree_mark_page_halfdead xl_btree_mark_page_halfdead
 
typedef struct xl_btree_unlink_page xl_btree_unlink_page
 
typedef struct xl_btree_newroot xl_btree_newroot
 

Functions

void btree_redo (XLogReaderState *record)
 
void btree_desc (StringInfo buf, XLogReaderState *record)
 
const char * btree_identify (uint8 info)
 
void btree_xlog_startup (void)
 
void btree_xlog_cleanup (void)
 
void btree_mask (char *pagedata, BlockNumber blkno)
 

Macro Definition Documentation

◆ SizeOfBtreeDedup

#define SizeOfBtreeDedup   (offsetof(xl_btree_dedup, nintervals) + sizeof(uint16))

Definition at line 177 of file nbtxlog.h.

Referenced by _bt_dedup_pass().

◆ SizeOfBtreeDelete

#define SizeOfBtreeDelete   (offsetof(xl_btree_delete, nupdated) + sizeof(uint16))

Definition at line 244 of file nbtxlog.h.

Referenced by _bt_delitems_delete().

◆ SizeOfBtreeInsert

#define SizeOfBtreeInsert   (offsetof(xl_btree_insert, offnum) + sizeof(OffsetNumber))

Definition at line 87 of file nbtxlog.h.

Referenced by _bt_insertonpg().

◆ SizeOfBtreeMarkPageHalfDead

#define SizeOfBtreeMarkPageHalfDead   (offsetof(xl_btree_mark_page_halfdead, topparent) + sizeof(BlockNumber))

Definition at line 282 of file nbtxlog.h.

Referenced by _bt_mark_page_halfdead().

◆ SizeOfBtreeNewroot

#define SizeOfBtreeNewroot   (offsetof(xl_btree_newroot, level) + sizeof(uint32))

Definition at line 338 of file nbtxlog.h.

Referenced by _bt_getroot(), and _bt_newroot().

◆ SizeOfBtreeReusePage

#define SizeOfBtreeReusePage   (sizeof(xl_btree_reuse_page))

Definition at line 193 of file nbtxlog.h.

Referenced by _bt_log_reuse_page().

◆ SizeOfBtreeSplit

#define SizeOfBtreeSplit   (offsetof(xl_btree_split, postingoff) + sizeof(uint16))

Definition at line 161 of file nbtxlog.h.

Referenced by _bt_split().

◆ SizeOfBtreeUnlinkPage

#define SizeOfBtreeUnlinkPage   (offsetof(xl_btree_unlink_page, leaftopparent) + sizeof(BlockNumber))

Definition at line 319 of file nbtxlog.h.

Referenced by _bt_unlink_halfdead_page().

◆ SizeOfBtreeUpdate

#define SizeOfBtreeUpdate   (offsetof(xl_btree_update, ndeletedtids) + sizeof(uint16))

Definition at line 259 of file nbtxlog.h.

Referenced by _bt_delitems_update(), and btree_xlog_updates().

◆ SizeOfBtreeVacuum

#define SizeOfBtreeVacuum   (offsetof(xl_btree_vacuum, nupdated) + sizeof(uint16))

Definition at line 231 of file nbtxlog.h.

Referenced by _bt_delitems_vacuum().

◆ XLOG_BTREE_DEDUP

#define XLOG_BTREE_DEDUP   0x60 /* deduplicate tuples for a page */

Definition at line 33 of file nbtxlog.h.

Referenced by _bt_dedup_pass(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_DELETE

#define XLOG_BTREE_DELETE   0x70 /* delete leaf index tuples for a page */

Definition at line 34 of file nbtxlog.h.

Referenced by _bt_delitems_delete(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_INSERT_LEAF

#define XLOG_BTREE_INSERT_LEAF   0x00 /* add index tuple without split */

Definition at line 27 of file nbtxlog.h.

Referenced by _bt_insertonpg(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_INSERT_META

#define XLOG_BTREE_INSERT_META   0x20 /* same, plus update metapage */

Definition at line 29 of file nbtxlog.h.

Referenced by _bt_insertonpg(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_INSERT_POST

#define XLOG_BTREE_INSERT_POST   0x50 /* add index tuple with posting split */

Definition at line 32 of file nbtxlog.h.

Referenced by _bt_insertonpg(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_INSERT_UPPER

#define XLOG_BTREE_INSERT_UPPER   0x10 /* same, on a non-leaf page */

Definition at line 28 of file nbtxlog.h.

Referenced by _bt_insertonpg(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_MARK_PAGE_HALFDEAD

#define XLOG_BTREE_MARK_PAGE_HALFDEAD   0xB0 /* mark a leaf as half-dead */

Definition at line 38 of file nbtxlog.h.

Referenced by _bt_mark_page_halfdead(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_META_CLEANUP

#define XLOG_BTREE_META_CLEANUP
Value:
0xE0 /* update cleanup-related data in the
* metapage */

Definition at line 43 of file nbtxlog.h.

Referenced by _bt_set_cleanup_info(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_NEWROOT

#define XLOG_BTREE_NEWROOT   0xA0 /* new root page */

Definition at line 37 of file nbtxlog.h.

Referenced by _bt_getroot(), _bt_newroot(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_REUSE_PAGE

#define XLOG_BTREE_REUSE_PAGE
Value:
0xD0 /* old page is about to be reused from
* FSM */

Definition at line 41 of file nbtxlog.h.

Referenced by _bt_log_reuse_page(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_SPLIT_L

#define XLOG_BTREE_SPLIT_L   0x30 /* add index tuple with split */

Definition at line 30 of file nbtxlog.h.

Referenced by _bt_split(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_SPLIT_R

#define XLOG_BTREE_SPLIT_R   0x40 /* as above, new item on right */

Definition at line 31 of file nbtxlog.h.

Referenced by _bt_split(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_UNLINK_PAGE

#define XLOG_BTREE_UNLINK_PAGE   0x80 /* delete a half-dead page */

Definition at line 35 of file nbtxlog.h.

Referenced by _bt_unlink_halfdead_page(), btree_desc(), btree_identify(), and btree_redo().

◆ XLOG_BTREE_UNLINK_PAGE_META

#define XLOG_BTREE_UNLINK_PAGE_META   0x90 /* same, and update metapage */

◆ XLOG_BTREE_VACUUM

#define XLOG_BTREE_VACUUM
Value:
0xC0 /* delete entries on a page during
* vacuum */

Definition at line 39 of file nbtxlog.h.

Referenced by _bt_delitems_vacuum(), btree_desc(), btree_identify(), and btree_redo().

Typedef Documentation

◆ xl_btree_dedup

◆ xl_btree_delete

◆ xl_btree_insert

◆ xl_btree_mark_page_halfdead

◆ xl_btree_metadata

◆ xl_btree_newroot

◆ xl_btree_reuse_page

◆ xl_btree_split

◆ xl_btree_unlink_page

◆ xl_btree_update

◆ xl_btree_vacuum

Function Documentation

◆ btree_desc()

void btree_desc ( StringInfo  buf,
XLogReaderState record 
)

Definition at line 20 of file nbtdesc.c.

References appendStringInfo(), RelFileNode::dbNode, EpochFromFullTransactionId, xl_btree_split::firstrightoff, xl_btree_metadata::last_cleanup_num_delpages, xl_btree_reuse_page::latestRemovedFullXid, xl_btree_delete::latestRemovedXid, xl_btree_mark_page_halfdead::leafblk, xl_btree_unlink_page::leafleftsib, xl_btree_unlink_page::leafrightsib, xl_btree_unlink_page::leaftopparent, xl_btree_mark_page_halfdead::leftblk, xl_btree_unlink_page::leftsib, xl_btree_split::level, xl_btree_unlink_page::level, xl_btree_newroot::level, xl_btree_vacuum::ndeleted, xl_btree_delete::ndeleted, xl_btree_split::newitemoff, xl_btree_dedup::nintervals, xl_btree_reuse_page::node, xl_btree_vacuum::nupdated, xl_btree_delete::nupdated, xl_btree_insert::offnum, xl_btree_split::postingoff, RelFileNode::relNode, xl_btree_mark_page_halfdead::rightblk, xl_btree_unlink_page::rightsib, xl_btree_unlink_page::safexid, RelFileNode::spcNode, xl_btree_mark_page_halfdead::topparent, XidFromFullTransactionId, XLOG_BTREE_DEDUP, XLOG_BTREE_DELETE, XLOG_BTREE_INSERT_LEAF, XLOG_BTREE_INSERT_META, XLOG_BTREE_INSERT_POST, XLOG_BTREE_INSERT_UPPER, XLOG_BTREE_MARK_PAGE_HALFDEAD, XLOG_BTREE_META_CLEANUP, XLOG_BTREE_NEWROOT, XLOG_BTREE_REUSE_PAGE, XLOG_BTREE_SPLIT_L, XLOG_BTREE_SPLIT_R, XLOG_BTREE_UNLINK_PAGE, XLOG_BTREE_UNLINK_PAGE_META, XLOG_BTREE_VACUUM, XLogRecGetBlockData(), XLogRecGetData, XLogRecGetInfo, and XLR_INFO_MASK.

21 {
22  char *rec = XLogRecGetData(record);
23  uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24 
25  switch (info)
26  {
31  {
32  xl_btree_insert *xlrec = (xl_btree_insert *) rec;
33 
34  appendStringInfo(buf, "off %u", xlrec->offnum);
35  break;
36  }
37  case XLOG_BTREE_SPLIT_L:
38  case XLOG_BTREE_SPLIT_R:
39  {
40  xl_btree_split *xlrec = (xl_btree_split *) rec;
41 
42  appendStringInfo(buf, "level %u, firstrightoff %d, newitemoff %d, postingoff %d",
43  xlrec->level, xlrec->firstrightoff,
44  xlrec->newitemoff, xlrec->postingoff);
45  break;
46  }
47  case XLOG_BTREE_DEDUP:
48  {
49  xl_btree_dedup *xlrec = (xl_btree_dedup *) rec;
50 
51  appendStringInfo(buf, "nintervals %u", xlrec->nintervals);
52  break;
53  }
54  case XLOG_BTREE_VACUUM:
55  {
56  xl_btree_vacuum *xlrec = (xl_btree_vacuum *) rec;
57 
58  appendStringInfo(buf, "ndeleted %u; nupdated %u",
59  xlrec->ndeleted, xlrec->nupdated);
60  break;
61  }
62  case XLOG_BTREE_DELETE:
63  {
64  xl_btree_delete *xlrec = (xl_btree_delete *) rec;
65 
66  appendStringInfo(buf, "latestRemovedXid %u; ndeleted %u; nupdated %u",
67  xlrec->latestRemovedXid, xlrec->ndeleted, xlrec->nupdated);
68  break;
69  }
71  {
73 
74  appendStringInfo(buf, "topparent %u; leaf %u; left %u; right %u",
75  xlrec->topparent, xlrec->leafblk, xlrec->leftblk, xlrec->rightblk);
76  break;
77  }
80  {
82 
83  appendStringInfo(buf, "left %u; right %u; level %u; safexid %u:%u; ",
84  xlrec->leftsib, xlrec->rightsib, xlrec->level,
87  appendStringInfo(buf, "leafleft %u; leafright %u; leaftopparent %u",
88  xlrec->leafleftsib, xlrec->leafrightsib,
89  xlrec->leaftopparent);
90  break;
91  }
92  case XLOG_BTREE_NEWROOT:
93  {
94  xl_btree_newroot *xlrec = (xl_btree_newroot *) rec;
95 
96  appendStringInfo(buf, "lev %u", xlrec->level);
97  break;
98  }
100  {
101  xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec;
102 
103  appendStringInfo(buf, "rel %u/%u/%u; latestRemovedXid %u:%u",
104  xlrec->node.spcNode, xlrec->node.dbNode,
105  xlrec->node.relNode,
108  break;
109  }
111  {
112  xl_btree_metadata *xlrec;
113 
114  xlrec = (xl_btree_metadata *) XLogRecGetBlockData(record, 0,
115  NULL);
116  appendStringInfo(buf, "last_cleanup_num_delpages %u",
118  break;
119  }
120  }
121 }
uint16 ndeleted
Definition: nbtxlog.h:236
TransactionId latestRemovedXid
Definition: nbtxlog.h:235
uint32 last_cleanup_num_delpages
Definition: nbtxlog.h:56
uint16 nintervals
Definition: nbtxlog.h:172
unsigned char uint8
Definition: c.h:439
FullTransactionId latestRemovedFullXid
Definition: nbtxlog.h:190
uint16 nupdated
Definition: nbtxlog.h:237
#define XLOG_BTREE_INSERT_META
Definition: nbtxlog.h:29
RelFileNode node
Definition: nbtxlog.h:188
uint32 level
Definition: nbtxlog.h:335
uint16 nupdated
Definition: nbtxlog.h:224
#define XidFromFullTransactionId(x)
Definition: transam.h:48
#define XLOG_BTREE_NEWROOT
Definition: nbtxlog.h:37
#define XLogRecGetData(decoder)
Definition: xlogreader.h:310
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition: stringinfo.c:91
#define XLOG_BTREE_INSERT_LEAF
Definition: nbtxlog.h:27
OffsetNumber newitemoff
Definition: nbtxlog.h:157
#define XLOG_BTREE_VACUUM
Definition: nbtxlog.h:39
#define XLOG_BTREE_UNLINK_PAGE
Definition: nbtxlog.h:35
#define XLogRecGetInfo(decoder)
Definition: xlogreader.h:305
#define XLOG_BTREE_DELETE
Definition: nbtxlog.h:34
uint16 ndeleted
Definition: nbtxlog.h:223
#define XLOG_BTREE_DEDUP
Definition: nbtxlog.h:33
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
Definition: xlogreader.c:1517
#define XLOG_BTREE_REUSE_PAGE
Definition: nbtxlog.h:41
uint32 level
Definition: nbtxlog.h:155
#define XLOG_BTREE_MARK_PAGE_HALFDEAD
Definition: nbtxlog.h:38
OffsetNumber offnum
Definition: nbtxlog.h:81
#define EpochFromFullTransactionId(x)
Definition: transam.h:47
#define XLOG_BTREE_SPLIT_R
Definition: nbtxlog.h:31
#define XLR_INFO_MASK
Definition: xlogrecord.h:62
#define XLOG_BTREE_INSERT_POST
Definition: nbtxlog.h:32
#define XLOG_BTREE_INSERT_UPPER
Definition: nbtxlog.h:28
#define XLOG_BTREE_SPLIT_L
Definition: nbtxlog.h:30
#define XLOG_BTREE_UNLINK_PAGE_META
Definition: nbtxlog.h:36
uint16 postingoff
Definition: nbtxlog.h:158
OffsetNumber firstrightoff
Definition: nbtxlog.h:156
#define XLOG_BTREE_META_CLEANUP
Definition: nbtxlog.h:43

◆ btree_identify()

const char* btree_identify ( uint8  info)

Definition at line 124 of file nbtdesc.c.

References XLOG_BTREE_DEDUP, XLOG_BTREE_DELETE, XLOG_BTREE_INSERT_LEAF, XLOG_BTREE_INSERT_META, XLOG_BTREE_INSERT_POST, XLOG_BTREE_INSERT_UPPER, XLOG_BTREE_MARK_PAGE_HALFDEAD, XLOG_BTREE_META_CLEANUP, XLOG_BTREE_NEWROOT, XLOG_BTREE_REUSE_PAGE, XLOG_BTREE_SPLIT_L, XLOG_BTREE_SPLIT_R, XLOG_BTREE_UNLINK_PAGE, XLOG_BTREE_UNLINK_PAGE_META, XLOG_BTREE_VACUUM, and XLR_INFO_MASK.

125 {
126  const char *id = NULL;
127 
128  switch (info & ~XLR_INFO_MASK)
129  {
131  id = "INSERT_LEAF";
132  break;
134  id = "INSERT_UPPER";
135  break;
137  id = "INSERT_META";
138  break;
139  case XLOG_BTREE_SPLIT_L:
140  id = "SPLIT_L";
141  break;
142  case XLOG_BTREE_SPLIT_R:
143  id = "SPLIT_R";
144  break;
146  id = "INSERT_POST";
147  break;
148  case XLOG_BTREE_DEDUP:
149  id = "DEDUP";
150  break;
151  case XLOG_BTREE_VACUUM:
152  id = "VACUUM";
153  break;
154  case XLOG_BTREE_DELETE:
155  id = "DELETE";
156  break;
158  id = "MARK_PAGE_HALFDEAD";
159  break;
161  id = "UNLINK_PAGE";
162  break;
164  id = "UNLINK_PAGE_META";
165  break;
166  case XLOG_BTREE_NEWROOT:
167  id = "NEWROOT";
168  break;
170  id = "REUSE_PAGE";
171  break;
173  id = "META_CLEANUP";
174  break;
175  }
176 
177  return id;
178 }
#define XLOG_BTREE_INSERT_META
Definition: nbtxlog.h:29
#define XLOG_BTREE_NEWROOT
Definition: nbtxlog.h:37
#define XLOG_BTREE_INSERT_LEAF
Definition: nbtxlog.h:27
#define XLOG_BTREE_VACUUM
Definition: nbtxlog.h:39
#define XLOG_BTREE_UNLINK_PAGE
Definition: nbtxlog.h:35
#define XLOG_BTREE_DELETE
Definition: nbtxlog.h:34
#define XLOG_BTREE_DEDUP
Definition: nbtxlog.h:33
#define XLOG_BTREE_REUSE_PAGE
Definition: nbtxlog.h:41
#define XLOG_BTREE_MARK_PAGE_HALFDEAD
Definition: nbtxlog.h:38
#define XLOG_BTREE_SPLIT_R
Definition: nbtxlog.h:31
#define XLR_INFO_MASK
Definition: xlogrecord.h:62
#define XLOG_BTREE_INSERT_POST
Definition: nbtxlog.h:32
#define XLOG_BTREE_INSERT_UPPER
Definition: nbtxlog.h:28
#define XLOG_BTREE_SPLIT_L
Definition: nbtxlog.h:30
#define XLOG_BTREE_UNLINK_PAGE_META
Definition: nbtxlog.h:36
#define XLOG_BTREE_META_CLEANUP
Definition: nbtxlog.h:43

◆ btree_mask()

void btree_mask ( char *  pagedata,
BlockNumber  blkno 
)

Definition at line 1090 of file nbtxlog.c.

References BTP_HAS_GARBAGE, BTP_SPLIT_END, BTPageOpaqueData::btpo_cycleid, BTPageOpaqueData::btpo_flags, mask_lp_flags(), mask_page_hint_bits(), mask_page_lsn_and_checksum(), mask_unused_space(), P_ISLEAF, and PageGetSpecialPointer.

1091 {
1092  Page page = (Page) pagedata;
1093  BTPageOpaque maskopaq;
1094 
1096 
1097  mask_page_hint_bits(page);
1098  mask_unused_space(page);
1099 
1100  maskopaq = (BTPageOpaque) PageGetSpecialPointer(page);
1101 
1102  if (P_ISLEAF(maskopaq))
1103  {
1104  /*
1105  * In btree leaf pages, it is possible to modify the LP_FLAGS without
1106  * emitting any WAL record. Hence, mask the line pointer flags. See
1107  * _bt_killitems(), _bt_check_unique() for details.
1108  */
1109  mask_lp_flags(page);
1110  }
1111 
1112  /*
1113  * BTP_HAS_GARBAGE is just an un-logged hint bit. So, mask it. See
1114  * _bt_delete_or_dedup_one_page(), _bt_killitems(), and _bt_check_unique()
1115  * for details.
1116  */
1117  maskopaq->btpo_flags &= ~BTP_HAS_GARBAGE;
1118 
1119  /*
1120  * During replay of a btree page split, we don't set the BTP_SPLIT_END
1121  * flag of the right sibling and initialize the cycle_id to 0 for the same
1122  * page. See btree_xlog_split() for details.
1123  */
1124  maskopaq->btpo_flags &= ~BTP_SPLIT_END;
1125  maskopaq->btpo_cycleid = 0;
1126 }
#define BTP_SPLIT_END
Definition: nbtree.h:79
void mask_page_hint_bits(Page page)
Definition: bufmask.c:46
BTPageOpaqueData * BTPageOpaque
Definition: nbtree.h:71
void mask_unused_space(Page page)
Definition: bufmask.c:71
BTCycleId btpo_cycleid
Definition: nbtree.h:68
void mask_page_lsn_and_checksum(Page page)
Definition: bufmask.c:31
#define PageGetSpecialPointer(page)
Definition: bufpage.h:326
uint16 btpo_flags
Definition: nbtree.h:67
void mask_lp_flags(Page page)
Definition: bufmask.c:95
#define BTP_HAS_GARBAGE
Definition: nbtree.h:80
Pointer Page
Definition: bufpage.h:78
#define P_ISLEAF(opaque)
Definition: nbtree.h:219

◆ btree_redo()

void btree_redo ( XLogReaderState record)

Definition at line 1013 of file nbtxlog.c.

References _bt_restore_meta(), btree_xlog_dedup(), btree_xlog_delete(), btree_xlog_insert(), btree_xlog_mark_page_halfdead(), btree_xlog_newroot(), btree_xlog_reuse_page(), btree_xlog_split(), btree_xlog_unlink_page(), btree_xlog_vacuum(), elog, MemoryContextReset(), MemoryContextSwitchTo(), PANIC, XLOG_BTREE_DEDUP, XLOG_BTREE_DELETE, XLOG_BTREE_INSERT_LEAF, XLOG_BTREE_INSERT_META, XLOG_BTREE_INSERT_POST, XLOG_BTREE_INSERT_UPPER, XLOG_BTREE_MARK_PAGE_HALFDEAD, XLOG_BTREE_META_CLEANUP, XLOG_BTREE_NEWROOT, XLOG_BTREE_REUSE_PAGE, XLOG_BTREE_SPLIT_L, XLOG_BTREE_SPLIT_R, XLOG_BTREE_UNLINK_PAGE, XLOG_BTREE_UNLINK_PAGE_META, XLOG_BTREE_VACUUM, XLogRecGetInfo, and XLR_INFO_MASK.

1014 {
1015  uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
1016  MemoryContext oldCtx;
1017 
1018  oldCtx = MemoryContextSwitchTo(opCtx);
1019  switch (info)
1020  {
1022  btree_xlog_insert(true, false, false, record);
1023  break;
1025  btree_xlog_insert(false, false, false, record);
1026  break;
1028  btree_xlog_insert(false, true, false, record);
1029  break;
1030  case XLOG_BTREE_SPLIT_L:
1031  btree_xlog_split(true, record);
1032  break;
1033  case XLOG_BTREE_SPLIT_R:
1034  btree_xlog_split(false, record);
1035  break;
1037  btree_xlog_insert(true, false, true, record);
1038  break;
1039  case XLOG_BTREE_DEDUP:
1040  btree_xlog_dedup(record);
1041  break;
1042  case XLOG_BTREE_VACUUM:
1043  btree_xlog_vacuum(record);
1044  break;
1045  case XLOG_BTREE_DELETE:
1046  btree_xlog_delete(record);
1047  break;
1049  btree_xlog_mark_page_halfdead(info, record);
1050  break;
1053  btree_xlog_unlink_page(info, record);
1054  break;
1055  case XLOG_BTREE_NEWROOT:
1056  btree_xlog_newroot(record);
1057  break;
1058  case XLOG_BTREE_REUSE_PAGE:
1059  btree_xlog_reuse_page(record);
1060  break;
1062  _bt_restore_meta(record, 0);
1063  break;
1064  default:
1065  elog(PANIC, "btree_redo: unknown op code %u", info);
1066  }
1067  MemoryContextSwitchTo(oldCtx);
1069 }
static void btree_xlog_vacuum(XLogReaderState *record)
Definition: nbtxlog.c:600
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
Definition: palloc.h:109
unsigned char uint8
Definition: c.h:439
#define XLOG_BTREE_INSERT_META
Definition: nbtxlog.h:29
void MemoryContextReset(MemoryContext context)
Definition: mcxt.c:143
static void btree_xlog_delete(XLogReaderState *record)
Definition: nbtxlog.c:653
#define PANIC
Definition: elog.h:50
#define XLOG_BTREE_NEWROOT
Definition: nbtxlog.h:37
static void _bt_restore_meta(XLogReaderState *record, uint8 block_id)
Definition: nbtxlog.c:84
static void btree_xlog_newroot(XLogReaderState *record)
Definition: nbtxlog.c:937
static void btree_xlog_reuse_page(XLogReaderState *record)
Definition: nbtxlog.c:1003
#define XLOG_BTREE_INSERT_LEAF
Definition: nbtxlog.h:27
#define XLOG_BTREE_VACUUM
Definition: nbtxlog.h:39
#define XLOG_BTREE_UNLINK_PAGE
Definition: nbtxlog.h:35
static void btree_xlog_dedup(XLogReaderState *record)
Definition: nbtxlog.c:466
static void btree_xlog_insert(bool isleaf, bool ismeta, bool posting, XLogReaderState *record)
Definition: nbtxlog.c:162
#define XLogRecGetInfo(decoder)
Definition: xlogreader.h:305
#define XLOG_BTREE_DELETE
Definition: nbtxlog.h:34
#define XLOG_BTREE_DEDUP
Definition: nbtxlog.h:33
#define XLOG_BTREE_REUSE_PAGE
Definition: nbtxlog.h:41
#define XLOG_BTREE_MARK_PAGE_HALFDEAD
Definition: nbtxlog.h:38
#define XLOG_BTREE_SPLIT_R
Definition: nbtxlog.h:31
static MemoryContext opCtx
Definition: nbtxlog.c:27
#define XLR_INFO_MASK
Definition: xlogrecord.h:62
#define XLOG_BTREE_INSERT_POST
Definition: nbtxlog.h:32
static void btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
Definition: nbtxlog.c:798
#define XLOG_BTREE_INSERT_UPPER
Definition: nbtxlog.h:28
static void btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
Definition: nbtxlog.c:713
#define elog(elevel,...)
Definition: elog.h:232
#define XLOG_BTREE_SPLIT_L
Definition: nbtxlog.h:30
#define XLOG_BTREE_UNLINK_PAGE_META
Definition: nbtxlog.h:36
static void btree_xlog_split(bool newitemonleft, XLogReaderState *record)
Definition: nbtxlog.c:253
#define XLOG_BTREE_META_CLEANUP
Definition: nbtxlog.h:43

◆ btree_xlog_cleanup()

void btree_xlog_cleanup ( void  )

Definition at line 1080 of file nbtxlog.c.

References MemoryContextDelete().

1081 {
1083  opCtx = NULL;
1084 }
void MemoryContextDelete(MemoryContext context)
Definition: mcxt.c:218
static MemoryContext opCtx
Definition: nbtxlog.c:27

◆ btree_xlog_startup()

void btree_xlog_startup ( void  )

Definition at line 1072 of file nbtxlog.c.

References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, and CurrentMemoryContext.

1073 {
1075  "Btree recovery temporary context",
1077 }
#define AllocSetContextCreate
Definition: memutils.h:173
#define ALLOCSET_DEFAULT_SIZES
Definition: memutils.h:195
MemoryContext CurrentMemoryContext
Definition: mcxt.c:42
static MemoryContext opCtx
Definition: nbtxlog.c:27