Remove dedicated B-tree root-split record types.
Since commit 40dae7ec53, which changed the way b-tree page splitting works, there has been no difference in the handling of root, and non-root split WAL records. We don't need to distinguish them anymore If you're worried about the loss of debugging information, note that usually a root split record will normally be followed by a WAL record to create the new root page. The root page will also have the BTP_ROOT flag set on the page itself, and there is a pointer to it from the metapage. Author: Aleksander Alekseev Discussion: https://www.postgresql.org/message-id/20170406122116.GA11081@e733.localdomain
This commit is contained in:
parent
77d05706be
commit
0c504a80cf
@ -980,7 +980,6 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
|
|||||||
rightoff;
|
rightoff;
|
||||||
OffsetNumber maxoff;
|
OffsetNumber maxoff;
|
||||||
OffsetNumber i;
|
OffsetNumber i;
|
||||||
bool isroot;
|
|
||||||
bool isleaf;
|
bool isleaf;
|
||||||
|
|
||||||
/* Acquire a new page to split into */
|
/* Acquire a new page to split into */
|
||||||
@ -1019,7 +1018,6 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
|
|||||||
lopaque = (BTPageOpaque) PageGetSpecialPointer(leftpage);
|
lopaque = (BTPageOpaque) PageGetSpecialPointer(leftpage);
|
||||||
ropaque = (BTPageOpaque) PageGetSpecialPointer(rightpage);
|
ropaque = (BTPageOpaque) PageGetSpecialPointer(rightpage);
|
||||||
|
|
||||||
isroot = P_ISROOT(oopaque);
|
|
||||||
isleaf = P_ISLEAF(oopaque);
|
isleaf = P_ISLEAF(oopaque);
|
||||||
|
|
||||||
/* if we're splitting this page, it won't be the root when we're done */
|
/* if we're splitting this page, it won't be the root when we're done */
|
||||||
@ -1330,11 +1328,7 @@ _bt_split(Relation rel, Buffer buf, Buffer cbuf, OffsetNumber firstright,
|
|||||||
(char *) rightpage + ((PageHeader) rightpage)->pd_upper,
|
(char *) rightpage + ((PageHeader) rightpage)->pd_upper,
|
||||||
((PageHeader) rightpage)->pd_special - ((PageHeader) rightpage)->pd_upper);
|
((PageHeader) rightpage)->pd_special - ((PageHeader) rightpage)->pd_upper);
|
||||||
|
|
||||||
if (isroot)
|
xlinfo = newitemonleft ? XLOG_BTREE_SPLIT_L : XLOG_BTREE_SPLIT_R;
|
||||||
xlinfo = newitemonleft ? XLOG_BTREE_SPLIT_L_ROOT : XLOG_BTREE_SPLIT_R_ROOT;
|
|
||||||
else
|
|
||||||
xlinfo = newitemonleft ? XLOG_BTREE_SPLIT_L : XLOG_BTREE_SPLIT_R;
|
|
||||||
|
|
||||||
recptr = XLogInsert(RM_BTREE_ID, xlinfo);
|
recptr = XLogInsert(RM_BTREE_ID, xlinfo);
|
||||||
|
|
||||||
PageSetLSN(origpage, recptr);
|
PageSetLSN(origpage, recptr);
|
||||||
|
@ -193,7 +193,7 @@ btree_xlog_insert(bool isleaf, bool ismeta, XLogReaderState *record)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
btree_xlog_split(bool onleft, bool isroot, XLogReaderState *record)
|
btree_xlog_split(bool onleft, XLogReaderState *record)
|
||||||
{
|
{
|
||||||
XLogRecPtr lsn = record->EndRecPtr;
|
XLogRecPtr lsn = record->EndRecPtr;
|
||||||
xl_btree_split *xlrec = (xl_btree_split *) XLogRecGetData(record);
|
xl_btree_split *xlrec = (xl_btree_split *) XLogRecGetData(record);
|
||||||
@ -996,16 +996,10 @@ btree_redo(XLogReaderState *record)
|
|||||||
btree_xlog_insert(false, true, record);
|
btree_xlog_insert(false, true, record);
|
||||||
break;
|
break;
|
||||||
case XLOG_BTREE_SPLIT_L:
|
case XLOG_BTREE_SPLIT_L:
|
||||||
btree_xlog_split(true, false, record);
|
btree_xlog_split(true, record);
|
||||||
break;
|
break;
|
||||||
case XLOG_BTREE_SPLIT_R:
|
case XLOG_BTREE_SPLIT_R:
|
||||||
btree_xlog_split(false, false, record);
|
btree_xlog_split(false, record);
|
||||||
break;
|
|
||||||
case XLOG_BTREE_SPLIT_L_ROOT:
|
|
||||||
btree_xlog_split(true, true, record);
|
|
||||||
break;
|
|
||||||
case XLOG_BTREE_SPLIT_R_ROOT:
|
|
||||||
btree_xlog_split(false, true, record);
|
|
||||||
break;
|
break;
|
||||||
case XLOG_BTREE_VACUUM:
|
case XLOG_BTREE_VACUUM:
|
||||||
btree_xlog_vacuum(record);
|
btree_xlog_vacuum(record);
|
||||||
|
@ -35,8 +35,6 @@ btree_desc(StringInfo buf, XLogReaderState *record)
|
|||||||
}
|
}
|
||||||
case XLOG_BTREE_SPLIT_L:
|
case XLOG_BTREE_SPLIT_L:
|
||||||
case XLOG_BTREE_SPLIT_R:
|
case XLOG_BTREE_SPLIT_R:
|
||||||
case XLOG_BTREE_SPLIT_L_ROOT:
|
|
||||||
case XLOG_BTREE_SPLIT_R_ROOT:
|
|
||||||
{
|
{
|
||||||
xl_btree_split *xlrec = (xl_btree_split *) rec;
|
xl_btree_split *xlrec = (xl_btree_split *) rec;
|
||||||
|
|
||||||
@ -121,12 +119,6 @@ btree_identify(uint8 info)
|
|||||||
case XLOG_BTREE_SPLIT_R:
|
case XLOG_BTREE_SPLIT_R:
|
||||||
id = "SPLIT_R";
|
id = "SPLIT_R";
|
||||||
break;
|
break;
|
||||||
case XLOG_BTREE_SPLIT_L_ROOT:
|
|
||||||
id = "SPLIT_L_ROOT";
|
|
||||||
break;
|
|
||||||
case XLOG_BTREE_SPLIT_R_ROOT:
|
|
||||||
id = "SPLIT_R_ROOT";
|
|
||||||
break;
|
|
||||||
case XLOG_BTREE_VACUUM:
|
case XLOG_BTREE_VACUUM:
|
||||||
id = "VACUUM";
|
id = "VACUUM";
|
||||||
break;
|
break;
|
||||||
|
@ -28,8 +28,7 @@
|
|||||||
#define XLOG_BTREE_INSERT_META 0x20 /* same, plus update metapage */
|
#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_L 0x30 /* add index tuple with split */
|
||||||
#define XLOG_BTREE_SPLIT_R 0x40 /* as above, new item on right */
|
#define XLOG_BTREE_SPLIT_R 0x40 /* as above, new item on right */
|
||||||
#define XLOG_BTREE_SPLIT_L_ROOT 0x50 /* add tuple with split of root */
|
/* 0x50 and 0x60 are unused */
|
||||||
#define XLOG_BTREE_SPLIT_R_ROOT 0x60 /* as above, new item on right */
|
|
||||||
#define XLOG_BTREE_DELETE 0x70 /* delete leaf index 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 0x80 /* delete a half-dead page */
|
||||||
#define XLOG_BTREE_UNLINK_PAGE_META 0x90 /* same, and update metapage */
|
#define XLOG_BTREE_UNLINK_PAGE_META 0x90 /* same, and update metapage */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user