tolerant for multi ddl execution on single tablet

This commit is contained in:
simonjoylet
2022-11-03 11:08:02 +00:00
committed by wangzelin.wzl
parent 6677ad6fb7
commit 92fffa7357
13 changed files with 65 additions and 88 deletions

View File

@ -309,7 +309,7 @@ int ObComplementDataContext::write_start_log(const ObComplementDataParam &param)
} else if (OB_UNLIKELY(!hidden_table_key.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid table key", K(ret), K(hidden_table_key));
} else if (OB_FAIL(data_sstable_redo_writer_.start_ddl_redo(hidden_table_key))) {
} else if (OB_FAIL(data_sstable_redo_writer_.start_ddl_redo(hidden_table_key, ddl_kv_mgr_handle_))) {
LOG_WARN("fail write start log", K(ret), K(hidden_table_key), K(param));
} else {
LOG_INFO("complement task start ddl redo success", K(hidden_table_key));
@ -327,6 +327,7 @@ void ObComplementDataContext::destroy()
allocator_.free(index_builder_);
index_builder_ = nullptr;
}
ddl_kv_mgr_handle_.reset();
allocator_.reset();
}
@ -1176,7 +1177,11 @@ int ObComplementMergeTask::add_build_hidden_table_sstable()
1/*execution_id*/,
param_->task_id_,
prepare_log_ts))) {
LOG_WARN("fail write ddl prepare log", K(ret), K(hidden_table_key));
if (OB_TASK_EXPIRED == ret) {
LOG_INFO("ddl task expired, but return success", K(ret), K(hidden_table_key), KPC(param_));
} else {
LOG_WARN("fail write ddl prepare log", K(ret), K(hidden_table_key));
}
} else {
ObTabletHandle new_tablet_handle; // no use here
ObDDLKvMgrHandle ddl_kv_mgr_handle;
@ -1190,9 +1195,17 @@ int ObComplementMergeTask::add_build_hidden_table_sstable()
param_->hidden_table_schema_->get_table_id(),
1/*execution_id*/,
param_->task_id_))) {
LOG_WARN("commit ddl log failed", K(ret), K(ddl_start_log_ts), K(prepare_log_ts), K(hidden_table_key));
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("commit ddl log failed", K(ret), K(ddl_start_log_ts), K(prepare_log_ts), K(hidden_table_key));
}
} 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("wait ddl commit failed", K(ret), K(ddl_start_log_ts), K(hidden_table_key));