diff --git a/src/storage/ddl/ob_ddl_redo_log_writer.cpp b/src/storage/ddl/ob_ddl_redo_log_writer.cpp index 1905bf76a98ec5bab8f8946589b492d54af7ae43..7df91245519682d9323be45a870f6270e6da1d01 100644 --- a/src/storage/ddl/ob_ddl_redo_log_writer.cpp +++ b/src/storage/ddl/ob_ddl_redo_log_writer.cpp @@ -889,33 +889,21 @@ int ObDDLMacroBlockRedoWriter::remote_write_macro_redo(const ObAddr &leader_addr ObDDLSSTableRedoWriter::ObDDLSSTableRedoWriter() : is_inited_(false), remote_write_(false), start_log_ts_(0), - ls_handle_(), tablet_handle_(), ddl_redo_handle_(), leader_addr_(), leader_ls_id_(), tablet_id_(), buffer_(nullptr) + ls_id_(), tablet_id_(), ddl_redo_handle_(), leader_addr_(), leader_ls_id_(), buffer_(nullptr) { } int ObDDLSSTableRedoWriter::init(const ObLSID &ls_id, const ObTabletID &tablet_id) { int ret = OB_SUCCESS; - ObLS *ls = nullptr; - ObLSService *ls_service = nullptr; - bool is_cache_hit = false; if (OB_UNLIKELY(is_inited_)) { ret = OB_INIT_TWICE; LOG_WARN("ObDDLSSTableRedoWriter has been inited twice", K(ret)); } else if (OB_UNLIKELY(!ls_id.is_valid() || !tablet_id.is_valid())) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid arguments", K(ret), K(ls_id), K(tablet_id)); - } else if (OB_ISNULL(ls_service = MTL(ObLSService*))) { - ret = OB_ERR_UNEXPECTED; - LOG_ERROR("ls service should not be null", K(ret)); - } else if (OB_FAIL(ls_service->get_ls(ls_id, ls_handle_, ObLSGetMod::DDL_MOD))) { - LOG_WARN("get ls failed", K(ret), K(ls_id)); - } else if (OB_ISNULL(ls = ls_handle_.get_ls())) { - ret = OB_ERR_UNEXPECTED; - LOG_ERROR("ls should not be null", K(ret)); - } else if (OB_FAIL(ls->get_tablet(tablet_id, tablet_handle_))) { - LOG_WARN("fail to get tablet handle", K(ret), K(tablet_id)); } else { + ls_id_ = ls_id; tablet_id_ = tablet_id; is_inited_ = true; } @@ -925,7 +913,9 @@ int ObDDLSSTableRedoWriter::init(const ObLSID &ls_id, const ObTabletID &tablet_i int ObDDLSSTableRedoWriter::start_ddl_redo(const ObITable::TableKey &table_key, ObDDLKvMgrHandle &ddl_kv_mgr_handle) { int ret = OB_SUCCESS; + ObLSHandle ls_handle; ObLS *ls = nullptr; + ObTabletHandle tablet_handle; ObDDLStartLog log; ddl_kv_mgr_handle.reset(); int64_t tmp_log_ts = 0; @@ -937,13 +927,17 @@ int ObDDLSSTableRedoWriter::start_ddl_redo(const ObITable::TableKey &table_key, LOG_WARN("invalid arguments", K(ret), K(table_key)); } else if (OB_FAIL(log.init(table_key, GET_MIN_CLUSTER_VERSION()))) { LOG_WARN("fail to init DDLStartLog", K(ret), K(table_key), "cluster_version", GET_MIN_CLUSTER_VERSION()); - } else if (OB_ISNULL(ls = ls_handle_.get_ls())) { + } else if (OB_FAIL(MTL(ObLSService *)->get_ls(ls_id_, ls_handle, ObLSGetMod::DDL_MOD))) { + LOG_WARN("get ls failed", K(ret), K(ls_id_)); + } else if (OB_ISNULL(ls = ls_handle.get_ls())) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("ls should not be null", K(ret), K(table_key)); + } else if (OB_FAIL(ls->get_tablet(tablet_id_, tablet_handle, ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) { + LOG_WARN("get tablet handle failed", K(ret), K(ls_id_), K(tablet_id_)); } else if (OB_FAIL(ObDDLRedoLogWriter::get_instance().write_ddl_start_log(log, ls->get_log_handler(), tmp_log_ts))) { LOG_WARN("fail to write ddl start log", K(ret), K(table_key)); } else if (FALSE_IT(set_start_log_ts(tmp_log_ts))) { - } else if (OB_FAIL(tablet_handle_.get_obj()->get_ddl_kv_mgr(ddl_kv_mgr_handle, true/*try_create*/))) { + } else if (OB_FAIL(tablet_handle.get_obj()->get_ddl_kv_mgr(ddl_kv_mgr_handle, true/*try_create*/))) { LOG_WARN("create ddl kv mgr failed", K(ret)); } else if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->ddl_start(table_key, get_start_log_ts(), log.get_cluster_version()))) { LOG_WARN("start ddl log failed", K(ret), K(table_key), K(start_log_ts_), K(log)); @@ -954,6 +948,7 @@ int ObDDLSSTableRedoWriter::start_ddl_redo(const ObITable::TableKey &table_key, int ObDDLSSTableRedoWriter::write_redo_log(const ObDDLMacroBlockRedoInfo &redo_info, const blocksstable::MacroBlockId ¯o_block_id) { int ret = OB_SUCCESS; + ObLSHandle ls_handle; ObLS *ls = nullptr; const int64_t BUF_SIZE = 2 * 1024 * 1024 + 16 * 1024; if (OB_UNLIKELY(!is_inited_)) { @@ -962,7 +957,9 @@ int ObDDLSSTableRedoWriter::write_redo_log(const ObDDLMacroBlockRedoInfo &redo_i } else if (OB_UNLIKELY(!redo_info.is_valid())) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid arguments", K(ret)); - } else if (OB_ISNULL(ls = ls_handle_.get_ls())) { + } else if (OB_FAIL(MTL(ObLSService *)->get_ls(ls_id_, ls_handle, ObLSGetMod::DDL_MOD))) { + LOG_WARN("get ls failed", K(ret), K(ls_id_)); + } else if (OB_ISNULL(ls = ls_handle.get_ls())) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("ls should not be null", K(ret)); } else if (nullptr == buffer_ && OB_ISNULL(buffer_ = static_cast(ob_malloc(BUF_SIZE)))) { @@ -1028,6 +1025,7 @@ int ObDDLSSTableRedoWriter::write_prepare_log(const ObITable::TableKey &table_ke DEBUG_SYNC(BEFORE_DDL_WRITE_PREPARE_LOG); #endif prepare_log_ts = 0; + ObLSHandle ls_handle; ObLS *ls = nullptr; ObDDLPrepareLog log; ObDDLCommitLogHandle handle; @@ -1039,7 +1037,9 @@ int ObDDLSSTableRedoWriter::write_prepare_log(const ObITable::TableKey &table_ke LOG_WARN("invalid arguments", K(ret), K(table_key), K(start_log_ts_)); } else if (OB_FAIL(log.init(table_key, get_start_log_ts()))) { LOG_WARN("fail to init DDLCommitLog", K(ret), K(table_key), K(start_log_ts_)); - } else if (OB_ISNULL(ls = ls_handle_.get_ls())) { + } else if (OB_FAIL(MTL(ObLSService *)->get_ls(ls_id_, ls_handle, ObLSGetMod::DDL_MOD))) { + LOG_WARN("get ls failed", K(ret), K(ls_id_)); + } else if (OB_ISNULL(ls = ls_handle.get_ls())) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("ls should not be null", K(ret), K(table_key)); } else if (!remote_write_) { @@ -1081,6 +1081,7 @@ int ObDDLSSTableRedoWriter::write_commit_log(const ObITable::TableKey &table_key const int64_t prepare_log_ts) { int ret = OB_SUCCESS; + ObLSHandle ls_handle; ObLS *ls = nullptr; ObDDLCommitLog log; ObDDLCommitLogHandle handle; @@ -1092,7 +1093,9 @@ int ObDDLSSTableRedoWriter::write_commit_log(const ObITable::TableKey &table_key LOG_WARN("invalid arguments", K(ret), K(table_key), K(start_log_ts_), K(prepare_log_ts)); } else if (OB_FAIL(log.init(table_key, get_start_log_ts(), prepare_log_ts))) { LOG_WARN("fail to init DDLCommitLog", K(ret), K(table_key), K(start_log_ts_), K(prepare_log_ts)); - } else if (OB_ISNULL(ls = ls_handle_.get_ls())) { + } else if (OB_FAIL(MTL(ObLSService *)->get_ls(ls_id_, ls_handle, ObLSGetMod::DDL_MOD))) { + LOG_WARN("get ls failed", K(ret), K(ls_id_)); + } else if (OB_ISNULL(ls = ls_handle.get_ls())) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("ls should not be null", K(ret), K(table_key)); } else if (!remote_write_) { diff --git a/src/storage/ddl/ob_ddl_redo_log_writer.h b/src/storage/ddl/ob_ddl_redo_log_writer.h index 3cf2e87d66b03433fb85aefe82495a31f2621f78..beda3a032e3a6a2bbaa49c8ed2360f740fd730b1 100644 --- a/src/storage/ddl/ob_ddl_redo_log_writer.h +++ b/src/storage/ddl/ob_ddl_redo_log_writer.h @@ -256,12 +256,11 @@ private: bool is_inited_; bool remote_write_; int64_t start_log_ts_; - ObLSHandle ls_handle_; - ObTabletHandle tablet_handle_; + share::ObLSID ls_id_; + ObTabletID tablet_id_; ObDDLRedoLogHandle ddl_redo_handle_; ObAddr leader_addr_; share::ObLSID leader_ls_id_; - ObTabletID tablet_id_; char *buffer_; };