[FEAT MERGE] enhance_ddl_quality

Co-authored-by: renju96 <fcbrenju@163.com>
This commit is contained in:
simonjoylet
2023-11-23 04:11:38 +00:00
committed by ob-robot
parent fd1115b382
commit 16f37c94b6
74 changed files with 3169 additions and 184 deletions

View File

@ -23,6 +23,7 @@
#include "share/ob_common_rpc_proxy.h"
#include "lib/worker.h"
#include "rootserver/ob_root_utils.h"
#include "observer/ob_server_event_history_table_operator.h"
namespace oceanbase
{
@ -45,6 +46,7 @@ int ObCreateDatabaseExecutor::execute(ObExecContext &ctx, ObCreateDatabaseStmt &
const obrpc::ObCreateDatabaseArg &create_database_arg = stmt.get_create_database_arg();
obrpc::ObCreateDatabaseArg &tmp_arg = const_cast<obrpc::ObCreateDatabaseArg&>(create_database_arg);
ObString first_stmt;
obrpc::UInt64 database_id(0);
if (OB_FAIL(stmt.get_first_stmt(first_stmt))) {
SQL_ENG_LOG(WARN, "fail to get first stmt" , K(ret));
} else {
@ -63,14 +65,22 @@ int ObCreateDatabaseExecutor::execute(ObExecContext &ctx, ObCreateDatabaseStmt &
SQL_ENG_LOG(WARN, "fail to get physical plan ctx", K(ret), K(ctx), K(common_rpc_proxy));
} else {
//为什么create database的协议需要返回database_id,暂时没有用上。
obrpc::UInt64 database_id(0);
if (OB_FAIL(common_rpc_proxy->create_database(create_database_arg, database_id))) {
SQL_ENG_LOG(WARN, "rpc proxy create table failed", K(ret));
} else {
ctx.get_physical_plan_ctx()->set_affected_rows(1);
}
}
SQL_ENG_LOG(INFO, "finish execute create database.", K(ret), K(stmt));
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "create database execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"database_info", database_id,
"schema_version", create_database_arg.database_schema_.get_schema_version());
}
SQL_ENG_LOG(INFO, "finish execute create database.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(create_database_arg));
return ret;
}
@ -167,6 +177,16 @@ int ObAlterDatabaseExecutor::execute(ObExecContext &ctx, ObAlterDatabaseStmt &st
SQL_ENG_LOG(WARN, "failed to update sys variable", K(ret));
}
}
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "alter database execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"database_info", alter_database_arg.database_schema_.get_database_id(),
"schema_version", alter_database_arg.database_schema_.get_schema_version());
}
SQL_ENG_LOG(INFO, "finish execute alter database", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(alter_database_arg));
return ret;
}
@ -238,7 +258,15 @@ int ObDropDatabaseExecutor::execute(ObExecContext &ctx, ObDropDatabaseStmt &stmt
ctx.get_physical_plan_ctx()->set_affected_rows(drop_database_res.affected_row_);
}
}
SQL_ENG_LOG(INFO, "finish execute drop database.", K(ret), K(stmt));
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "drop database execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"database_info", database_id);
}
SQL_ENG_LOG(INFO, "finish execute drop database.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(drop_database_arg));
return ret;
}
@ -268,6 +296,17 @@ int ObFlashBackDatabaseExecutor::execute(ObExecContext &ctx, ObFlashBackDatabase
} else if (OB_FAIL(common_rpc_proxy->flashback_database(flashback_database_arg))) {
SQL_ENG_LOG(WARN, "rpc proxy flashback database failed", K(ret));
}
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "flashback database execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"origin_db_name", flashback_database_arg.origin_db_name_,
"new_db_name", flashback_database_arg.new_db_name_);
}
SQL_ENG_LOG(INFO, "finish execute flashback database.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(flashback_database_arg));
return ret;
}
@ -297,6 +336,16 @@ int ObPurgeDatabaseExecutor::execute(ObExecContext &ctx, ObPurgeDatabaseStmt &st
} else if (OB_FAIL(common_rpc_proxy->purge_database(purge_database_arg))) {
SQL_ENG_LOG(WARN, "rpc proxy purge database failed", K(ret));
}
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "purge database execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"database_info", purge_database_arg.db_name_);
}
SQL_ENG_LOG(INFO, "finish purge database.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(purge_database_arg));
return ret;
}

