diff --git a/src/storage/tablet/ob_tablet_binding_helper.cpp b/src/storage/tablet/ob_tablet_binding_helper.cpp index 7e3803b09a..53a90ebecd 100644 --- a/src/storage/tablet/ob_tablet_binding_helper.cpp +++ b/src/storage/tablet/ob_tablet_binding_helper.cpp @@ -223,6 +223,7 @@ int ObTabletBindingHelper::set_scn_for_create(const ObBatchCreateTabletArg &arg, if (OB_FAIL(helper.set_scn(info.data_tablet_id_))) { LOG_WARN("failed to set log ts for orig tablet", K(ret)); } + for (int64_t j = 0; OB_SUCC(ret) && j < info.tablet_ids_.count(); ++j) { int64_t aux_idx = -1; if (ObTabletCreateDeleteHelper::find_related_aux_info(arg, info.tablet_ids_.at(j), aux_idx) @@ -253,6 +254,7 @@ int ObTabletBindingHelper::unlock_tablet_binding_for_create(const ObBatchCreateT if (OB_FAIL(helper.unlock_tablet_binding(info.data_tablet_id_))) { LOG_WARN("failed to lock tablet binding", K(ret)); } + for (int64_t j = 0; OB_SUCC(ret) && j < info.tablet_ids_.count(); ++j) { int64_t aux_idx = -1; if (ObTabletCreateDeleteHelper::find_related_aux_info(arg, info.tablet_ids_.at(j), aux_idx) @@ -269,7 +271,7 @@ int ObTabletBindingHelper::unlock_tablet_binding_for_create(const ObBatchCreateT return ret; } -// bind aux and hidden tablets to non-creating data tablet +// bind aux and hidden tablets to creating and non-creating data tablet int ObTabletBindingHelper::modify_tablet_binding_for_create( const ObBatchCreateTabletArg &arg, ObLS &ls, @@ -277,25 +279,14 @@ int ObTabletBindingHelper::modify_tablet_binding_for_create( { int ret = OB_SUCCESS; ObArray empty_array; - ObSArray skip_idx; ObTabletBindingHelper helper(ls, trans_flags); for (int64_t i = 0; OB_SUCC(ret) && i < arg.tablets_.count(); i++) { const ObCreateTabletInfo &info = arg.tablets_[i]; bool need_modify = false; bool tablet_ids_as_aux_tablets = false; - if (is_contain(skip_idx, i)) { - // do nothing - } else if (ObTabletCreateDeleteHelper::is_pure_hidden_tablets(info)) { + if (ObTabletCreateDeleteHelper::is_pure_hidden_tablets(info)) { need_modify = true; - // tablet_ids_as_aux_tablets = false; - for (int64_t j = 0; OB_SUCC(ret) && j < info.tablet_ids_.count(); ++j) { - int64_t aux_idx = -1; - if (ObTabletCreateDeleteHelper::find_related_aux_info(arg, info.tablet_ids_.at(j), aux_idx) - && OB_FAIL(skip_idx.push_back(aux_idx))) { - LOG_WARN("failed to push related aux idx", K(ret), K(aux_idx)); - } - } - } else if (ObTabletCreateDeleteHelper::is_pure_aux_tablets(info)) { + } else if (ObTabletCreateDeleteHelper::is_pure_aux_tablets(info) || ObTabletCreateDeleteHelper::is_mixed_tablets(info)) { if (has_lob_tablets(arg, info)) { need_modify = true; tablet_ids_as_aux_tablets = true; @@ -469,9 +460,9 @@ int ObTabletBindingHelper::check_skip_tx_end(const ObTabletID &tablet_id, const ObTabletTxMultiSourceDataUnit tx_data; ObTabletBindingHelper helper(ls, trans_flags); - if (SCN::invalid_scn() == trans_flags.scn_) { + if (!trans_flags.scn_.is_valid()) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid args", K(ret), K(tablet_id), K(ls)); + LOG_WARN("invalid args", K(ret), K(tablet_id), K(trans_flags)); } else if (OB_FAIL(helper.get_tablet(tablet_id, tablet_handle))) { if (OB_NO_NEED_UPDATE == ret) { skip = true; @@ -564,22 +555,12 @@ int ObTabletBindingHelper::fix_binding_info_for_create_tablets(const ObBatchCrea { int ret = OB_SUCCESS; // fix data_tablet binding_info for pure_aux_table - ObSArray skip_idx; for (int64_t i = 0; OB_SUCC(ret) && i < arg.tablets_.count(); i++) { const ObCreateTabletInfo &info = arg.tablets_[i]; bool need_modify = false; - if (is_contain(skip_idx, i)) { - // do nothing - } else if (ObTabletCreateDeleteHelper::is_pure_hidden_tablets(info)) { + if (ObTabletCreateDeleteHelper::is_pure_hidden_tablets(info)) { need_modify = true; - for (int64_t j = 0; OB_SUCC(ret) && j < info.tablet_ids_.count(); ++j) { - int64_t aux_idx = -1; - if (ObTabletCreateDeleteHelper::find_related_aux_info(arg, info.tablet_ids_.at(j), aux_idx) - && OB_FAIL(skip_idx.push_back(aux_idx))) { - LOG_WARN("failed to push related aux idx", K(ret), K(aux_idx)); - } - } - } else if (ObTabletCreateDeleteHelper::is_pure_aux_tablets(info)) { + } else if (ObTabletCreateDeleteHelper::is_pure_aux_tablets(info) || ObTabletCreateDeleteHelper::is_mixed_tablets(info)) { if (has_lob_tablets(arg, info)) { need_modify = true; } diff --git a/src/storage/tablet/ob_tablet_create_delete_helper.cpp b/src/storage/tablet/ob_tablet_create_delete_helper.cpp index 3a6588f42d..a1fbcb5f7e 100644 --- a/src/storage/tablet/ob_tablet_create_delete_helper.cpp +++ b/src/storage/tablet/ob_tablet_create_delete_helper.cpp @@ -738,27 +738,18 @@ int ObTabletCreateDeleteHelper::do_tx_end_create_tablets( } } - // modify data_tablet status_info and binding_info for pure_aux_table - ObSArray skip_idx; + // modify data_tablet status_info and binding_info for (int64_t i = 0; OB_SUCC(ret) && i < arg.tablets_.count(); i++) { const ObCreateTabletInfo &info = arg.tablets_[i]; bool need_modify = false; - if (is_contain(skip_idx, i)) { - // do nothing - } else if (is_pure_hidden_tablets(info)) { + if (is_pure_hidden_tablets(info)) { need_modify = true; - for (int64_t j = 0; OB_SUCC(ret) && j < info.tablet_ids_.count(); ++j) { - int64_t aux_idx = -1; - if (find_related_aux_info(arg, info.tablet_ids_.at(j), aux_idx) - && OB_FAIL(skip_idx.push_back(aux_idx))) { - LOG_WARN("failed to push related aux idx", K(ret), K(aux_idx)); - } - } - } else if (is_pure_aux_tablets(info)) { + } else if (is_pure_aux_tablets(info) || is_mixed_tablets(info)) { if (ObTabletBindingHelper::has_lob_tablets(arg, info)) { need_modify = true; } } + if (OB_SUCC(ret) && need_modify) { bool skip = false; if (trans_flags.for_replay_ @@ -1496,25 +1487,6 @@ int ObTabletCreateDeleteHelper::create_sstable( return ret; } -int ObTabletCreateDeleteHelper::verify_tablets_existence( - const ObBatchCreateTabletArg &arg, - ObIArray &tablet_create_info_array) -{ - int ret = OB_SUCCESS; - bool is_valid = false; - - if (OB_FAIL(check_tablet_existence(arg, is_valid))) { - LOG_WARN("failed to check tablet existence", K(ret), K(PRINT_CREATE_ARG(arg))); - } else if (!is_valid) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected error, some tablet does not exist", K(ret)); - } else if (OB_FAIL(build_tablet_create_info(arg, tablet_create_info_array))) { - LOG_WARN("failed to build tablet create info", K(ret)); - } - - return ret; -} - int ObTabletCreateDeleteHelper::verify_tablets_absence( const ObBatchCreateTabletArg &arg, ObIArray &tablet_create_info_array) diff --git a/src/storage/tablet/ob_tablet_create_delete_helper.h b/src/storage/tablet/ob_tablet_create_delete_helper.h index d1420ebea3..2890117bf4 100644 --- a/src/storage/tablet/ob_tablet_create_delete_helper.h +++ b/src/storage/tablet/ob_tablet_create_delete_helper.h @@ -151,9 +151,6 @@ public: static int prepare_data_for_binding_info(const ObTabletID &tablet_id, const ObLS &ls, const transaction::ObMulSourceDataNotifyArg &trans_flags); private: - static int verify_tablets_existence( - const obrpc::ObBatchCreateTabletArg &arg, - common::ObIArray &tablet_create_info_array); static int verify_tablets_absence( const obrpc::ObBatchCreateTabletArg &arg, common::ObIArray &tablet_create_info_array); diff --git a/src/storage/tablet/ob_tablet_meta.cpp b/src/storage/tablet/ob_tablet_meta.cpp index ec4ede922c..ab510de4b4 100644 --- a/src/storage/tablet/ob_tablet_meta.cpp +++ b/src/storage/tablet/ob_tablet_meta.cpp @@ -285,12 +285,16 @@ int ObTabletMeta::init( if (OB_NOT_NULL(tablet_meta) && tablet_meta->clog_checkpoint_scn_ > old_tablet_meta.clog_checkpoint_scn_) { if (OB_FAIL(autoinc_seq_.assign(tablet_meta->autoinc_seq_))) { LOG_WARN("failed to assign autoinc seq", K(ret)); + } else if (OB_FAIL(ddl_data_.assign(tablet_meta->ddl_data_))) { + LOG_WARN("failed to assign ddl data", K(ret)); } else { tx_data_ = tablet_meta->tx_data_; } } else { if (OB_FAIL(autoinc_seq_.assign(autoinc_seq))) { LOG_WARN("failed to assign autoinc seq", K(ret)); + } else if (OB_FAIL(ddl_data_.assign(ddl_data))) { + LOG_WARN("failed to assign ddl data", K(ret)); } else { tx_data_ = tx_data; } @@ -309,9 +313,6 @@ int ObTabletMeta::init( compat_mode_ = old_tablet_meta.compat_mode_; ha_status_ = old_tablet_meta.ha_status_; report_status_ = old_tablet_meta.report_status_; //old tablet meta report status already reset - if (FAILEDx(ddl_data_.assign(ddl_data))) { - LOG_WARN("failed to assign ddl data", K(ret)); - } table_store_flag_ = table_store_flag; ddl_checkpoint_scn_ = old_tablet_meta.ddl_checkpoint_scn_; ddl_start_scn_ = old_tablet_meta.ddl_start_scn_; diff --git a/unittest/storage/test_lob_common.h b/unittest/storage/test_lob_common.h index 4c93066ca7..77b99934a4 100644 --- a/unittest/storage/test_lob_common.h +++ b/unittest/storage/test_lob_common.h @@ -87,6 +87,9 @@ int TestLobCommon::create_data_tablet( } else if (OB_FAIL(ls->get_tablet_svr()->on_redo_create_tablets(arg, trans_flags))) { STORAGE_LOG(WARN, "failed to redo create tablets", K(ret), K(arg)); } else if (FALSE_IT(trans_flags.scn_ = share::SCN::plus(trans_flags.scn_, 1))) { + } else if (OB_FAIL(ls->get_tablet_svr()->on_tx_end_create_tablets(arg, trans_flags))) { + STORAGE_LOG(WARN, "failed to tx end create tablets", K(ret), K(arg)); + } else if (FALSE_IT(trans_flags.scn_ = share::SCN::plus(trans_flags.scn_, 1))) { } else if (OB_FAIL(ls->get_tablet_svr()->on_commit_create_tablets(arg, trans_flags))) { STORAGE_LOG(WARN, "failed to commit create tablets", K(ret), K(arg)); } diff --git a/unittest/storage/test_tablet_helper.h b/unittest/storage/test_tablet_helper.h index 6a81e0aef3..1dbdd66f23 100644 --- a/unittest/storage/test_tablet_helper.h +++ b/unittest/storage/test_tablet_helper.h @@ -45,6 +45,9 @@ int TestTabletHelper::create_tablet(ObLSTabletService &ls_tablet_svr, obrpc::ObB } else if (OB_FAIL(ls_tablet_svr.on_redo_create_tablets(arg, trans_flags))) { STORAGE_LOG(WARN, "failed to redo create tablets", K(ret), K(arg)); } else if (FALSE_IT(trans_flags.scn_ = share::SCN::plus(trans_flags.scn_, 1))) { + } else if (OB_FAIL(ls_tablet_svr.on_tx_end_create_tablets(arg, trans_flags))) { + STORAGE_LOG(WARN, "failed to tx end create tablets", K(ret), K(arg)); + } else if (FALSE_IT(trans_flags.scn_ = share::SCN::plus(trans_flags.scn_, 1))) { } else if (OB_FAIL(ls_tablet_svr.on_commit_create_tablets(arg, trans_flags))) { STORAGE_LOG(WARN, "failed to commit create tablets", K(ret), K(arg)); }