tolerant for multi ddl execution on single tablet
This commit is contained in:
committed by
wangzelin.wzl
parent
6677ad6fb7
commit
92fffa7357
@ -204,6 +204,7 @@ ObSSTableInsertTabletContext::~ObSSTableInsertTabletContext()
|
||||
allocator_.free(index_builder_);
|
||||
index_builder_ = nullptr;
|
||||
}
|
||||
ddl_kv_mgr_handle_.reset();
|
||||
allocator_.reset();
|
||||
}
|
||||
|
||||
@ -262,7 +263,7 @@ int ObSSTableInsertTabletContext::update(const int64_t snapshot_version)
|
||||
LOG_WARN("invalid argument", K(ret), K(table_key));
|
||||
} else if (data_sstable_redo_writer_.get_start_log_ts() > 0) {
|
||||
// ddl start log is already written, do nothing
|
||||
} else if (OB_FAIL(data_sstable_redo_writer_.start_ddl_redo(table_key))) {
|
||||
} else if (OB_FAIL(data_sstable_redo_writer_.start_ddl_redo(table_key, ddl_kv_mgr_handle_))) {
|
||||
LOG_WARN("fail write start log", K(ret), K(table_key), K(build_param_));
|
||||
}
|
||||
}
|
||||
@ -678,7 +679,12 @@ int ObSSTableInsertTabletContext::create_sstable_with_clog(
|
||||
build_param_.execution_id_,
|
||||
build_param_.ddl_task_id_,
|
||||
prepare_log_ts))) {
|
||||
LOG_WARN("fail write ddl prepare log", K(ret), K(table_key));
|
||||
if (OB_TASK_EXPIRED == ret) {
|
||||
LOG_INFO("ddl task expired, but return success", K(ret), K(table_key), K(build_param_));
|
||||
ret = OB_SUCCESS;
|
||||
} else {
|
||||
LOG_WARN("fail write ddl prepare log", K(ret), K(table_key));
|
||||
}
|
||||
} else {
|
||||
DEBUG_SYNC(AFTER_REMOTE_WRITE_DDL_PREPARE_LOG);
|
||||
ObTabletHandle tablet_handle;
|
||||
@ -690,15 +696,23 @@ int ObSSTableInsertTabletContext::create_sstable_with_clog(
|
||||
if (OB_FAIL(ls->get_tablet(tablet_id, tablet_handle))) {
|
||||
LOG_WARN("get tablet failed", K(ret));
|
||||
} else if (OB_FAIL(tablet_handle.get_obj()->get_ddl_kv_mgr(ddl_kv_mgr_handle))) {
|
||||
LOG_WARN("get ddl kv manager failed", K(ret));
|
||||
LOG_WARN("get ddl kv manager failed", K(ret), K(ls_id), K(tablet_id));
|
||||
} else if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->ddl_prepare(ddl_start_log_ts,
|
||||
prepare_log_ts,
|
||||
table_schema->get_table_id(),
|
||||
build_param_.execution_id_,
|
||||
build_param_.ddl_task_id_))) {
|
||||
LOG_WARN("failed to do ddl kv prepare", K(ret), K(ddl_start_log_ts), K(prepare_log_ts), K(build_param_));
|
||||
if (OB_TASK_EXPIRED == ret) {
|
||||
LOG_INFO("ddl task expired, but return success", K(ret), K(ls_id), K(tablet_id),
|
||||
K(ddl_start_log_ts), "new_ddl_start_log_ts", ddl_kv_mgr_handle.get_obj()->get_start_log_ts());
|
||||
ret = OB_SUCCESS;
|
||||
} else {
|
||||
LOG_WARN("failed to do ddl kv prepare", K(ret), K(ddl_start_log_ts), K(prepare_log_ts), K(build_param_));
|
||||
}
|
||||
} else if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->wait_ddl_commit(ddl_start_log_ts, prepare_log_ts))) {
|
||||
if (OB_TASK_EXPIRED == ret) {
|
||||
LOG_INFO("ddl task expired, but return success", K(ret), K(ls_id), K(tablet_id),
|
||||
K(ddl_start_log_ts), "new_ddl_start_log_ts", ddl_kv_mgr_handle.get_obj()->get_start_log_ts());
|
||||
ret = OB_SUCCESS;
|
||||
} else {
|
||||
LOG_WARN("failed to wait ddl kv commit", K(ret), K(ddl_start_log_ts), K(build_param_));
|
||||
|
||||
Reference in New Issue
Block a user