From 9dd6c6a84877e0963a6a07e0711d9ed22709551b Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 28 Oct 2022 04:06:24 +0000 Subject: [PATCH] update ddl related inner table --- deps/oblib/src/lib/ob_define.h | 1 + .../ddl_task/ob_column_redefinition_task.cpp | 2 +- .../ddl_task/ob_constraint_task.cpp | 10 +++++----- .../ddl_task/ob_ddl_redefinition_task.cpp | 4 ++-- .../ddl_task/ob_index_build_task.cpp | 10 +++++----- .../ddl_task/ob_modify_autoinc_task.cpp | 4 ++-- .../ddl_task/ob_table_redefinition_task.cpp | 2 +- .../ob_inner_table_schema.12201_12250.cpp | 19 +++++++++++++++++++ .../ob_inner_table_schema.12251_12300.cpp | 2 +- .../ob_inner_table_schema.151_200.cpp | 2 +- .../ob_inner_table_schema.301_350.cpp | 19 +++++++++++++++++++ .../inner_table/ob_inner_table_schema_def.py | 3 ++- src/share/ob_ddl_checksum.cpp | 6 +++--- src/share/parameter/ob_parameter_seed.ipp | 4 ---- .../all_virtual_sys_parameter_stat.result | 1 - 15 files changed, 62 insertions(+), 27 deletions(-) diff --git a/deps/oblib/src/lib/ob_define.h b/deps/oblib/src/lib/ob_define.h index 2cafc22bf9..1d860cb87f 100644 --- a/deps/oblib/src/lib/ob_define.h +++ b/deps/oblib/src/lib/ob_define.h @@ -775,6 +775,7 @@ const char *const OB_DIAG_TENANT_NAME = "diag"; //for sync ddl (ClusterID_TenantID_SchemaVersion) const char *const OB_DDL_ID_VAR_NAME = "__oceanbase_ddl_id"; const int64_t OB_MAX_DDL_ID_STR_LENGTH = 64; +const int64_t OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT = 7L * 24L * 60L * 60L * 1000L * 1000L; // 7days // The default user name of the standby database to log in to the main database const char *const OB_STANDBY_USER_NAME = "__oceanbase_inner_standby_user"; diff --git a/src/rootserver/ddl_task/ob_column_redefinition_task.cpp b/src/rootserver/ddl_task/ob_column_redefinition_task.cpp index a09c821eb1..816fefa484 100644 --- a/src/rootserver/ddl_task/ob_column_redefinition_task.cpp +++ b/src/rootserver/ddl_task/ob_column_redefinition_task.cpp @@ -176,7 +176,7 @@ int ObColumnRedefinitionTask::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_ + GCONF.global_index_build_single_replica_timeout < ObTimeUtility::current_time()) { // timeout, retry + if (sstable_complete_request_time_ + OB_MAX_DDL_SINGLE_REPLICA_BUILD_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_constraint_task.cpp b/src/rootserver/ddl_task/ob_constraint_task.cpp index 237d3ebaff..bcc9366cd1 100644 --- a/src/rootserver/ddl_task/ob_constraint_task.cpp +++ b/src/rootserver/ddl_task/ob_constraint_task.cpp @@ -94,9 +94,9 @@ int ObCheckConstraintValidationTask::process() 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_USER_SPECIFIED_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_USER_SPECIFIED_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_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)); @@ -338,9 +338,9 @@ int ObForeignKeyConstraintValidationTask::check_fk_constraint_data_valid( ObSqlString child_ddl_schema_hint_str; ObSqlString parent_ddl_schema_hint_str; // 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_USER_SPECIFIED_TIMEOUT))) { + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_USER_SPECIFIED_TIMEOUT))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_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)); @@ -792,7 +792,7 @@ int ObConstraintTask::check_replica_end(bool &is_end) } if (OB_SUCC(ret) && !is_end) { - const int64_t timeout = GCONF.global_index_build_single_replica_timeout; + const int64_t timeout = OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT; if (check_replica_request_time_ + 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 8aba35ef7f..c78a503b84 100644 --- a/src/rootserver/ddl_task/ob_ddl_redefinition_task.cpp +++ b/src/rootserver/ddl_task/ob_ddl_redefinition_task.cpp @@ -132,9 +132,9 @@ int ObDDLRedefinitionSSTableBuildTask::process() } 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(GCONF.global_index_build_single_replica_timeout.get()))) { + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(GCONF.global_index_build_single_replica_timeout.get()))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { LOG_WARN("set timeout failed", K(ret)); } else { if (OB_FAIL(user_sql_proxy->write(tenant_id_, sql_string.ptr(), affected_rows, diff --git a/src/rootserver/ddl_task/ob_index_build_task.cpp b/src/rootserver/ddl_task/ob_index_build_task.cpp index f17997556b..9c7fe63424 100644 --- a/src/rootserver/ddl_task/ob_index_build_task.cpp +++ b/src/rootserver/ddl_task/ob_index_build_task.cpp @@ -115,9 +115,9 @@ 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(GCONF.global_index_build_single_replica_timeout.get()))) { + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(GCONF.global_index_build_single_replica_timeout.get()))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_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))) { @@ -583,7 +583,7 @@ int ObIndexBuildTask::send_build_single_replica_request() ret = OB_NOT_INIT; LOG_WARN("ObIndexBuildTask has not been inited", K(ret)); } else { - const int64_t timeout = GCONF.global_index_build_single_replica_timeout; + 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_, @@ -634,7 +634,7 @@ int ObIndexBuildTask::check_build_single_replica(bool &is_end) } if (OB_SUCC(ret) && !is_end) { - const int64_t timeout = GCONF.global_index_build_single_replica_timeout; + const int64_t timeout = OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT; if (sstable_complete_request_time_ + timeout < ObTimeUtility::current_time()) { is_sstable_complete_task_submitted_ = false; sstable_complete_request_time_ = 0; @@ -777,7 +777,7 @@ int ObIndexBuildTask::verify_checksum() // send column checksum calculation request and wait finish, then verify column checksum if (OB_SUCC(ret) && !state_finished && check_unique_snapshot_ > 0) { - static int64_t checksum_wait_timeout = max(GCONF.global_index_build_single_replica_timeout / 50, 3600L * 1000L * 1000L); + static int64_t checksum_wait_timeout = max(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT / 50, 3600L * 1000L * 1000L); bool is_column_checksum_ready = false; bool dummy_equal = false; if (!wait_column_checksum_ctx_.is_inited() && OB_FAIL(wait_column_checksum_ctx_.init( diff --git a/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp b/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp index 4174d5f357..151924a60c 100644 --- a/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp +++ b/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp @@ -91,9 +91,9 @@ 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(GCONF.global_index_build_single_replica_timeout.get()))) { + if (OB_FAIL(timeout_ctx.set_trx_timeout_us(OB_MAX_DDL_SINGLE_REPLICA_BUILD_TIMEOUT))) { LOG_WARN("set trx timeout failed", K(ret)); - } else if (OB_FAIL(timeout_ctx.set_timeout(GCONF.global_index_build_single_replica_timeout.get()))) { + } else if (OB_FAIL(timeout_ctx.set_timeout(OB_MAX_DDL_SINGLE_REPLICA_BUILD_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 42e2eef9d6..215e0c1c47 100644 --- a/src/rootserver/ddl_task/ob_table_redefinition_task.cpp +++ b/src/rootserver/ddl_task/ob_table_redefinition_task.cpp @@ -181,7 +181,7 @@ int ObTableRedefinitionTask::check_build_replica_timeout() ret = OB_NOT_INIT; LOG_WARN("ObTableRedefinitionTask has not been inited", K(ret)); } else if (build_replica_request_time_ > 0) { - const int64_t timeout = GCONF.global_index_build_single_replica_timeout; + 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; diff --git a/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp b/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp index 71bae59425..d95614f8fb 100644 --- a/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp @@ -512,6 +512,25 @@ int ObInnerTableSchema::all_virtual_ddl_task_status_schema(ObTableSchema &table_ task_version_default); //default_value } + if (OB_SUCC(ret)) { + ObObj execution_id_default; + execution_id_default.set_int(0); + ADD_COLUMN_SCHEMA_T("execution_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + execution_id_default, + execution_id_default); //default_value + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("ddl_stmt_str", //column_name ++column_id, //column_id diff --git a/src/share/inner_table/ob_inner_table_schema.12251_12300.cpp b/src/share/inner_table/ob_inner_table_schema.12251_12300.cpp index 143e0195e5..5a62e497fe 100644 --- a/src/share/inner_table/ob_inner_table_schema.12251_12300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12251_12300.cpp @@ -2180,7 +2180,7 @@ int ObInnerTableSchema::all_virtual_ddl_checksum_schema(ObTableSchema &table_sch } if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("tablet_id", //column_name + ADD_COLUMN_SCHEMA("ddl_task_id", //column_name ++column_id, //column_id 4, //rowkey_id 0, //index_id diff --git a/src/share/inner_table/ob_inner_table_schema.151_200.cpp b/src/share/inner_table/ob_inner_table_schema.151_200.cpp index b61958935c..9102e04269 100644 --- a/src/share/inner_table/ob_inner_table_schema.151_200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.151_200.cpp @@ -5418,7 +5418,7 @@ int ObInnerTableSchema::all_ddl_checksum_schema(ObTableSchema &table_schema) } if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("tablet_id", //column_name + ADD_COLUMN_SCHEMA("ddl_task_id", //column_name ++column_id, //column_id 4, //rowkey_id 0, //index_id diff --git a/src/share/inner_table/ob_inner_table_schema.301_350.cpp b/src/share/inner_table/ob_inner_table_schema.301_350.cpp index f18d0b18bd..cdf86673a6 100644 --- a/src/share/inner_table/ob_inner_table_schema.301_350.cpp +++ b/src/share/inner_table/ob_inner_table_schema.301_350.cpp @@ -2146,6 +2146,25 @@ int ObInnerTableSchema::all_ddl_task_status_schema(ObTableSchema &table_schema) task_version_default); //default_value } + if (OB_SUCC(ret)) { + ObObj execution_id_default; + execution_id_default.set_int(0); + ADD_COLUMN_SCHEMA_T("execution_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + execution_id_default, + execution_id_default); //default_value + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("ddl_stmt_str", //column_name ++column_id, //column_id diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index 4047b99f4c..644a10149e 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -1456,7 +1456,7 @@ def_table_schema( ('tenant_id', 'int'), ('table_id', 'int'), ('execution_id', 'int'), - ('tablet_id', 'int'), + ('ddl_task_id', 'int'), ('column_id', 'int'), ('task_id', 'int'), ], @@ -2889,6 +2889,7 @@ def_table_schema( ('status', 'int'), ('snapshot_version', 'uint', 'false', '0'), ('task_version', 'int', 'false', '0'), + ('execution_id', 'int', 'false', '0'), ('ddl_stmt_str', 'longtext', 'true'), ('ret_code', 'int', 'false', '0'), ('message', 'longtext', 'true'), diff --git a/src/share/ob_ddl_checksum.cpp b/src/share/ob_ddl_checksum.cpp index f29f282a00..6c45bcbd9f 100644 --- a/src/share/ob_ddl_checksum.cpp +++ b/src/share/ob_ddl_checksum.cpp @@ -36,7 +36,7 @@ int ObDDLChecksumOperator::fill_one_item(const ObDDLChecksumItem &item, || OB_FAIL(dml.add_pk_column("table_id", ObSchemaUtils::get_extract_schema_id(exec_tenant_id, item.table_id_))) // currently tablet id is not necessary, so instead we save task id in this column to distinguish different DDL // task_id is the primary key in __all_ddl_task_status, so it can uniquely identify a DDL. - || OB_FAIL(dml.add_pk_column("tablet_id", item.ddl_task_id_)) + || OB_FAIL(dml.add_pk_column("ddl_task_id", item.ddl_task_id_)) || OB_FAIL(dml.add_pk_column("column_id", item.column_id_)) || OB_FAIL(dml.add_pk_column("task_id", item.task_id_)) || OB_FAIL(dml.add_column("checksum", item.checksum_))) { @@ -223,7 +223,7 @@ int ObDDLChecksumOperator::get_table_column_checksum( K(column_checksum_map.created())); } else if (OB_FAIL(sql.assign_fmt( "SELECT column_id, checksum FROM %s " - "WHERE execution_id = %ld AND tenant_id = %ld AND table_id = %ld AND tablet_id = %ld " + "WHERE execution_id = %ld AND tenant_id = %ld AND table_id = %ld AND ddl_task_id = %ld " "ORDER BY column_id", OB_ALL_DDL_CHECKSUM_TNAME, execution_id, ObSchemaUtils::get_extract_tenant_id(exec_tenant_id, tenant_id), ObSchemaUtils::get_extract_schema_id(exec_tenant_id, table_id), ddl_task_id))) { @@ -302,7 +302,7 @@ int ObDDLChecksumOperator::delete_checksum( LOG_WARN("invalid argument", K(ret), K(tenant_id), K(execution_id), K(source_table_id), K(dest_table_id)); } else if (OB_FAIL(sql.assign_fmt( "DELETE /*+ use_plan_cache(none) */ FROM %s " - "WHERE tenant_id = 0 AND execution_id = %ld AND tablet_id = %ld AND table_id IN (%ld, %ld)", + "WHERE tenant_id = 0 AND execution_id = %ld AND ddl_task_id = %ld AND table_id IN (%ld, %ld)", OB_ALL_DDL_CHECKSUM_TNAME, execution_id, ddl_task_id, source_table_id, dest_table_id))) { LOG_WARN("fail to assign fmt", K(ret)); } else if (OB_FAIL(sql_proxy.write(tenant_id, sql.ptr(), affected_rows))) { diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index 10853ed3bc..cabd0ca57e 100644 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -462,10 +462,6 @@ DEF_STR(min_observer_version, OB_CLUSTER_PARAMETER, "4.0.0.0", "the min observer DEF_BOOL(enable_ddl, OB_CLUSTER_PARAMETER, "True", "specifies whether DDL operation is turned on. " "Value: True:turned on; False: turned off", ObParameterAttr(Section::ROOT_SERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); -DEF_TIME(global_index_build_single_replica_timeout, OB_CLUSTER_PARAMETER, "48h", "[1h,)", - "build single replica task timeout " - "when rootservice schedule to build global index. Range: [1h,+∞)", - ObParameterAttr(Section::ROOT_SERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_BOOL(enable_major_freeze, OB_CLUSTER_PARAMETER, "True", "specifies whether major_freeze function is turned on. " "Value: True:turned on; False: turned off", ObParameterAttr(Section::ROOT_SERVICE, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result index ecd72d9f13..fa363d2337 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result @@ -88,7 +88,6 @@ enable_upgrade_mode external_kms_info freeze_trigger_percentage fuse_row_cache_priority -global_index_build_single_replica_timeout global_write_halt_residual_memory ha_high_thread_score ha_low_thread_score -- GitLab