提交 86bdd489 编写于 作者: H Hongqin-Li 提交者: ob-robot

Fix offline ddl enter before index task finish

上级 fd3296d7
......@@ -2613,6 +2613,21 @@ int ObDDLTaskRecordOperator::check_has_conflict_ddl(
}
break;
}
case ObDDLType::DDL_DOUBLE_TABLE_OFFLINE:
case ObDDLType::DDL_MODIFY_COLUMN:
case ObDDLType::DDL_ADD_PRIMARY_KEY:
case ObDDLType::DDL_DROP_PRIMARY_KEY:
case ObDDLType::DDL_ALTER_PRIMARY_KEY:
case ObDDLType::DDL_ALTER_PARTITION_BY:
case ObDDLType::DDL_DROP_COLUMN:
case ObDDLType::DDL_CONVERT_TO_CHARACTER:
case ObDDLType::DDL_ADD_COLUMN_OFFLINE:
case ObDDLType::DDL_COLUMN_REDEFINITION:
case ObDDLType::DDL_TABLE_REDEFINITION:
case ObDDLType::DDL_DIRECT_LOAD: {
has_conflict_ddl = true;
break;
}
default: {
// do nothing
}
......
......@@ -10867,6 +10867,7 @@ int ObDDLService::do_offline_ddl_in_trans(obrpc::ObAlterTableArg &alter_table_ar
// submit async build index task
if (OB_FAIL(ret)) {
} else if (is_double_table_long_running_ddl(ddl_type)) {
bool has_conflict_ddl = false;
ObCreateDDLTaskParam param(tenant_id,
ddl_type,
orig_table_schema,
......@@ -10882,6 +10883,11 @@ int ObDDLService::do_offline_ddl_in_trans(obrpc::ObAlterTableArg &alter_table_ar
(void)snprintf(err_msg, sizeof(err_msg), "%s on temporary table is", ddl_type_str(ddl_type));
LOG_WARN("double table long running ddl on temporary table is disallowed", K(ret), K(ddl_type));
LOG_USER_ERROR(OB_OP_NOT_ALLOW, err_msg);
} else if (OB_FAIL(ObDDLTaskRecordOperator::check_has_conflict_ddl(sql_proxy_, tenant_id, orig_table_schema->get_table_id(), 0, ddl_type, has_conflict_ddl))) {
LOG_WARN("failed to check ddl conflict", K(ret));
} else if (has_conflict_ddl) {
ret = OB_SCHEMA_EAGAIN;
LOG_WARN("failed to alter table that has conflict ddl", K(ret), K(orig_table_schema->get_table_id()));
} else if (OB_FAIL(root_service->get_ddl_scheduler().create_ddl_task(param, trans, task_record))) {
LOG_WARN("submit ddl task failed", K(ret));
} else {
......@@ -19697,6 +19703,7 @@ int ObDDLService::update_index_status(const obrpc::ObUpdateIndexStatusArg &arg)
ret = OB_SUCC(ret) ? commit_ret : ret;
}
}
DEBUG_SYNC(AFTER_UPDATE_INDEX_STATUS);
if (OB_SUCC(ret)) {
if (OB_FAIL(publish_schema(tenant_id))) {
LOG_WARN("publish schema failed", KR(ret));
......@@ -453,6 +453,7 @@ class ObString;
ACT(BEFORE_DATA_TABLETS_MIGRATION_TASK,)\
ACT(AFTER_LS_GC_DELETE_ALL_TABLETS,)\
ACT(BEFORE_ARCHIVE_ADD_LS_TASK,)\
ACT(AFTER_UPDATE_INDEX_STATUS,)\
ACT(MAX_DEBUG_SYNC_POINT,)
DECLARE_ENUM(ObDebugSyncPoint, debug_sync_point, OB_DEBUG_SYNC_POINT_DEF);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册