summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-09-25 16:08:48 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-09-25 16:08:48 +0300
commita340af922361e3958e5d6653c8b840771db282f2 (patch)
tree02f12f49840d69ccfc992e5219c2a8a0b7067949
parent5d0bab47fc4966fb67d7ad92e465badfb4803889 (diff)
downloadmariadb-git-a340af922361e3958e5d6653c8b840771db282f2.tar.gz
btr_block_get(): Remove redundant parameters
-rw-r--r--storage/innobase/btr/btr0btr.cc137
-rw-r--r--storage/innobase/btr/btr0bulk.cc12
-rw-r--r--storage/innobase/btr/btr0cur.cc87
-rw-r--r--storage/innobase/btr/btr0defragment.cc12
-rw-r--r--storage/innobase/btr/btr0pcur.cc22
-rw-r--r--storage/innobase/btr/btr0scrub.cc13
-rw-r--r--storage/innobase/gis/gis0rtree.cc25
-rw-r--r--storage/innobase/gis/gis0sea.cc4
-rw-r--r--storage/innobase/include/btr0btr.h59
-rw-r--r--storage/innobase/include/btr0btr.ic42
-rw-r--r--storage/innobase/include/btr0cur.h4
-rw-r--r--storage/innobase/include/btr0pcur.h3
-rw-r--r--storage/innobase/row/row0merge.cc7
13 files changed, 149 insertions, 278 deletions
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc
index dc331ee8d06..e36f675221d 100644
--- a/storage/innobase/btr/btr0btr.cc
+++ b/storage/innobase/btr/btr0btr.cc
@@ -215,7 +215,7 @@ buf_block_t*
btr_root_block_get(
/*===============*/
const dict_index_t* index, /*!< in: index tree */
- ulint mode, /*!< in: either RW_S_LATCH
+ rw_lock_type_t mode, /*!< in: either RW_S_LATCH
or RW_X_LATCH */
mtr_t* mtr) /*!< in: mtr */
{
@@ -223,10 +223,7 @@ btr_root_block_get(
return NULL;
}
- buf_block_t* block = btr_block_get(
- page_id_t(index->table->space_id, index->page),
- index->table->space->zip_size(), mode,
- *index, mtr);
+ buf_block_t* block = btr_block_get(*index, index->page, mode, mtr);
if (!block) {
index->table->file_unreadable = true;
@@ -354,11 +351,8 @@ btr_root_adjust_on_import(
dberr_t err;
mtr_t mtr;
page_t* page;
- buf_block_t* block;
page_zip_des_t* page_zip;
dict_table_t* table = index->table;
- const page_id_t page_id(table->space_id, index->page);
- const ulint zip_size = table->space->zip_size();
DBUG_EXECUTE_IF("ib_import_trigger_corruption_3",
return(DB_CORRUPTION););
@@ -367,7 +361,17 @@ btr_root_adjust_on_import(
mtr_set_log_mode(&mtr, MTR_LOG_NO_REDO);
- block = btr_block_get(page_id, zip_size, RW_X_LATCH, *index, &mtr);
+ buf_block_t* block = buf_page_get_gen(
+ page_id_t(table->space->id, index->page),
+ table->space->zip_size(), RW_X_LATCH, NULL, BUF_GET,
+ __FILE__, __LINE__,
+ &mtr, &err);
+ if (!block) {
+ ut_ad(err != DB_SUCCESS);
+ goto func_exit;
+ }
+
+ buf_block_dbg_add_level(block, SYNC_TREE_NODE);
page = buf_block_get_frame(block);
page_zip = buf_block_get_page_zip(block);
@@ -418,6 +422,7 @@ btr_root_adjust_on_import(
err = DB_CORRUPTION;
}
+func_exit:
mtr_commit(&mtr);
return(err);
@@ -827,10 +832,8 @@ btr_node_ptr_get_child(
== page_get_space_id(page_align(node_ptr)));
return btr_block_get(
- page_id_t(index->table->space_id,
- btr_node_ptr_get_child_page_no(node_ptr, offsets)),
- index->table->space->zip_size(),
- RW_SX_LATCH, *index, mtr);
+ *index, btr_node_ptr_get_child_page_no(node_ptr, offsets),
+ RW_SX_LATCH, mtr);
}
/************************************************************//**
@@ -2564,18 +2567,14 @@ btr_attach_half_pages(
prev_page_no = btr_page_get_prev(page, mtr);
next_page_no = btr_page_get_next(page, mtr);
- const ulint space = block->page.id.space();
-
/* for consistency, both blocks should be locked, before change */
if (prev_page_no != FIL_NULL && direction == FSP_DOWN) {
- prev_block = btr_block_get(
- page_id_t(space, prev_page_no), block->zip_size(),
- RW_X_LATCH, *index, mtr);
+ prev_block = btr_block_get(*index, prev_page_no, RW_X_LATCH,
+ mtr);
}
if (next_page_no != FIL_NULL && direction != FSP_DOWN) {
- next_block = btr_block_get(
- page_id_t(space, next_page_no), block->zip_size(),
- RW_X_LATCH, *index, mtr);
+ next_block = btr_block_get(*index, next_page_no, RW_X_LATCH,
+ mtr);
}
/* Get the level of the split pages */
@@ -2721,11 +2720,11 @@ btr_insert_into_right_sibling(
rec_t* rec = NULL;
ulint max_size;
- const ulint space = block->page.id.space();
-
- next_block = btr_block_get(
- page_id_t(space, next_page_no), block->zip_size(),
- RW_X_LATCH, *cursor->index, mtr);
+ next_block = btr_block_get(*cursor->index, next_page_no, RW_X_LATCH,
+ mtr);
+ if (UNIV_UNLIKELY(!next_block)) {
+ return NULL;
+ }
next_page = buf_block_get_frame(next_block);
bool is_leaf = page_is_leaf(next_page);
@@ -3262,12 +3261,8 @@ void btr_level_list_remove(const buf_block_t& block, const dict_index_t& index,
/* Update page links of the level */
if (prev_page_no != FIL_NULL) {
- buf_block_t* prev_block
- = btr_block_get(page_id_t(index.table->space->id,
- prev_page_no),
- block.zip_size(), RW_X_LATCH,
- index, mtr);
-
+ buf_block_t* prev_block = btr_block_get(
+ index, prev_page_no, RW_X_LATCH, mtr);
page_t* prev_page
= buf_block_get_frame(prev_block);
#ifdef UNIV_BTR_DEBUG
@@ -3283,9 +3278,7 @@ void btr_level_list_remove(const buf_block_t& block, const dict_index_t& index,
if (next_page_no != FIL_NULL) {
buf_block_t* next_block = btr_block_get(
- page_id_t(index.table->space->id, next_page_no),
- block.zip_size(), RW_X_LATCH, index, mtr);
-
+ index, next_page_no, RW_X_LATCH, mtr);
page_t* next_page
= buf_block_get_frame(next_block);
#ifdef UNIV_BTR_DEBUG
@@ -4250,13 +4243,10 @@ btr_discard_page(
left_page_no = btr_page_get_prev(buf_block_get_frame(block), mtr);
right_page_no = btr_page_get_next(buf_block_get_frame(block), mtr);
- const ulint zip_size = index->table->space->zip_size();
ut_d(bool parent_is_different = false);
if (left_page_no != FIL_NULL) {
- merge_block = btr_block_get(
- page_id_t(index->table->space_id, left_page_no),
- zip_size, RW_X_LATCH, *index, mtr);
-
+ merge_block = btr_block_get(*index, left_page_no, RW_X_LATCH,
+ mtr);
merge_page = buf_block_get_frame(merge_block);
#ifdef UNIV_BTR_DEBUG
ut_a(btr_page_get_next(merge_page, mtr)
@@ -4269,10 +4259,8 @@ btr_discard_page(
&parent_cursor)))
== btr_cur_get_rec(&parent_cursor)));
} else if (right_page_no != FIL_NULL) {
- merge_block = btr_block_get(
- page_id_t(index->table->space_id, right_page_no),
- zip_size, RW_X_LATCH, *index, mtr);
-
+ merge_block = btr_block_get(*index, right_page_no, RW_X_LATCH,
+ mtr);
merge_page = buf_block_get_frame(merge_block);
#ifdef UNIV_BTR_DEBUG
ut_a(btr_page_get_prev(merge_page, mtr)
@@ -4875,7 +4863,6 @@ btr_validate_level(
page = buf_block_get_frame(block);
fil_space_t* space = index->table->space;
- const ulint zip_size = space->zip_size();
while (level != btr_page_get_level(page)) {
const rec_t* node_ptr;
@@ -4925,11 +4912,8 @@ btr_validate_level(
&mtr, savepoint2, block);
savepoint2 = mtr_set_savepoint(&mtr);
- block = btr_block_get(
- page_id_t(index->table->space_id,
- left_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
+ block = btr_block_get(*index, left_page_no,
+ RW_SX_LATCH, &mtr);
page = buf_block_get_frame(block);
left_page_no = btr_page_get_prev(page, &mtr);
}
@@ -4997,11 +4981,8 @@ loop:
const rec_t* right_rec;
savepoint = mtr_set_savepoint(&mtr);
- right_block = btr_block_get(
- page_id_t(index->table->space_id, right_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
-
+ right_block = btr_block_get(*index, right_page_no, RW_SX_LATCH,
+ &mtr);
right_page = buf_block_get_frame(right_block);
if (btr_page_get_prev(right_page, &mtr)
@@ -5174,17 +5155,11 @@ loop:
mtr_release_block_at_savepoint(
&mtr, savepoint, right_block);
- btr_block_get(
- page_id_t(index->table->space_id,
- parent_right_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
-
- right_block = btr_block_get(
- page_id_t(index->table->space_id,
- right_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
+ btr_block_get(*index, parent_right_page_no,
+ RW_SX_LATCH, &mtr);
+ right_block = btr_block_get(*index,
+ right_page_no,
+ RW_SX_LATCH, &mtr);
}
btr_cur_position(
@@ -5257,27 +5232,18 @@ node_ptr_fails:
if (!lockout) {
if (rightmost_child) {
if (parent_right_page_no != FIL_NULL) {
- btr_block_get(
- page_id_t(
- index->table->space_id,
- parent_right_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
+ btr_block_get(*index,
+ parent_right_page_no,
+ RW_SX_LATCH, &mtr);
}
} else if (parent_page_no != FIL_NULL) {
- btr_block_get(
- page_id_t(index->table->space_id,
- parent_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
+ btr_block_get(*index, parent_page_no,
+ RW_SX_LATCH, &mtr);
}
}
- block = btr_block_get(
- page_id_t(index->table->space_id, right_page_no),
- zip_size,
- RW_SX_LATCH, *index, &mtr);
-
+ block = btr_block_get(*index, right_page_no, RW_SX_LATCH,
+ &mtr);
page = buf_block_get_frame(block);
goto loop;
@@ -5380,10 +5346,7 @@ btr_can_merge_with_page(
index = btr_cur_get_index(cursor);
page = btr_cur_get_page(cursor);
- const page_id_t page_id(index->table->space_id, page_no);
- const ulint zip_size = index->table->space->zip_size();
-
- mblock = btr_block_get(page_id, zip_size, RW_X_LATCH, *index, mtr);
+ mblock = btr_block_get(*index, page_no, RW_X_LATCH, mtr);
mpage = buf_block_get_frame(mblock);
n_recs = page_get_n_recs(page);
@@ -5399,7 +5362,7 @@ btr_can_merge_with_page(
/* If compression padding tells us that merging will result in
too packed up page i.e.: which is likely to cause compression
failure then don't merge the pages. */
- if (zip_size && page_is_leaf(mpage)
+ if (mblock->page.zip.data && page_is_leaf(mpage)
&& (page_get_data_size(mpage) + data_size
>= dict_index_zip_pad_optimal_page_size(index))) {
diff --git a/storage/innobase/btr/btr0bulk.cc b/storage/innobase/btr/btr0bulk.cc
index 63fbb1772d0..e559f1dfc8c 100644
--- a/storage/innobase/btr/btr0bulk.cc
+++ b/storage/innobase/btr/btr0bulk.cc
@@ -119,10 +119,8 @@ PageBulk::init()
m_index->id, &m_mtr);
}
} else {
- new_block = btr_block_get(
- page_id_t(m_index->table->space_id, m_page_no),
- m_index->table->space->zip_size(),
- RW_X_LATCH, *m_index, &m_mtr);
+ new_block = btr_block_get(*m_index, m_page_no, RW_X_LATCH,
+ &m_mtr);
new_page = buf_block_get_frame(new_block);
new_page_zip = buf_block_get_page_zip(new_block);
@@ -1015,10 +1013,8 @@ BtrBulk::finish(dberr_t err)
mtr_x_lock(&m_index->lock, &mtr);
ut_ad(last_page_no != FIL_NULL);
- last_block = btr_block_get(
- page_id_t(m_index->table->space_id, last_page_no),
- m_index->table->space->zip_size(),
- RW_X_LATCH, *m_index, &mtr);
+ last_block = btr_block_get(*m_index, last_page_no, RW_X_LATCH,
+ &mtr);
first_rec = page_rec_get_next(
page_get_infimum_rec(last_block->frame));
ut_ad(page_rec_is_user_rec(first_rec));
diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc
index f30716afea7..bb032b0a7e8 100644
--- a/storage/innobase/btr/btr0cur.cc
+++ b/storage/innobase/btr/btr0cur.cc
@@ -209,8 +209,6 @@ btr_rec_free_externally_stored_fields(
/** Latches the leaf page or pages requested.
@param[in] block leaf page where the search converged
-@param[in] page_id page id of the leaf
-@param[in] zip_size ROW_FORMAT=COMPRESSED page size, or 0
@param[in] latch_mode BTR_SEARCH_LEAF, ...
@param[in] cursor cursor
@param[in] mtr mini-transaction
@@ -218,13 +216,11 @@ btr_rec_free_externally_stored_fields(
btr_latch_leaves_t
btr_cur_latch_leaves(
buf_block_t* block,
- const page_id_t page_id,
- ulint zip_size,
ulint latch_mode,
btr_cur_t* cursor,
mtr_t* mtr)
{
- ulint mode;
+ rw_lock_type_t mode;
ulint left_page_no;
ulint right_page_no;
buf_block_t* get_block;
@@ -235,6 +231,7 @@ btr_cur_latch_leaves(
compile_time_assert(int(MTR_MEMO_PAGE_S_FIX) == int(RW_S_LATCH));
compile_time_assert(int(MTR_MEMO_PAGE_X_FIX) == int(RW_X_LATCH));
compile_time_assert(int(MTR_MEMO_PAGE_SX_FIX) == int(RW_SX_LATCH));
+ ut_ad(block->page.id.space() == cursor->index->table->space->id);
spatial = dict_index_is_spatial(cursor->index) && cursor->rtr_info;
ut_ad(buf_page_in_file(&block->page));
@@ -250,8 +247,8 @@ btr_cur_latch_leaves(
mode = latch_mode == BTR_MODIFY_LEAF ? RW_X_LATCH : RW_S_LATCH;
latch_leaves.savepoints[1] = mtr_set_savepoint(mtr);
- get_block = btr_block_get(page_id, zip_size, mode,
- *cursor->index, mtr);
+ get_block = btr_block_get(*cursor->index,
+ block->page.id.page_no(), mode, mtr);
latch_leaves.blocks[1] = get_block;
#ifdef UNIV_BTR_DEBUG
ut_a(page_is_comp(get_block->frame) == page_is_comp(page));
@@ -271,7 +268,6 @@ btr_cur_latch_leaves(
MTR_MEMO_X_LOCK | MTR_MEMO_SX_LOCK));
/* x-latch also siblings from left to right */
left_page_no = btr_page_get_prev(page, mtr);
- mode = latch_mode;
if (left_page_no != FIL_NULL) {
@@ -282,8 +278,7 @@ btr_cur_latch_leaves(
latch_leaves.savepoints[0] = mtr_set_savepoint(mtr);
get_block = btr_block_get(
- page_id_t(page_id.space(), left_page_no),
- zip_size, RW_X_LATCH, *cursor->index, mtr);
+ *cursor->index, left_page_no, RW_X_LATCH, mtr);
latch_leaves.blocks[0] = get_block;
if (spatial) {
@@ -299,7 +294,8 @@ btr_cur_latch_leaves(
latch_leaves.savepoints[1] = mtr_set_savepoint(mtr);
get_block = btr_block_get(
- page_id, zip_size, RW_X_LATCH, *cursor->index, mtr);
+ *cursor->index, block->page.id.page_no(),
+ RW_X_LATCH, mtr);
latch_leaves.blocks[1] = get_block;
#ifdef UNIV_BTR_DEBUG
@@ -328,9 +324,9 @@ btr_cur_latch_leaves(
mtr);
}
latch_leaves.savepoints[2] = mtr_set_savepoint(mtr);
- get_block = btr_block_get(
- page_id_t(page_id.space(), right_page_no),
- zip_size, RW_X_LATCH, *cursor->index, mtr);
+ get_block = btr_block_get(*cursor->index,
+ right_page_no, RW_X_LATCH,
+ mtr);
latch_leaves.blocks[2] = get_block;
#ifdef UNIV_BTR_DEBUG
ut_a(page_is_comp(get_block->frame)
@@ -357,8 +353,7 @@ btr_cur_latch_leaves(
if (left_page_no != FIL_NULL) {
latch_leaves.savepoints[0] = mtr_set_savepoint(mtr);
get_block = btr_block_get(
- page_id_t(page_id.space(), left_page_no),
- zip_size, mode, *cursor->index, mtr);
+ *cursor->index, left_page_no, mode, mtr);
latch_leaves.blocks[0] = get_block;
cursor->left_block = get_block;
#ifdef UNIV_BTR_DEBUG
@@ -370,8 +365,8 @@ btr_cur_latch_leaves(
}
latch_leaves.savepoints[1] = mtr_set_savepoint(mtr);
- get_block = btr_block_get(page_id, zip_size, mode,
- *cursor->index, mtr);
+ get_block = btr_block_get(*cursor->index,
+ block->page.id.page_no(), mode, mtr);
latch_leaves.blocks[1] = get_block;
#ifdef UNIV_BTR_DEBUG
ut_a(page_is_comp(get_block->frame) == page_is_comp(page));
@@ -729,7 +724,7 @@ btr_cur_optimistic_latch_leaves(
unsigned line,
mtr_t* mtr)
{
- ulint mode;
+ rw_lock_type_t mode;
ulint left_page_no;
switch (*latch_mode) {
@@ -761,15 +756,10 @@ btr_cur_optimistic_latch_leaves(
buf_block_get_frame(block), mtr);
rw_lock_s_unlock(&block->lock);
- if (left_page_no != FIL_NULL) {
- cursor->left_block = btr_block_get(
- page_id_t(cursor->index->table->space_id,
- left_page_no),
- cursor->index->table->space->zip_size(),
- mode, *cursor->index, mtr);
- } else {
- cursor->left_block = NULL;
- }
+ cursor->left_block = left_page_no != FIL_NULL
+ ? btr_block_get(*cursor->index, left_page_no, mode,
+ mtr)
+ : NULL;
if (buf_page_optimistic_get(mode, block, modify_clock,
file, line, mtr)) {
@@ -1787,10 +1777,8 @@ retry_page_get:
if (height == 0) {
if (rw_latch == RW_NO_LATCH) {
-
latch_leaves = btr_cur_latch_leaves(
- block, page_id, zip_size, latch_mode,
- cursor, mtr);
+ block, latch_mode, cursor, mtr);
}
switch (latch_mode) {
@@ -2346,20 +2334,12 @@ need_opposite_intention:
ut_ad(!autoinc);
if (upper_rw_latch == RW_NO_LATCH) {
- /* latch the page */
- buf_block_t* child_block;
-
- if (latch_mode == BTR_CONT_MODIFY_TREE) {
- child_block = btr_block_get(
- page_id, zip_size, RW_X_LATCH,
- *index, mtr);
- } else {
- ut_ad(latch_mode == BTR_CONT_SEARCH_TREE);
- child_block = btr_block_get(
- page_id, zip_size, RW_SX_LATCH,
- *index, mtr);
- }
-
+ ut_ad(latch_mode == BTR_CONT_MODIFY_TREE
+ || latch_mode == BTR_CONT_SEARCH_TREE);
+ buf_block_t* child_block = btr_block_get(
+ *index, page_id.page_no(),
+ latch_mode == BTR_CONT_MODIFY_TREE
+ ? RW_X_LATCH : RW_SX_LATCH, mtr);
btr_assert_not_corrupted(child_block, index);
} else {
ut_ad(mtr_memo_contains(mtr, block, upper_rw_latch));
@@ -2653,13 +2633,11 @@ btr_cur_open_at_index_side_func(
if (height == level) {
if (srv_read_only_mode) {
btr_cur_latch_leaves(
- block, page_id, zip_size,
- latch_mode, cursor, mtr);
+ block, latch_mode, cursor, mtr);
} else if (height == 0) {
if (rw_latch == RW_NO_LATCH) {
- btr_cur_latch_leaves(
- block, page_id, zip_size,
- latch_mode, cursor, mtr);
+ btr_cur_latch_leaves(block, latch_mode,
+ cursor, mtr);
}
/* In versions <= 3.23.52 we had
forgotten to release the tree latch
@@ -3007,9 +2985,8 @@ btr_cur_open_at_rnd_pos_func(
if (height == 0) {
if (rw_latch == RW_NO_LATCH
|| srv_read_only_mode) {
- btr_cur_latch_leaves(
- block, page_id, zip_size,
- latch_mode, cursor, mtr);
+ btr_cur_latch_leaves(block, latch_mode, cursor,
+ mtr);
}
/* btr_cur_open_at_index_side_func() and
@@ -7474,9 +7451,7 @@ struct btr_blob_log_check_t {
if (m_op == BTR_STORE_INSERT_BULK) {
mtr_x_lock(dict_index_get_lock(index), m_mtr);
m_pcur->btr_cur.page_cur.block = btr_block_get(
- page_id_t(index->table->space_id, page_no),
- index->table->space->zip_size(),
- RW_X_LATCH, *index, m_mtr);
+ *index, page_no, RW_X_LATCH, m_mtr);
m_pcur->btr_cur.page_cur.rec
= m_pcur->btr_cur.page_cur.block->frame
+ offs;
diff --git a/storage/innobase/btr/btr0defragment.cc b/storage/innobase/btr/btr0defragment.cc
index 4ccf033db7a..a4211afbb9a 100644
--- a/storage/innobase/btr/btr0defragment.cc
+++ b/storage/innobase/btr/btr0defragment.cc
@@ -162,11 +162,7 @@ btr_defragment_add_index(
*err = DB_SUCCESS;
mtr_start(&mtr);
- // Load index rood page.
- buf_block_t* block = btr_block_get(
- page_id_t(index->table->space_id, index->page),
- index->table->space->zip_size(),
- RW_NO_LATCH, *index, &mtr);
+ buf_block_t* block = btr_root_block_get(index, RW_NO_LATCH, &mtr);
page_t* page = NULL;
if (block) {
@@ -369,7 +365,7 @@ btr_defragment_calc_n_recs_for_size(
Merge as many records from the from_block to the to_block. Delete
the from_block if all records are successfully merged to to_block.
@return the to_block to target for next merge operation. */
-UNIV_INTERN
+static
buf_block_t*
btr_defragment_merge_pages(
dict_index_t* index, /*!< in: index tree */
@@ -589,9 +585,7 @@ btr_defragment_n_pages(
break;
}
- blocks[i] = btr_block_get(page_id_t(index->table->space_id,
- page_no), zip_size,
- RW_X_LATCH, *index, mtr);
+ blocks[i] = btr_block_get(*index, page_no, RW_X_LATCH, mtr);
}
if (n_pages == 1) {
diff --git a/storage/innobase/btr/btr0pcur.cc b/storage/innobase/btr/btr0pcur.cc
index 04f776b7ff7..9027f9a25c6 100644
--- a/storage/innobase/btr/btr0pcur.cc
+++ b/storage/innobase/btr/btr0pcur.cc
@@ -439,29 +439,23 @@ btr_pcur_move_to_next_page(
last record of the current page */
mtr_t* mtr) /*!< in: mtr */
{
- ulint next_page_no;
- page_t* page;
- buf_block_t* next_block;
- page_t* next_page;
- ulint mode;
-
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
ut_ad(btr_pcur_is_after_last_on_page(cursor));
cursor->old_stored = false;
- page = btr_pcur_get_page(cursor);
+ const page_t* page = btr_pcur_get_page(cursor);
if (UNIV_UNLIKELY(!page)) {
return;
}
- next_page_no = btr_page_get_next(page, mtr);
+ const ulint next_page_no = mach_read_from_4(page + FIL_PAGE_NEXT);
ut_ad(next_page_no != FIL_NULL);
- mode = cursor->latch_mode;
+ ulint mode = cursor->latch_mode;
switch (mode) {
case BTR_SEARCH_TREE:
mode = BTR_SEARCH_LEAF;
@@ -470,18 +464,14 @@ btr_pcur_move_to_next_page(
mode = BTR_MODIFY_LEAF;
}
- buf_block_t* block = btr_pcur_get_block(cursor);
-
- next_block = btr_block_get(
- page_id_t(block->page.id.space(), next_page_no),
- block->zip_size(), mode,
- *btr_pcur_get_btr_cur(cursor)->index, mtr);
+ buf_block_t* next_block = btr_block_get(
+ *btr_pcur_get_btr_cur(cursor)->index, next_page_no, mode, mtr);
if (UNIV_UNLIKELY(!next_block)) {
return;
}
- next_page = buf_block_get_frame(next_block);
+ const page_t* next_page = buf_block_get_frame(next_block);
#ifdef UNIV_BTR_DEBUG
ut_a(page_is_comp(next_page) == page_is_comp(page));
ut_a(btr_page_get_prev(next_page, mtr)
diff --git a/storage/innobase/btr/btr0scrub.cc b/storage/innobase/btr/btr0scrub.cc
index 9d8b18778cf..5cfd6f5f8b0 100644
--- a/storage/innobase/btr/btr0scrub.cc
+++ b/storage/innobase/btr/btr0scrub.cc
@@ -434,7 +434,6 @@ btr_pessimistic_scrub(
const ulint page_no = mach_read_from_4(page + FIL_PAGE_OFFSET);
const ulint left_page_no = mach_read_from_4(page + FIL_PAGE_PREV);
const ulint right_page_no = mach_read_from_4(page + FIL_PAGE_NEXT);
- const ulint zip_size = index->table->space->zip_size();
/**
* When splitting page, we need X-latches on left/right brothers
@@ -449,16 +448,12 @@ btr_pessimistic_scrub(
*/
mtr->release_block_at_savepoint(scrub_data->savepoint, block);
- btr_block_get(
- page_id_t(index->table->space_id, left_page_no),
- zip_size, RW_X_LATCH, *index, mtr);
+ btr_block_get(*index, left_page_no, RW_X_LATCH, mtr);
/**
* Refetch block and re-initialize page
*/
- block = btr_block_get(
- page_id_t(index->table->space_id, page_no),
- zip_size, RW_X_LATCH, *index, mtr);
+ block = btr_block_get(*index, page_no, RW_X_LATCH, mtr);
page = buf_block_get_frame(block);
@@ -470,9 +465,7 @@ btr_pessimistic_scrub(
}
if (right_page_no != FIL_NULL) {
- btr_block_get(
- page_id_t(index->table->space_id, right_page_no),
- zip_size, RW_X_LATCH, *index, mtr);
+ btr_block_get(*index, right_page_no, RW_X_LATCH, mtr);
}
/* arguments to btr_page_split_and_insert */
diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc
index a763dc7ded0..320a23017fa 100644
--- a/storage/innobase/gis/gis0rtree.cc
+++ b/storage/innobase/gis/gis0rtree.cc
@@ -648,7 +648,6 @@ rtr_adjust_upper_level(
dtuple_t* node_ptr_upper;
ulint prev_page_no;
ulint next_page_no;
- ulint space;
page_cur_t* page_cursor;
lock_prdt_t prdt;
lock_prdt_t new_prdt;
@@ -752,16 +751,12 @@ rtr_adjust_upper_level(
/* Get the previous and next pages of page */
prev_page_no = btr_page_get_prev(page, mtr);
next_page_no = btr_page_get_next(page, mtr);
- space = block->page.id.space();
ut_ad(block->zip_size() == index->table->space->zip_size());
/* Update page links of the level */
if (prev_page_no != FIL_NULL) {
- page_id_t prev_page_id(space, prev_page_no);
-
buf_block_t* prev_block = btr_block_get(
- prev_page_id, block->zip_size(), RW_X_LATCH,
- *index, mtr);
+ *index, prev_page_no, RW_X_LATCH, mtr);
#ifdef UNIV_BTR_DEBUG
ut_a(page_is_comp(prev_block->frame) == page_is_comp(page));
ut_a(btr_page_get_next(prev_block->frame, mtr)
@@ -774,11 +769,8 @@ rtr_adjust_upper_level(
}
if (next_page_no != FIL_NULL) {
- page_id_t next_page_id(space, next_page_no);
-
buf_block_t* next_block = btr_block_get(
- next_page_id, block->zip_size(), RW_X_LATCH,
- *index, mtr);
+ *index, next_page_no, RW_X_LATCH, mtr);
#ifdef UNIV_BTR_DEBUG
ut_a(page_is_comp(next_block->frame) == page_is_comp(page));
ut_a(btr_page_get_prev(next_block->frame, mtr)
@@ -1879,16 +1871,17 @@ rtr_estimate_n_rows_in_range(
index->set_modified(mtr);
mtr_s_lock(&index->lock, &mtr);
- buf_block_t* block = btr_block_get(
- page_id_t(index->table->space_id, index->page),
- index->table->space->zip_size(),
- RW_S_LATCH, *index, &mtr);
+ buf_block_t* block = btr_root_block_get(index, RW_S_LATCH, &mtr);
+ if (!block) {
+err_exit:
+ mtr.commit();
+ return HA_POS_ERROR;
+ }
const page_t* page = buf_block_get_frame(block);
const unsigned n_recs = page_header_get_field(page, PAGE_N_RECS);
if (n_recs == 0) {
- mtr.commit();
- return(HA_POS_ERROR);
+ goto err_exit;
}
/* Scan records in root page and calculate area. */
diff --git a/storage/innobase/gis/gis0sea.cc b/storage/innobase/gis/gis0sea.cc
index 7bb880aecc2..0ec21c813b3 100644
--- a/storage/innobase/gis/gis0sea.cc
+++ b/storage/innobase/gis/gis0sea.cc
@@ -422,9 +422,7 @@ rtr_pcur_getnext_from_path(
btr_cur_latch_leaves(
block,
- page_id_t(index->table->space_id,
- block->page.id.page_no()),
- zip_size, BTR_MODIFY_TREE,
+ BTR_MODIFY_TREE,
btr_cur, mtr);
}
diff --git a/storage/innobase/include/btr0btr.h b/storage/innobase/include/btr0btr.h
index 138dcfd157b..5b4fd333692 100644
--- a/storage/innobase/include/btr0btr.h
+++ b/storage/innobase/include/btr0btr.h
@@ -217,36 +217,53 @@ btr_height_get(
mtr_t* mtr) /*!< in/out: mini-transaction */
MY_ATTRIBUTE((warn_unused_result));
-/** Gets a buffer page and declares its latching order level.
-@param[in] page_id page id
-@param[in] zip_size ROW_FORMAT=COMPRESSED page size, or 0
+/** Get an index page and declare its latching order level.
+@param[in] index index tree
+@param[in] page page number
@param[in] mode latch mode
@param[in] file file name
@param[in] line line where called
-@param[in] index index tree
@param[in,out] mtr mini-transaction
@return block */
-UNIV_INLINE
-buf_block_t*
-btr_block_get_func(
- const page_id_t page_id,
- ulint zip_size,
- ulint mode,
- const char* file,
- unsigned line,
- const dict_index_t& index,
- mtr_t* mtr);
+inline buf_block_t* btr_block_get_func(const dict_index_t& index, ulint page,
+ ulint mode,
+ const char* file, unsigned line,
+ mtr_t* mtr)
+{
+ dberr_t err;
+
+ if (buf_block_t* block = buf_page_get_gen(
+ page_id_t(index.table->space->id, page),
+ index.table->space->zip_size(), mode, NULL, BUF_GET,
+ file, line, mtr, &err)) {
+ ut_ad(err == DB_SUCCESS);
+ if (mode != RW_NO_LATCH) {
+ buf_block_dbg_add_level(block, index.is_ibuf()
+ ? SYNC_IBUF_TREE_NODE
+ : SYNC_TREE_NODE);
+ }
+ return block;
+ } else {
+ ut_ad(err != DB_SUCCESS);
+
+ if (err == DB_DECRYPTION_FAILED) {
+ if (index.table) {
+ index.table->file_unreadable = true;
+ }
+ }
+
+ return NULL;
+ }
+}
/** Gets a buffer page and declares its latching order level.
-@param page_id tablespace/page identifier
-@param zip_size ROW_FORMAT=COMPRESSED page size, or 0
-@param mode latch mode
@param index index tree
+@param page page number
+@param mode latch mode
@param mtr mini-transaction handle
@return the block descriptor */
-# define btr_block_get(page_id, zip_size, mode, index, mtr) \
- btr_block_get_func(page_id, zip_size, mode, \
- __FILE__, __LINE__, index, mtr)
+# define btr_block_get(index, page, mode, mtr) \
+ btr_block_get_func(index, page, mode, __FILE__, __LINE__, mtr)
/**************************************************************//**
Gets the index id field of a page.
@return index id */
@@ -689,7 +706,7 @@ buf_block_t*
btr_root_block_get(
/*===============*/
const dict_index_t* index, /*!< in: index tree */
- ulint mode, /*!< in: either RW_S_LATCH
+ rw_lock_type_t mode, /*!< in: either RW_S_LATCH
or RW_X_LATCH */
mtr_t* mtr); /*!< in: mtr */
diff --git a/storage/innobase/include/btr0btr.ic b/storage/innobase/include/btr0btr.ic
index 709a23ca090..93f27e0f4e7 100644
--- a/storage/innobase/include/btr0btr.ic
+++ b/storage/innobase/include/btr0btr.ic
@@ -29,48 +29,6 @@ Created 6/2/1994 Heikki Tuuri
#include "mtr0log.h"
#include "page0zip.h"
-/** Gets a buffer page and declares its latching order level.
-@param[in] page_id page id
-@param[in] zip_size ROW_FORMAT=COMPRESSED page size, or 0
-@param[in] mode latch mode
-@param[in] file file name
-@param[in] line line where called
-@param[in] index index tree, may be NULL if it is not an insert buffer
-tree
-@param[in,out] mtr mini-transaction
-@return block */
-UNIV_INLINE
-buf_block_t*
-btr_block_get_func(
- const page_id_t page_id,
- ulint zip_size,
- ulint mode,
- const char* file,
- unsigned line,
- const dict_index_t& index,
- mtr_t* mtr)
-{
- buf_block_t* block;
- dberr_t err=DB_SUCCESS;
-
- block = buf_page_get_gen(
- page_id, zip_size, mode, NULL, BUF_GET, file, line, mtr, &err);
-
- if (err == DB_DECRYPTION_FAILED) {
- if (index.table) {
- index.table->file_unreadable = true;
- }
- }
-
- if (block && mode != RW_NO_LATCH) {
- buf_block_dbg_add_level(block, index.is_ibuf()
- ? SYNC_IBUF_TREE_NODE
- : SYNC_TREE_NODE);
- }
-
- return block;
-}
-
/**************************************************************//**
Sets the index id field of a page. */
UNIV_INLINE
diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h
index b28fc48405d..9d25e7e583b 100644
--- a/storage/innobase/include/btr0cur.h
+++ b/storage/innobase/include/btr0cur.h
@@ -821,8 +821,6 @@ btr_rec_set_deleted_flag(
/** Latches the leaf page or pages requested.
@param[in] block leaf page where the search converged
-@param[in] page_id page id of the leaf
-@param[in] zip_size ROW_FORMAT=COMPRESSED page size, or 0
@param[in] latch_mode BTR_SEARCH_LEAF, ...
@param[in] cursor cursor
@param[in] mtr mini-transaction
@@ -830,8 +828,6 @@ btr_rec_set_deleted_flag(
btr_latch_leaves_t
btr_cur_latch_leaves(
buf_block_t* block,
- const page_id_t page_id,
- ulint zip_size,
ulint latch_mode,
btr_cur_t* cursor,
mtr_t* mtr);
diff --git a/storage/innobase/include/btr0pcur.h b/storage/innobase/include/btr0pcur.h
index 20f4730f48f..1ffc2eb4d76 100644
--- a/storage/innobase/include/btr0pcur.h
+++ b/storage/innobase/include/btr0pcur.h
@@ -526,7 +526,8 @@ struct btr_pcur_t{
ulint buf_size;
btr_pcur_t() :
- btr_cur(), latch_mode(0), old_stored(false), old_rec(NULL),
+ btr_cur(), latch_mode(RW_NO_LATCH),
+ old_stored(false), old_rec(NULL),
old_n_fields(0), rel_pos(btr_pcur_pos_t(0)),
block_when_stored(NULL),
modify_clock(0), withdraw_clock(0),
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index 9d73d397478..ec299ba36fc 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -2028,11 +2028,8 @@ end_of_index:
block = page_cur_get_block(cur);
block = btr_block_get(
- page_id_t(block->page.id.space(),
- next_page_no),
- block->zip_size(),
- BTR_SEARCH_LEAF,
- *clust_index, &mtr);
+ *clust_index, next_page_no,
+ RW_S_LATCH, &mtr);
btr_leaf_page_release(page_cur_get_block(cur),
BTR_SEARCH_LEAF, &mtr);