View File

@ -19,6 +19,7 @@
#include "share/ob_srv_rpc_proxy.h" //ObSrvRpcProxy
#include "share/ob_ddl_error_message_table_operator.h"
#include "sql/session/ob_sql_session_info.h"
#include "observer/ob_server_event_history_table_operator.h"
namespace oceanbase
{
@ -62,6 +63,14 @@ int ObDDLExecutorUtil::wait_ddl_finish(
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K(tenant_id), K(task_id), KP(common_rpc_proxy));
} else {
SERVER_EVENT_ADD("ddl", "start wait ddl finish",
"tenant_id", tenant_id,
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", task_id,
"rpc_dest", common_rpc_proxy->get_server());
LOG_INFO("start wait ddl finsih", K(task_id), "ddl_event_info", ObDDLEventInfo());
int tmp_ret = OB_SUCCESS;
bool is_tenant_dropped = false;
bool is_tenant_standby = false;
@ -107,6 +116,14 @@ int ObDDLExecutorUtil::wait_ddl_finish(
}
}
}
SERVER_EVENT_ADD("ddl", "end wait ddl finish",
"tenant_id", tenant_id,
"ret", error_message.ret_code_,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", task_id,
"rpc_dest", common_rpc_proxy->get_server());
LOG_INFO("finish wait ddl", K(ret), K(task_id), "ddl_event_info", ObDDLEventInfo(), K(error_message));
}
return ret;
}
@ -122,7 +139,14 @@ int ObDDLExecutorUtil::wait_build_index_finish(const uint64_t tenant_id, const i
THIS_WORKER.set_timeout_ts(ObTimeUtility::current_time() + OB_MAX_USER_SPECIFIED_TIMEOUT);
share::ObDDLErrorMessageTableOperator::ObBuildDDLErrorMessage error_message;
is_finish = false;
LOG_INFO("wait build index finish", K(task_id));
SERVER_EVENT_ADD("ddl", "start wait build index finish",
"tenant_id", tenant_id,
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", task_id,
"is_tenant_standby", is_tenant_standby);
LOG_INFO("start wait build index finish", K(task_id), "ddl_event_info", ObDDLEventInfo());
if (OB_UNLIKELY(OB_INVALID_ID == tenant_id || task_id <= 0)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arguments", K(ret), K(tenant_id), K(task_id));
@ -153,6 +177,14 @@ int ObDDLExecutorUtil::wait_build_index_finish(const uint64_t tenant_id, const i
LOG_WARN("server is stopping, check whether the ddl task finish successfully or not", K(ret), K(tenant_id), K(task_id));
}
}
SERVER_EVENT_ADD("ddl", "end wait build index finish",
"tenant_id", tenant_id,
"ret", error_message.ret_code_,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", task_id,
"is_tenant_standby", is_tenant_standby);
LOG_INFO("finish wait build index", K(ret), "ddl_event_info", ObDDLEventInfo(), K(error_message));
return ret;
}
@ -175,6 +207,14 @@ int ObDDLExecutorUtil::wait_ddl_retry_task_finish(
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K(tenant_id), K(task_id), KP(common_rpc_proxy));
} else {
SERVER_EVENT_ADD("ddl", "start wait ddl retry task finish",
"tenant_id", tenant_id,
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", task_id,
"rpc_dest", common_rpc_proxy->get_server());
LOG_INFO("start wait ddl retry task finish", K(task_id), "ddl_event_info", ObDDLEventInfo(), K(error_message));
bool is_tenant_dropped = false;
bool is_tenant_standby = false;
int tmp_ret = OB_SUCCESS;
@ -254,6 +294,14 @@ int ObDDLExecutorUtil::wait_ddl_retry_task_finish(
}
}
affected_rows = error_message.affected_rows_;
SERVER_EVENT_ADD("ddl", "end wait ddl retry task finish",
"tenant_id", tenant_id,
"ret", error_message.ret_code_,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", task_id,
"rpc_dest", common_rpc_proxy->get_server());
LOG_INFO("fnish wait ddl retry task", K(ret), K(task_id), "ddl_event_info", ObDDLEventInfo(), K(error_message));
}
return ret;
}
@ -273,9 +321,13 @@ int ObDDLExecutorUtil::cancel_ddl_task(const int64_t tenant_id, obrpc::ObCommonR
} else {
LOG_WARN("failed to cancel remote sys task", K(ret), K(rpc_arg), K(rs_leader_addr));
}
} else {
LOG_INFO("succeed to cancel sys task", K(rpc_arg), K(rs_leader_addr));
}
SERVER_EVENT_ADD("ddl", "finish cancel ddl task",
"tenant_id", tenant_id,
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dest", rs_leader_addr);
LOG_INFO("finish cancel ddl task", K(ret), K(rpc_arg), K(rs_leader_addr), "ddl_event_info", ObDDLEventInfo());
return ret;
}

