diff --git a/src/rootserver/ddl_task/ob_constraint_task.cpp b/src/rootserver/ddl_task/ob_constraint_task.cpp index a80f95ea1a..b14cb78653 100755 --- a/src/rootserver/ddl_task/ob_constraint_task.cpp +++ b/src/rootserver/ddl_task/ob_constraint_task.cpp @@ -90,15 +90,16 @@ int ObCheckConstraintValidationTask::process() session_param.ddl_info_.set_source_table_hidden(table_schema->is_user_hidden_table()); session_param.ddl_info_.set_dest_table_hidden(false); ObTimeoutCtx timeout_ctx; + const int64_t DDL_INNER_SQL_EXECUTE_TIMEOUT = ObDDLUtil::calc_inner_sql_execute_timeout(); SMART_VAR(ObMySQLProxy::MySQLResult, res) { common::sqlclient::ObMySQLResult *result = NULL; ObSqlString ddl_schema_hint_str; if (check_expr_str.empty()) { ret = OB_ERR_UNEXPECTED; LOG_WARN("check_expr_str is empty", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_trx_timeout_us(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set timeout failed", K(ret)); } else if (OB_FAIL(ObDDLUtil::generate_ddl_schema_hint_str(table_name, table_schema->get_schema_version(), is_oracle_mode, ddl_schema_hint_str))) { LOG_WARN("failed to generate ddl schema hint str", K(ret)); @@ -348,10 +349,11 @@ int ObForeignKeyConstraintValidationTask::check_fk_constraint_data_valid( common::sqlclient::ObMySQLResult *result = NULL; ObSqlString child_ddl_schema_hint_str; ObSqlString parent_ddl_schema_hint_str; + const int64_t DDL_INNER_SQL_EXECUTE_TIMEOUT = ObDDLUtil::calc_inner_sql_execute_timeout(); // print str like "select c1, c2 from db.t2 where c1 is not null and c2 is not null minus select c3, c4 from db.t1" - if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set timeout failed", K(ret)); } else if (OB_FAIL(ObDDLUtil::generate_ddl_schema_hint_str(child_table_schema.get_table_name_str(), child_table_schema.get_schema_version(), is_oracle_mode, child_ddl_schema_hint_str))) { LOG_WARN("failed to generate ddl schema hint", K(ret)); @@ -816,8 +818,7 @@ int ObConstraintTask::check_replica_end(bool &is_end) } if (OB_SUCC(ret) && !is_end) { - const int64_t timeout = OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT; - if (check_replica_request_time_ + timeout < ObTimeUtility::current_time()) { + if (check_replica_request_time_ + ObDDLUtil::calc_inner_sql_execute_timeout() < ObTimeUtility::current_time()) { check_replica_request_time_ = 0; } } diff --git a/src/rootserver/ddl_task/ob_ddl_redefinition_task.cpp b/src/rootserver/ddl_task/ob_ddl_redefinition_task.cpp index 7d0d8ae5ad..8faf82b31f 100644 --- a/src/rootserver/ddl_task/ob_ddl_redefinition_task.cpp +++ b/src/rootserver/ddl_task/ob_ddl_redefinition_task.cpp @@ -145,6 +145,7 @@ int ObDDLRedefinitionSSTableBuildTask::process() session_param.consumer_group_id_ = consumer_group_id_; common::ObAddr *sql_exec_addr = nullptr; + const int64_t DDL_INNER_SQL_EXECUTE_TIMEOUT = ObDDLUtil::calc_inner_sql_execute_timeout(); if (inner_sql_exec_addr_.is_valid()) { sql_exec_addr = &inner_sql_exec_addr_; LOG_INFO("inner sql execute addr" , K(*sql_exec_addr)); @@ -155,10 +156,10 @@ int ObDDLRedefinitionSSTableBuildTask::process() user_sql_proxy = GCTX.ddl_sql_proxy_; } LOG_INFO("execute sql" , K(sql_string), K(data_table_id_), K(tenant_id_), - "is_strict_mode", is_strict_mode(sql_mode_), K(sql_mode_), K(parallelism_)); - if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + "is_strict_mode", is_strict_mode(sql_mode_), K(sql_mode_), K(parallelism_), K(DDL_INNER_SQL_EXECUTE_TIMEOUT)); + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set timeout failed", K(ret)); } else { if (OB_FAIL(user_sql_proxy->write(tenant_id_, sql_string.ptr(), affected_rows, @@ -669,7 +670,7 @@ int ObDDLRedefinitionTask::check_build_single_replica(bool &is_end) } else if (OB_FAIL(replica_builder_.check_build_end(is_end, complete_sstable_job_ret_code_))) { LOG_WARN("fail to check build end", K(ret)); } else if (!is_end) { - if (sstable_complete_request_time_ + OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT < ObTimeUtility::current_time()) { // timeout, retry + if (sstable_complete_request_time_ + ObDDLUtil::calc_inner_sql_execute_timeout() < ObTimeUtility::current_time()) { // timeout, retry is_sstable_complete_task_submitted_ = false; sstable_complete_request_time_ = 0; } diff --git a/src/rootserver/ddl_task/ob_index_build_task.cpp b/src/rootserver/ddl_task/ob_index_build_task.cpp index 98e319b7a5..18139c74a2 100755 --- a/src/rootserver/ddl_task/ob_index_build_task.cpp +++ b/src/rootserver/ddl_task/ob_index_build_task.cpp @@ -132,10 +132,11 @@ int ObIndexSSTableBuildTask::process() } DEBUG_SYNC(BEFORE_INDEX_SSTABLE_BUILD_TASK_SEND_SQL); ObTimeoutCtx timeout_ctx; - LOG_INFO("execute sql" , K(sql_string), K(data_table_id_), K(tenant_id_)); - if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + const int64_t DDL_INNER_SQL_EXECUTE_TIMEOUT = ObDDLUtil::calc_inner_sql_execute_timeout(); + LOG_INFO("execute sql" , K(sql_string), K(data_table_id_), K(tenant_id_), K(DDL_INNER_SQL_EXECUTE_TIMEOUT)); + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set timeout failed", K(ret)); } else if (OB_FAIL(user_sql_proxy->write(tenant_id_, sql_string.ptr(), affected_rows, oracle_mode ? ObCompatibilityMode::ORACLE_MODE : ObCompatibilityMode::MYSQL_MODE, &session_param, sql_exec_addr))) { @@ -800,8 +801,6 @@ int ObIndexBuildTask::send_build_single_replica_request() } else { set_sql_exec_addr(create_index_arg_.inner_sql_exec_addr_); // set to switch_status, if task cancel, we should kill session with inner_sql_exec_addr_ } - const int64_t timeout = OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT; - const int64_t abs_timeout_us = ObTimeUtility::current_time() + timeout; ObIndexSSTableBuildTask task( task_id_, tenant_id_, @@ -820,7 +819,7 @@ int ObIndexBuildTask::send_build_single_replica_request() create_index_arg_.nls_timestamp_tz_format_))) { LOG_WARN("failed to set nls format", K(ret), K(create_index_arg_)); } else if (OB_FAIL(root_service_->submit_ddl_single_replica_build_task(task))) { - LOG_WARN("fail to submit task", K(ret), K(*this), K(timeout)); + LOG_WARN("fail to submit task", K(ret), KPC(this)); } else { is_sstable_complete_task_submitted_ = true; sstable_complete_request_time_ = ObTimeUtility::current_time(); @@ -854,8 +853,7 @@ int ObIndexBuildTask::check_build_single_replica(bool &is_end) } if (OB_SUCC(ret) && !is_end) { - const int64_t timeout = OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT; - if (sstable_complete_request_time_ + timeout < ObTimeUtility::current_time()) { + if (sstable_complete_request_time_ + ObDDLUtil::calc_inner_sql_execute_timeout() < ObTimeUtility::current_time()) { is_sstable_complete_task_submitted_ = false; sstable_complete_request_time_ = 0; } diff --git a/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp b/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp index c88e5ee4bd..855bf5ff56 100644 --- a/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp +++ b/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp @@ -92,9 +92,10 @@ int ObUpdateAutoincSequenceTask::process() // if data_table_id != dest_table_id, meaning this is happening in ddl double write session_param.ddl_info_.set_source_table_hidden(data_table_id_ != dest_table_id_); ObObj obj; - if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + const int64_t DDL_INNER_SQL_EXECUTE_TIMEOUT = ObDDLUtil::calc_inner_sql_execute_timeout(); + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(DDL_INNER_SQL_EXECUTE_TIMEOUT))) { LOG_WARN("set timeout failed", K(ret)); } else if (OB_FAIL(sql.assign_fmt("SELECT /*+no_rewrite*/ CAST(MAX(`%s`) AS SIGNED) AS MAX_VALUE FROM `%s`.`%s`", column_schema->get_column_name(), diff --git a/src/rootserver/ddl_task/ob_table_redefinition_task.cpp b/src/rootserver/ddl_task/ob_table_redefinition_task.cpp index 324246ca6e..a9d4a480bf 100755 --- a/src/rootserver/ddl_task/ob_table_redefinition_task.cpp +++ b/src/rootserver/ddl_task/ob_table_redefinition_task.cpp @@ -288,22 +288,6 @@ int ObTableRedefinitionTask::send_build_replica_request_by_sql() return ret; } -int ObTableRedefinitionTask::check_build_replica_timeout() -{ - int ret = OB_SUCCESS; - if (OB_UNLIKELY(!is_inited_)) { - ret = OB_NOT_INIT; - LOG_WARN("ObTableRedefinitionTask has not been inited", K(ret)); - } else if (build_replica_request_time_ > 0) { - const int64_t timeout = OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT; - const int64_t current_time = ObTimeUtility::current_time(); - if (build_replica_request_time_ + timeout < current_time) { - ret = OB_TIMEOUT; - } - } - return ret; -} - int ObTableRedefinitionTask::check_build_replica_end(bool &is_end) { int ret = OB_SUCCESS; @@ -389,11 +373,6 @@ int ObTableRedefinitionTask::table_redefinition(const ObDDLTaskStatus next_task_ LOG_WARN("check build replica end failed", K(ret)); } } - if (OB_SUCC(ret) && !is_build_replica_end) { - if (OB_FAIL(check_build_replica_timeout())) { - LOG_WARN("fail to check build replica timeout", K(ret)); - } - } // overwrite ret if (is_build_replica_end) { diff --git a/src/rootserver/ddl_task/ob_table_redefinition_task.h b/src/rootserver/ddl_task/ob_table_redefinition_task.h index 7bfbf1d409..f2fdfc1022 100644 --- a/src/rootserver/ddl_task/ob_table_redefinition_task.h +++ b/src/rootserver/ddl_task/ob_table_redefinition_task.h @@ -93,7 +93,6 @@ private: int copy_table_foreign_keys(); int send_build_replica_request(); int send_build_replica_request_by_sql(); - int check_build_replica_timeout(); int check_build_replica_end(bool &is_end); int replica_end_check(const int ret_code); int check_modify_autoinc(bool &modify_autoinc); diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index 7ad07d5ee1..d23610cbdc 100755 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -16123,10 +16123,11 @@ int ObDDLService::get_rebuild_foreign_key_infos( LOG_WARN("unexpected fk", K(ret), K(new_fk_info), K(orig_table_id)); } } - if (OB_FAIL(ret)) { - } else if (need_rebuild && OB_FAIL(rebuild_fk_infos.push_back(new_fk_info))) { - LOG_WARN("fail to push back fk infos that need to rebuild", K(ret)); - } else {/* do nothing. */} + if (OB_SUCC(ret) && need_rebuild) { + if (OB_FAIL(rebuild_fk_infos.push_back(new_fk_info))) { + LOG_WARN("fail to push back fk infos that need to rebuild", K(ret)); + } + } } } return ret; @@ -16165,10 +16166,12 @@ int ObDDLService::rebuild_hidden_table_foreign_key( LOG_WARN("failed to build hidden index table map", K(ret)); } else if (OB_FAIL(orig_table_schema.check_if_oracle_compat_mode(is_oracle_mode))) { LOG_WARN("failed to check if oralce compat mode", K(ret)); + } else if (!hidden_table_schema.get_foreign_key_infos().empty()) { + // not empty means already rebuilt. } else if (OB_FAIL(get_rebuild_foreign_key_infos(alter_table_arg, - orig_table_schema, - rebuild_child_table_fk, - rebuild_fk_infos))) { + orig_table_schema, + rebuild_child_table_fk, + rebuild_fk_infos))) { LOG_WARN("fail to get fk infos that need to rebuild", K(ret)); } else if (OB_FAIL(inc_table_schema.set_foreign_key_infos(rebuild_fk_infos))) { LOG_WARN("fail to set fk infos", K(ret)); diff --git a/src/share/ob_ddl_common.h b/src/share/ob_ddl_common.h index 5acb73e56c..9b4db2e366 100644 --- a/src/share/ob_ddl_common.h +++ b/src/share/ob_ddl_common.h @@ -14,6 +14,7 @@ #define OCEANBASE_SHARE_OB_DDL_COMMON_H #include "lib/allocator/page_arena.h" +#include "share/config/ob_server_config.h" #include "share/schema/ob_table_schema.h" #include "share/schema/ob_schema_service.h" #include "share/location_cache/ob_location_struct.h" @@ -442,6 +443,10 @@ public: static int reshape_ddl_column_obj( common::ObDatum &datum, const ObObjMeta &obj_meta); + static int64_t calc_inner_sql_execute_timeout() + { + return max(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT, GCONF._ob_ddl_timeout); + } /** * NOTICE: The interface is designed for Offline DDL operation only. diff --git a/src/storage/ddl/ob_complement_data_task.cpp b/src/storage/ddl/ob_complement_data_task.cpp index 578e082786..51c665543f 100755 --- a/src/storage/ddl/ob_complement_data_task.cpp +++ b/src/storage/ddl/ob_complement_data_task.cpp @@ -2169,7 +2169,7 @@ int ObRemoteScan::prepare_iter(const ObSqlString &sql_string, common::ObCommonSq session_param.ddl_info_.set_is_ddl(true); session_param.ddl_info_.set_source_table_hidden(false); session_param.ddl_info_.set_dest_table_hidden(false); - const int64_t sql_total_timeout = max(7 * 24 * 60 * 60 * 1000 * 1000L, GCONF._ob_ddl_timeout); + const int64_t sql_total_timeout = ObDDLUtil::calc_inner_sql_execute_timeout(); if (OB_ISNULL(sql_proxy)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid arg", K(ret));