22
33Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
44Copyright (c) 2012, Facebook Inc.
5- Copyright (c) 2014, 2017 , MariaDB Corporation.
5+ Copyright (c) 2014, 2019 , MariaDB Corporation.
66
77This program is free software; you can redistribute it and/or modify it under
88the terms of the GNU General Public License as published by the Free Software
@@ -378,8 +378,7 @@ btr_root_adjust_on_import(
378378page = buf_block_get_frame (block);
379379page_zip = buf_block_get_page_zip (block);
380380
381- if (!page_is_root (page)) {
382-
381+ if (!fil_page_index_page_check (page) || page_has_siblings (page)) {
383382err = DB_CORRUPTION;
384383
385384} else if (dict_index_is_clust (index)) {
@@ -1161,11 +1160,11 @@ btr_free_root_check(
11611160buf_block_dbg_add_level (block, SYNC_TREE_NODE);
11621161
11631162if (fil_page_index_page_check (block->frame )
1164- && index_id == btr_page_get_index_id (block->frame )) {
1163+ && index_id == btr_page_get_index_id (block->frame )) {
11651164/* This should be a root page.
11661165It should not be possible to reassign the same
11671166index_id for some other index in the tablespace. */
1168- ut_ad (page_is_root (block->frame ));
1167+ ut_ad (! page_has_siblings (block->frame ));
11691168} else {
11701169block = NULL ;
11711170}
@@ -1358,7 +1357,8 @@ btr_free_but_not_root(
13581357ibool finished;
13591358mtr_t mtr;
13601359
1361- ut_ad (page_is_root (block->frame ));
1360+ ut_ad (fil_page_index_page_check (block->frame ));
1361+ ut_ad (!page_has_siblings (block->frame ));
13621362leaf_loop:
13631363mtr_start (&mtr);
13641364mtr_set_log_mode (&mtr, log_mode);
@@ -1430,7 +1430,6 @@ btr_free_if_exists(
14301430return ;
14311431}
14321432
1433- ut_ad (page_is_root (root->frame ));
14341433btr_free_but_not_root (root, mtr->get_log_mode ());
14351434mtr->set_named_space (page_id.space ());
14361435btr_free_root (root, mtr);
@@ -1453,8 +1452,6 @@ btr_free(
14531452page_id, page_size, RW_X_LATCH, &mtr);
14541453
14551454if (block) {
1456- ut_ad (page_is_root (block->frame ));
1457-
14581455btr_free_but_not_root (block, MTR_LOG_NO_REDO);
14591456btr_free_root (block, &mtr);
14601457}
@@ -1614,12 +1611,17 @@ btr_page_reorganize_low(
16141611
16151612ut_ad (mtr_is_block_fix (mtr, block, MTR_MEMO_PAGE_X_FIX, index->table ));
16161613btr_assert_not_corrupted (block, index);
1614+ ut_ad (fil_page_index_page_check (block->frame ));
1615+ ut_ad (index->is_dummy
1616+ || block->page .id .space () == index->space );
1617+ ut_ad (index->is_dummy
1618+ || block->page .id .page_no () != index->page
1619+ || !page_has_siblings (page));
16171620#ifdef UNIV_ZIP_DEBUG
16181621ut_a (!page_zip || page_zip_validate (page_zip, page, index));
16191622#endif /* UNIV_ZIP_DEBUG */
16201623data_size1 = page_get_data_size (page);
16211624max_ins_size1 = page_get_max_insert_size_after_reorganize (page, 1 );
1622-
16231625/* Turn logging off */
16241626mtr_log_t log_mode = mtr_set_log_mode (mtr, MTR_LOG_NONE);
16251627
@@ -1677,7 +1679,7 @@ btr_page_reorganize_low(
16771679 || page_get_max_trx_id (page) == 0
16781680 || (dict_index_is_sec_or_ibuf (index)
16791681 ? page_is_leaf (temp_page)
1680- : page_is_root (temp_page) ));
1682+ : block-> page . id . page_no () == index-> page ));
16811683
16821684/* If innodb_log_compressed_pages is ON, page reorganize should log the
16831685compressed page image.*/
@@ -1894,6 +1896,8 @@ btr_page_empty(
18941896
18951897ut_ad (mtr_is_block_fix (mtr, block, MTR_MEMO_PAGE_X_FIX, index->table ));
18961898ut_ad (page_zip == buf_block_get_page_zip (block));
1899+ ut_ad (!index->is_dummy );
1900+ ut_ad (index->space == block->page .id .space ());
18971901#ifdef UNIV_ZIP_DEBUG
18981902ut_a (!page_zip || page_zip_validate (page_zip, page, index));
18991903#endif /* UNIV_ZIP_DEBUG */
@@ -1906,7 +1910,8 @@ btr_page_empty(
19061910/* Preserve PAGE_ROOT_AUTO_INC when creating a clustered index
19071911root page. */
19081912const ib_uint64_t autoinc
1909- = dict_index_is_clust (index) && page_is_root (page)
1913+ = dict_index_is_clust (index)
1914+ && index->page == block->page .id .page_no ()
19101915? page_get_autoinc (page)
19111916: 0 ;
19121917
@@ -4225,6 +4230,8 @@ btr_discard_only_page_on_level(
42254230ulint page_level = 0 ;
42264231trx_id_t max_trx_id;
42274232
4233+ ut_ad (!index->is_dummy );
4234+
42284235/* Save the PAGE_MAX_TRX_ID from the leaf page. */
42294236max_trx_id = page_get_max_trx_id (buf_block_get_frame (block));
42304237
@@ -4235,11 +4242,10 @@ btr_discard_only_page_on_level(
42354242
42364243ut_a (page_get_n_recs (page) == 1 );
42374244ut_a (page_level == btr_page_get_level (page, mtr));
4238- ut_a (btr_page_get_prev (page, mtr) == FIL_NULL);
4239- ut_a (btr_page_get_next (page, mtr) == FIL_NULL);
4240-
4241- ut_ad (mtr_is_block_fix (
4242- mtr, block, MTR_MEMO_PAGE_X_FIX, index->table ));
4245+ ut_a (!page_has_siblings (page));
4246+ ut_ad (fil_page_index_page_check (page));
4247+ ut_ad (block->page .id .space () == index->space );
4248+ ut_ad (mtr_memo_contains (mtr, block, MTR_MEMO_PAGE_X_FIX));
42434249btr_search_drop_page_hash_index (block);
42444250
42454251if (dict_index_is_spatial (index)) {
@@ -4265,6 +4271,7 @@ btr_discard_only_page_on_level(
42654271
42664272/* block is the root page, which must be empty, except
42674273for the node pointer to the (now discarded) block(s). */
4274+ ut_ad (!page_has_siblings (block->frame ));
42684275
42694276#ifdef UNIV_BTR_DEBUG
42704277if (!dict_index_is_ibuf (index)) {
0 commit comments