not keep ls handle and tablet handle in ddl redo log writer
This commit is contained in:

committed by
wangzelin.wzl

parent
8202b78e3d
commit
f2ba0d3554
@ -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<char *>(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_) {
|
||||
|
@ -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_;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user