View File

@ -27,6 +27,7 @@
#include "sql/engine/cmd/ob_partition_executor_utils.h"
#include "sql/resolver/ddl/ob_flashback_stmt.h"
#include "observer/ob_server.h"
#include "observer/ob_server_event_history_table_operator.h"
using namespace oceanbase::common;
namespace oceanbase
@ -102,6 +103,14 @@ int ObCreateIndexExecutor::execute(ObExecContext &ctx, ObCreateIndexStmt &stmt)
LOG_WARN("failed to wait ddl finish", K(ret));
}
}
SERVER_EVENT_ADD("ddl", "create index execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", res.task_id_,
"table_id", res.index_table_id_,
"schema_version", res.schema_version_);
SQL_ENG_LOG(INFO, "finish create index execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(create_index_arg));
return ret;
}
@ -369,6 +378,14 @@ int ObDropIndexExecutor::execute(ObExecContext &ctx, ObDropIndexStmt &stmt)
} else if (OB_FAIL(wait_drop_index_finish(res.tenant_id_, res.task_id_, *my_session))) {
LOG_WARN("wait drop index finish failed", K(ret));
}
SERVER_EVENT_ADD("ddl", "drop index execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", res.task_id_,
"table_id", res.index_table_id_,
"schema_version", res.schema_version_);
SQL_ENG_LOG(INFO, "finish drop index execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(drop_index_arg));
return ret;
}
@ -395,6 +412,17 @@ int ObFlashBackIndexExecutor::execute(ObExecContext &ctx, ObFlashBackIndexStmt &
} else if (OB_FAIL(common_rpc_proxy->flashback_index(flashback_index_arg))) {
LOG_WARN("rpc proxy flashback index failed", "dst", common_rpc_proxy->get_server(), K(ret));
}
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "flashback index execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"origin_table_name", flashback_index_arg.origin_table_name_,
"new_table_name", flashback_index_arg.new_table_name_,
flashback_index_arg.new_db_name_);
}
SQL_ENG_LOG(INFO, "finish flashback index execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(flashback_index_arg));
return ret;
}
@ -421,6 +449,17 @@ int ObPurgeIndexExecutor::execute(ObExecContext &ctx, ObPurgeIndexStmt &stmt) {
} else if (OB_FAIL(common_rpc_proxy->purge_index(purge_index_arg))) {
LOG_WARN("rpc proxy purge index failed", "dst", common_rpc_proxy->get_server(), K(ret));
}
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "purge index execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"table_id", purge_index_arg.table_id_,
"database_id", purge_index_arg.database_id_,
purge_index_arg.table_name_);
}
SQL_ENG_LOG(INFO, "finish purge database.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(purge_index_arg));
return ret;
}

View File

