Fix drop other table's unique constraint

This commit is contained in:
Hongqin-Li 2024-12-16 22:46:28 +00:00 committed by ob-robot
parent d706d32b78
commit ae931e0908
2 changed files with 9 additions and 2 deletions

View File

@ -8367,6 +8367,7 @@ int ObDDLService::get_index_schema_by_name(
ObArenaAllocator allocator(ObModIds::OB_SCHEMA);
const ObString &index_name = drop_index_arg.index_name_;
const bool is_mlog = (obrpc::ObIndexArg::DROP_MLOG == drop_index_arg.index_action_type_);
index_table_schema = nullptr;
//build index name and get index schema
if (is_mlog) {
@ -8390,6 +8391,12 @@ int ObDDLService::get_index_schema_by_name(
LOG_USER_ERROR(OB_ERR_CANT_DROP_FIELD_OR_KEY, index_name.length(), index_name.ptr());
LOG_WARN("get index table schema failed", K(tenant_id),
K(database_id), K(index_table_name), K(ret));
} else if (is_index && data_table_id != index_table_schema->get_data_table_id()) {
ret = OB_ERR_CANT_DROP_FIELD_OR_KEY;
LOG_USER_ERROR(OB_ERR_CANT_DROP_FIELD_OR_KEY, index_name.length(), index_name.ptr());
LOG_WARN("get index table schema failed", K(tenant_id),
K(database_id), K(index_table_name), K(index_table_schema->get_table_id()), K(ret));
index_table_schema = nullptr;
} else if (index_table_schema->is_in_recyclebin()) {
ret = OB_ERR_OPERATION_ON_RECYCLE_OBJECT;
LOG_WARN("index table is in recyclebin", K(ret));

View File

@ -92,9 +92,9 @@ int ObDDLLock::lock_for_add_drop_index(
const int64_t timeout_us = DEFAULT_TIMEOUT;
ObSEArray<ObTabletID, 1> data_tablet_ids;
ObInnerSQLConnection *iconn = nullptr;
if (data_table_schema.is_user_hidden_table()) {
if (OB_UNLIKELY(data_table_schema.is_user_hidden_table() || data_table_id != index_schema.get_data_table_id())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("lock for rebuild hidden table index", K(ret));
LOG_WARN("lock for rebuild hidden table index", K(ret), K(tenant_id), K(data_table_id), K(index_table_id), K(index_schema.get_data_table_id()));
} else if (!need_lock(data_table_schema)) {
LOG_INFO("skip ddl lock", K(data_table_id));
} else {