diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-06-06 16:22:09 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-06-06 16:22:09 +0300 |
commit | 57d4a242dac0238dd63ac05cd9d65a38d75a5d5f (patch) | |
tree | 323a71a864c38fe00502bd95926b4d05ab6854d6 /storage/innobase/dict/dict0crea.cc | |
parent | e097abfa662751cc337febad9d8584159f23cc92 (diff) | |
parent | 7e39470e337aeeab4ee3e73336c2fff88609529f (diff) | |
download | mariadb-git-57d4a242dac0238dd63ac05cd9d65a38d75a5d5f.tar.gz |
Merge 10.7 into 10.8
Diffstat (limited to 'storage/innobase/dict/dict0crea.cc')
-rw-r--r-- | storage/innobase/dict/dict0crea.cc | 64 |
1 files changed, 25 insertions, 39 deletions
diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index 47e9d9cff0c..f20e5e60154 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -754,28 +754,32 @@ dict_create_index_tree_step( mtr.start(); search_tuple = dict_create_search_tuple(node->ind_row, node->heap); + node->page_no = FIL_NULL; - btr_pcur_open(UT_LIST_GET_FIRST(dict_sys.sys_indexes->indexes), - search_tuple, PAGE_CUR_L, BTR_MODIFY_LEAF, - &pcur, &mtr); + dberr_t err = + btr_pcur_open(UT_LIST_GET_FIRST(dict_sys.sys_indexes->indexes), + search_tuple, PAGE_CUR_L, BTR_MODIFY_LEAF, + &pcur, &mtr); - btr_pcur_move_to_next_user_rec(&pcur, &mtr); + if (err != DB_SUCCESS) { +func_exit: + mtr.commit(); + return err; + } + btr_pcur_move_to_next_user_rec(&pcur, &mtr); - dberr_t err = DB_SUCCESS; + if (UNIV_UNLIKELY(btr_pcur_is_after_last_on_page(&pcur))) { + err = DB_CORRUPTION; + goto func_exit; + } - if (!index->is_readable()) { - node->page_no = FIL_NULL; - } else { + if (index->is_readable()) { index->set_modified(mtr); node->page_no = btr_create( index->type, index->table->space, - index->id, index, &mtr); - - if (node->page_no == FIL_NULL) { - err = DB_OUT_OF_FILE_SPACE; - } + index->id, index, &mtr, &err); DBUG_EXECUTE_IF("ib_import_create_index_failure_1", node->page_no = FIL_NULL; @@ -789,16 +793,13 @@ dict_create_index_tree_step( ut_ad(len == 4); mtr.write<4,mtr_t::MAYBE_NOP>(*btr_pcur_get_block(&pcur), data, node->page_no); - - mtr.commit(); - - return(err); + goto func_exit; } /***************************************************************//** Creates an index tree for the index if it is not a member of a cluster. Don't update SYSTEM TABLES. -@return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ +@return error code */ dberr_t dict_create_index_tree_in_mem( /*==========================*/ @@ -818,13 +819,14 @@ dict_create_index_tree_in_mem( ut_ad(index->is_readable()); ut_ad(!(index->table->flags2 & DICT_TF2_DISCARDED)); + dberr_t err; index->page = btr_create(index->type, index->table->space, - index->id, index, &mtr); + index->id, index, &mtr, &err); mtr_commit(&mtr); index->trx_id = trx->id; - return index->page == FIL_NULL ? DB_OUT_OF_FILE_SPACE : DB_SUCCESS; + return err; } /** Drop the index tree associated with a row in SYS_INDEXES table. @@ -1108,15 +1110,7 @@ dict_create_table_step( function_exit: trx->error_state = err; - if (err == DB_SUCCESS) { - /* Ok: do nothing */ - - } else if (err == DB_LOCK_WAIT) { - - return(NULL); - } else { - /* SQL error detected */ - + if (err != DB_SUCCESS) { return(NULL); } @@ -1300,16 +1294,8 @@ dict_create_index_step( function_exit: trx->error_state = err; - if (err == DB_SUCCESS) { - /* Ok: do nothing */ - - } else if (err == DB_LOCK_WAIT) { - - return(NULL); - } else { - /* SQL error detected */ - - return(NULL); + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { + return nullptr; } thr->run_node = que_node_get_parent(node); |