aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Geoghegan <pg@bowt.ie>2020-04-14 09:33:18 -0700
committerPeter Geoghegan <pg@bowt.ie>2020-04-14 09:33:18 -0700
commit80634e3b181562015762b5846583ff67f8037a80 (patch)
tree054cdf34534efbe4442444845209c41be20c75a1
parent8128b0c152a67917535f50738ac26da4f984ddd9 (diff)
downloadpostgresql-80634e3b181562015762b5846583ff67f8037a80.tar.gz
postgresql-80634e3b181562015762b5846583ff67f8037a80.zip
Rearrange _bt_insertonpg() "update metapage" code.
Nest the "update metapage as part of insert into root-like page" branch inside the broader "insert into internal page" branch. This improves readability.
-rw-r--r--src/backend/access/nbtree/nbtinsert.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 3a7f25df813..c868f6aeccc 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -1306,6 +1306,7 @@ _bt_insertonpg(Relation rel,
* Leaf insert with posting list split. Must include
* postingoff field before newitem/orignewitem.
*/
+ Assert(isleaf);
xlinfo = XLOG_BTREE_INSERT_POST;
}
else
@@ -1313,31 +1314,34 @@ _bt_insertonpg(Relation rel,
/* Internal page insert, which finishes a split on cbuf */
xlinfo = XLOG_BTREE_INSERT_UPPER;
XLogRegisterBuffer(1, cbuf, REGBUF_STANDARD);
- }
- if (BufferIsValid(metabuf))
- {
- Assert(metad->btm_version >= BTREE_NOVAC_VERSION);
- xlmeta.version = metad->btm_version;
- xlmeta.root = metad->btm_root;
- xlmeta.level = metad->btm_level;
- xlmeta.fastroot = metad->btm_fastroot;
- xlmeta.fastlevel = metad->btm_fastlevel;
- xlmeta.oldest_btpo_xact = metad->btm_oldest_btpo_xact;
- xlmeta.last_cleanup_num_heap_tuples =
- metad->btm_last_cleanup_num_heap_tuples;
- xlmeta.allequalimage = metad->btm_allequalimage;
-
- XLogRegisterBuffer(2, metabuf, REGBUF_WILL_INIT | REGBUF_STANDARD);
- XLogRegisterBufData(2, (char *) &xlmeta, sizeof(xl_btree_metadata));
-
- xlinfo = XLOG_BTREE_INSERT_META;
+ if (BufferIsValid(metabuf))
+ {
+ /* Actually, it's an internal page insert + meta update */
+ xlinfo = XLOG_BTREE_INSERT_META;
+
+ Assert(metad->btm_version >= BTREE_NOVAC_VERSION);
+ xlmeta.version = metad->btm_version;
+ xlmeta.root = metad->btm_root;
+ xlmeta.level = metad->btm_level;
+ xlmeta.fastroot = metad->btm_fastroot;
+ xlmeta.fastlevel = metad->btm_fastlevel;
+ xlmeta.oldest_btpo_xact = metad->btm_oldest_btpo_xact;
+ xlmeta.last_cleanup_num_heap_tuples =
+ metad->btm_last_cleanup_num_heap_tuples;
+ xlmeta.allequalimage = metad->btm_allequalimage;
+
+ XLogRegisterBuffer(2, metabuf,
+ REGBUF_WILL_INIT | REGBUF_STANDARD);
+ XLogRegisterBufData(2, (char *) &xlmeta,
+ sizeof(xl_btree_metadata));
+ }
}
XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
if (postingoff == 0)
{
- /* Simple, common case -- log itup from caller */
+ /* Just log itup from caller */
XLogRegisterBufData(0, (char *) itup, IndexTupleSize(itup));
}
else