提交 9dd6c6a8 编写于 作者: O obdev 提交者: wangzelin.wzl

update ddl related inner table

上级 d7c7ca8f
......@@ -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";
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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,
......
......@@ -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(
......
......@@ -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(),
......
......@@ -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;
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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'),
......@@ -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))) {
......
......@@ -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));
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册