提交 d765e76d 编写于 作者: O obdev 提交者: ob-robot

fix heart beat remove bug

上级 b50d965b
...@@ -599,6 +599,7 @@ class EventTable ...@@ -599,6 +599,7 @@ class EventTable
EN_DDL_RELEASE_DDL_KV_FAIL = 514, EN_DDL_RELEASE_DDL_KV_FAIL = 514,
EN_DDL_REPORT_CHECKSUM_FAIL = 515, EN_DDL_REPORT_CHECKSUM_FAIL = 515,
EN_DDL_REPORT_REPLICA_BUILD_STATUS_FAIL = 516, EN_DDL_REPORT_REPLICA_BUILD_STATUS_FAIL = 516,
EN_DDL_DIRECT_LOAD_WAIT_TABLE_LOCK_FAIL = 517,
// 600-700 For PX use // 600-700 For PX use
EN_PX_SQC_EXECUTE_FAILED = 600, EN_PX_SQC_EXECUTE_FAILED = 600,
......
...@@ -42,17 +42,26 @@ int ObDDLServerClient::create_hidden_table(const obrpc::ObCreateHiddenTableArg & ...@@ -42,17 +42,26 @@ int ObDDLServerClient::create_hidden_table(const obrpc::ObCreateHiddenTableArg &
LOG_WARN("failed to create hidden table", KR(ret), K(arg)); LOG_WARN("failed to create hidden table", KR(ret), K(arg));
} else if (OB_FAIL(OB_DDL_HEART_BEAT_TASK_CONTAINER.set_register_task_id(res.task_id_, res.tenant_id_))) { } else if (OB_FAIL(OB_DDL_HEART_BEAT_TASK_CONTAINER.set_register_task_id(res.task_id_, res.tenant_id_))) {
LOG_WARN("failed to set register task id", K(ret), K(res)); LOG_WARN("failed to set register task id", K(ret), K(res));
} else if (OB_FAIL(wait_task_reach_pending(arg.tenant_id_, res.task_id_, *GCTX.sql_proxy_, session))) { }
LOG_WARN("failed to wait table lock. remove register task id and abort redef table task.", K(ret), K(arg), K(res)); if (OB_SUCC(ret)) {
int tmp_ret = OB_SUCCESS; if (OB_FAIL(wait_task_reach_pending(arg.tenant_id_, res.task_id_, *GCTX.sql_proxy_, session))) {
obrpc::ObAbortRedefTableArg abort_redef_table_arg; LOG_WARN("failed to wait table lock. remove register task id and abort redef table task.", K(ret), K(arg), K(res));
abort_redef_table_arg.task_id_ = res.task_id_;
abort_redef_table_arg.tenant_id_ = arg.tenant_id_;
if (OB_TMP_FAIL(abort_redef_table(abort_redef_table_arg, session))) {
LOG_WARN("failed to abort redef table", K(tmp_ret), K(abort_redef_table_arg));
} }
if (OB_TMP_FAIL(heart_beat_clear(res.task_id_))) { #ifdef ERRSIM
LOG_WARN("heart beat clear failed", K(tmp_ret), K(res.task_id_)); if (OB_SUCC(ret)) {
ret = OB_E(common::EventTable::EN_DDL_DIRECT_LOAD_WAIT_TABLE_LOCK_FAIL) OB_SUCCESS;
LOG_INFO("wait table lock failed errsim", K(ret));
}
#endif
if (OB_FAIL(ret)) {
int tmp_ret = OB_SUCCESS;
obrpc::ObAbortRedefTableArg abort_redef_table_arg;
abort_redef_table_arg.task_id_ = res.task_id_;
abort_redef_table_arg.tenant_id_ = arg.tenant_id_;
if (OB_TMP_FAIL(abort_redef_table(abort_redef_table_arg, session))) {
LOG_WARN("failed to abort redef table", K(tmp_ret), K(abort_redef_table_arg));
}
// abort_redef_table() function last step must remove heart_beat task, so there is no need to call heart_beat_clear()
} }
} }
return ret; return ret;
...@@ -81,9 +90,7 @@ int ObDDLServerClient::start_redef_table(const obrpc::ObStartRedefTableArg &arg, ...@@ -81,9 +90,7 @@ int ObDDLServerClient::start_redef_table(const obrpc::ObStartRedefTableArg &arg,
if (OB_TMP_FAIL(abort_redef_table(abort_redef_table_arg, session))) { if (OB_TMP_FAIL(abort_redef_table(abort_redef_table_arg, session))) {
LOG_WARN("failed to abort redef table", K(tmp_ret), K(abort_redef_table_arg)); LOG_WARN("failed to abort redef table", K(tmp_ret), K(abort_redef_table_arg));
} }
if (OB_TMP_FAIL(heart_beat_clear(res.task_id_))) { // abort_redef_table() function last step must remove heart_beat task, so there is no need to call heart_beat_clear()
LOG_WARN("heart beat clear failed", K(tmp_ret), K(res.task_id_));
}
} }
return ret; return ret;
} }
...@@ -163,9 +170,15 @@ int ObDDLServerClient::abort_redef_table(const obrpc::ObAbortRedefTableArg &arg, ...@@ -163,9 +170,15 @@ int ObDDLServerClient::abort_redef_table(const obrpc::ObAbortRedefTableArg &arg,
if (OB_ENTRY_NOT_EXIST == ret) { if (OB_ENTRY_NOT_EXIST == ret) {
ret = OB_SUCCESS; ret = OB_SUCCESS;
} }
if (OB_FAIL(ret)) { if (OB_SUCC(ret)) {
} else if (OB_FAIL(sql::ObDDLExecutorUtil::wait_ddl_finish(arg.tenant_id_, arg.task_id_, session, common_rpc_proxy))) { if (OB_FAIL(sql::ObDDLExecutorUtil::wait_ddl_finish(arg.tenant_id_, arg.task_id_, session, common_rpc_proxy))) {
LOG_WARN("wait ddl finish failed", K(ret), K(arg.tenant_id_), K(arg.task_id_)); if (OB_CANCELED == ret) {
ret = OB_SUCCESS;
LOG_INFO("ddl abort success", K_(arg.task_id));
} else {
LOG_WARN("wait ddl finish failed", K(ret), K(arg.tenant_id_), K(arg.task_id_));
}
}
} }
int tmp_ret = OB_SUCCESS; int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(heart_beat_clear(arg.task_id_))) { if (OB_TMP_FAIL(heart_beat_clear(arg.task_id_))) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册