Any changes on page should be done in critical section, so move
_bt_upgrademetapage into critical section. Improve comment. Found by Amit
Kapila during post-commit review of
857f9c36.
Author: Amit Kapila
metapg = BufferGetPage(metabuf);
metad = BTPageGetMeta(metapg);
- /* upgrade metapage if needed */
- if (metad->btm_version < BTREE_VERSION)
- _bt_upgrademetapage(metapg);
-
/*
* Create downlink item for left page (old root). Since this will be the
* first item in a non-leaf page, it implicitly has minus-infinity key
/* NO EREPORT(ERROR) from here till newroot op is logged */
START_CRIT_SECTION();
+ /* upgrade metapage if needed */
+ if (metad->btm_version < BTREE_VERSION)
+ _bt_upgrademetapage(metapg);
+
/* set btree special data */
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
rootopaque->btpo_prev = rootopaque->btpo_next = P_NONE;
LockBuffer(metabuf, BUFFER_LOCK_UNLOCK);
LockBuffer(metabuf, BT_WRITE);
- /* upgrade metapage if needed */
- if (metad->btm_version < BTREE_VERSION)
- _bt_upgrademetapage(metapg);
-
/*
* Race condition: if someone else initialized the metadata between
* the time we released the read lock and acquired the write lock, we
/* NO ELOG(ERROR) till meta is updated */
START_CRIT_SECTION();
+ /* upgrade metapage if needed */
+ if (metad->btm_version < BTREE_VERSION)
+ _bt_upgrademetapage(metapg);
+
metad->btm_root = rootblkno;
metad->btm_level = 0;
metad->btm_fastroot = rootblkno;
BlockNumber btm_fastroot; /* current "fast" root location */
uint32 btm_fastlevel; /* tree level of the "fast" root page */
/* following fields are available since page version 3 */
- TransactionId btm_oldest_btpo_xact; /* oldest btpo_xact among of deleted
+ TransactionId btm_oldest_btpo_xact; /* oldest btpo_xact among all deleted
* pages */
float8 btm_last_cleanup_num_heap_tuples; /* number of heap tuples
* during last cleanup */