@ -43,6 +43,7 @@
#include "sql/ob_select_stmt_printer.h"
#include "observer/ob_server_struct.h"
#include "observer/ob_server.h"
#include "observer/ob_server_event_history_table_operator.h"
#include "lib/worker.h"
#include "share/external_table/ob_external_table_file_mgr.h"
#include "share/external_table/ob_external_table_file_task.h"
@ -483,6 +484,19 @@ int ObCreateTableExecutor::execute_ctas(ObExecContext &ctx,
} else {
LOG_DEBUG("table exists, no need to CTAS", K(create_table_res.table_id_));
}
if (OB_NOT_NULL(common_rpc_proxy)) {
char table_info_buffer[256];
snprintf(table_info_buffer, sizeof(table_info_buffer), "table_id:%ld, hidden_table_id:%ld",
alter_table_arg.table_id_, alter_table_arg.hidden_table_id_);
SERVER_EVENT_ADD("ddl", "create table as select execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"table_info", table_info_buffer,
"schema_version", create_table_res.schema_version_);
}
SQL_ENG_LOG(INFO, "finish create table execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(create_table_arg), K(alter_table_arg));
}
OZ(my_session->store_query_string(cur_query));
}
@ -597,6 +611,16 @@ int ObCreateTableExecutor::execute(ObExecContext &ctx, ObCreateTableStmt &stmt)
LOG_WARN("execute create table as select failed", KR(ret));
}
}
if (OB_NOT_NULL(common_rpc_proxy)) {
SERVER_EVENT_ADD("ddl", "create table execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"rpc_dst", common_rpc_proxy->get_server(),
"table_info", res.table_id_,
"schema_version", res.schema_version_);
}
SQL_ENG_LOG(INFO, "finish create table execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(create_table_arg));
// only CTAS or create temporary table will make session_id != 0. If such table detected, set
// need ctas cleanup task anyway to do some cleanup jobs
@ -1284,6 +1308,19 @@ int ObAlterTableExecutor::execute(ObExecContext &ctx, ObAlterTableStmt &stmt)
}
}
}
char table_info_buffer[256];
snprintf(table_info_buffer, sizeof(table_info_buffer), "table_id:%ld, hidden_table_id:%ld",
alter_table_arg.table_id_, alter_table_arg.hidden_table_id_);
SERVER_EVENT_ADD("ddl", "alter table execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", res.task_id_,
"table_info", table_info_buffer,
"schema_version", res.schema_version_,
alter_table_arg.inner_sql_exec_addr_);
SQL_ENG_LOG(INFO, "finish alter table execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(alter_table_arg), K(first_stmt));
}
return ret;
}
@ -2056,6 +2093,13 @@ int ObDropTableExecutor::execute(ObExecContext &ctx, ObDropTableStmt &stmt)
//do nothing
}
}
SERVER_EVENT_ADD("ddl", "drop table execute finish",
"tenant_id", res.tenant_id_,
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", res.task_id_,
"schema_id", res.schema_id_);
SQL_ENG_LOG(INFO, "finish drop table execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(drop_table_arg));
return ret;
}
@ -2248,6 +2292,14 @@ int ObTruncateTableExecutor::execute(ObExecContext &ctx, ObTruncateTableStmt &st
K(query_timeout), K(THIS_WORKER.get_timeout_remain()));
}
}
SERVER_EVENT_ADD("ddl", "truncate table execute finish",
"tenant_id", MTL_ID(),
"ret", ret,
"trace_id", *ObCurTraceId::get_trace_id(),
"task_id", res.task_id_,
"table_info", truncate_table_arg.table_name_,
"schema_id", res.schema_id_);
SQL_ENG_LOG(INFO, "finish truncate table execute.", K(ret), "ddl_event_info", ObDDLEventInfo(), K(stmt), K(truncate_table_arg));
}
return ret;
}

View File

@ -340,7 +340,9 @@ int ObPxSubCoord::setup_op_input(ObExecContext &ctx,
LOG_WARN("start ddl failed", K(ret));
}
#ifdef ERRSIM
ret = OB_E(EventTable::EN_DDL_START_FAIL) OB_SUCCESS;
if (OB_SUCC(ret)) {
ret = OB_E(EventTable::EN_DDL_START_FAIL) OB_SUCCESS;
}
#endif
}
} else if (IS_PX_GI(root.get_type())) {