change_metapage_usage_btree-v1.patch
application/octet-stream
Filename: change_metapage_usage_btree-v1.patch
Type: application/octet-stream
Part: 1
Message:
Re: Setting pd_lower in GIN metapage
Patch
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/access/nbtree/nbtinsert.c | 2 | 2 |
| src/backend/access/nbtree/nbtpage.c | 6 | 2 |
| src/backend/access/nbtree/nbtxlog.c | 2 | 1 |
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index bf963fc..5cbaba1 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -898,7 +898,7 @@ _bt_insertonpg(Relation rel,
xlmeta.fastroot = metad->btm_fastroot;
xlmeta.fastlevel = metad->btm_fastlevel;
- XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT);
+ XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT | REGBUF_STANDARD);
XLogRegisterBufData(2, (char *) &xlmeta, sizeof(xl_btree_metadata));
xlinfo = XLOG_BTREE_INSERT_META;
@@ -2032,7 +2032,7 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
XLogRegisterBuffer(0, rootbuf, REGBUF_WILL_INIT);
XLogRegisterBuffer(1, lbuf, REGBUF_STANDARD);
- XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT);
+ XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT | REGBUF_STANDARD);
md.root = rootblknum;
md.level = metad->btm_level;
diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c
index 5c817b6..8f38610 100644
--- a/src/backend/access/nbtree/nbtpage.c
+++ b/src/backend/access/nbtree/nbtpage.c
@@ -67,6 +67,10 @@ _bt_initmetapage(Page page, BlockNumber rootbknum, uint32 level)
/*
* Set pd_lower just past the end of the metadata. This is not essential
* but it makes the page look compressible to xlog.c.
+ *
+ * This won't be of any help unless we use option like REGBUF_STANDARD
+ * while registering the buffer for metapage as otherwise, it won't try to
+ * remove the hole while logging the full page image.
*/
((PageHeader) page)->pd_lower =
((char *) metad + sizeof(BTMetaPageData)) - (char *) page;
@@ -241,7 +245,7 @@ _bt_getroot(Relation rel, int access)
XLogBeginInsert();
XLogRegisterBuffer(0, rootbuf, REGBUF_WILL_INIT);
- XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT);
+ XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT | REGBUF_STANDARD);
md.root = rootblkno;
md.level = 0;
@@ -1827,7 +1831,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, bool *rightsib_empty)
if (BufferIsValid(metabuf))
{
- XLogRegisterBuffer(4, metabuf, REGBUF_WILL_INIT);
+ XLogRegisterBuffer(4, metabuf, REGBUF_WILL_INIT | REGBUF_STANDARD);
xlmeta.root = metad->btm_root;
xlmeta.level = metad->btm_level;
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index 3610c7c..81eb359 100644
--- a/src/backend/access/nbtree/nbtxlog.c
+++ b/src/backend/access/nbtree/nbtxlog.c
@@ -108,7 +108,8 @@ _bt_restore_meta(XLogReaderState *record, uint8 block_id)
/*
* Set pd_lower just past the end of the metadata. This is not essential
- * but it makes the page look compressible to xlog.c.
+ * but it makes the page look compressible to xlog.c. See
+ * _bt_initmetapage.
*/
((PageHeader) metapg)->pd_lower =
((char *) md + sizeof(BTMetaPageData)) - (char *) metapg;