[vector index] fix add vector index with existing index name
This commit is contained in:
parent
4b255c81eb
commit
5f44951995
@ -872,23 +872,29 @@ int ObIndexBuilder::do_create_local_index(
|
||||
bool rowkey_vid_exist = false;
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (share::schema::is_vec_index(my_arg.index_type_)) {
|
||||
const ObTableSchema *rowkey_vid_schema = nullptr;
|
||||
if (OB_FAIL(tmp_arg.assign(my_arg))) {
|
||||
LOG_WARN("fail to assign arg", K(ret));
|
||||
} else if (!tmp_arg.is_valid()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("fail to copy create index arg", K(ret));
|
||||
} else if (!create_index_arg.is_rebuild_index_ &&
|
||||
FALSE_IT(tmp_arg.index_type_ = INDEX_TYPE_VEC_ROWKEY_VID_LOCAL)) {
|
||||
} else if (OB_FAIL(ObVecIndexBuilderUtil::generate_vec_index_name(&allocator, tmp_arg.index_type_, tmp_arg.index_name_, tmp_arg.index_name_))) {
|
||||
LOG_WARN("failed to adjust vec index name", K(ret));
|
||||
} else if (OB_FAIL(ddl_service_.check_aux_index_schema_exist_(tenant_id,
|
||||
tmp_arg,
|
||||
schema_guard,
|
||||
&new_table_schema,
|
||||
rowkey_vid_exist,
|
||||
rowkey_vid_schema))) {
|
||||
LOG_WARN("fail to check rowkey vid schema existence", K(ret));
|
||||
if (OB_FAIL(ObVectorIndexUtil::check_table_exist(new_table_schema, my_arg.index_name_))) { // index_name should be domain index name, like 'idx1'
|
||||
if (OB_ERR_TABLE_EXIST != ret) {
|
||||
LOG_WARN("Failed to check vec table exist", K(ret), K(my_arg.index_name_));
|
||||
}
|
||||
} else {
|
||||
const ObTableSchema *rowkey_vid_schema = nullptr;
|
||||
if (OB_FAIL(tmp_arg.assign(my_arg))) {
|
||||
LOG_WARN("fail to assign arg", K(ret));
|
||||
} else if (!tmp_arg.is_valid()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("fail to copy create index arg", K(ret));
|
||||
} else if (!create_index_arg.is_rebuild_index_ &&
|
||||
FALSE_IT(tmp_arg.index_type_ = INDEX_TYPE_VEC_ROWKEY_VID_LOCAL)) {
|
||||
} else if (OB_FAIL(ObVecIndexBuilderUtil::generate_vec_index_name(&allocator, tmp_arg.index_type_, tmp_arg.index_name_, tmp_arg.index_name_))) {
|
||||
LOG_WARN("failed to adjust vec index name", K(ret));
|
||||
} else if (OB_FAIL(ddl_service_.check_aux_index_schema_exist_(tenant_id,
|
||||
tmp_arg,
|
||||
schema_guard,
|
||||
&new_table_schema,
|
||||
rowkey_vid_exist,
|
||||
rowkey_vid_schema))) {
|
||||
LOG_WARN("fail to check rowkey vid schema existence", K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
|
@ -831,5 +831,40 @@ int ObVectorIndexUtil::generate_index_schema_from_exist_table(
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObVectorIndexUtil::check_table_exist(
|
||||
const ObTableSchema &data_table_schema,
|
||||
const ObString &domain_index_name)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObMultiVersionSchemaService &schema_service = ObMultiVersionSchemaService::get_instance();
|
||||
bool is_exist = false;
|
||||
const int64_t tenant_id = data_table_schema.get_tenant_id();
|
||||
const int64_t database_id = data_table_schema.get_database_id();
|
||||
const int64_t data_table_id = data_table_schema.get_table_id();
|
||||
ObString index_table_name;
|
||||
ObArenaAllocator allocator(ObModIds::OB_SCHEMA);
|
||||
|
||||
if (OB_INVALID_TENANT_ID == tenant_id || OB_INVALID_ID == database_id || OB_INVALID_ID == data_table_id ||
|
||||
domain_index_name.empty()) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid argument", K(ret), K(tenant_id), K(database_id), K(data_table_id), K(domain_index_name));
|
||||
} else if (OB_FAIL(ObTableSchema::build_index_table_name(
|
||||
allocator, data_table_id, domain_index_name, index_table_name))) {
|
||||
LOG_WARN("build_index_table_name failed", K(ret), K(data_table_id), K(domain_index_name));
|
||||
} else if (OB_FAIL(schema_service.check_table_exist(tenant_id,
|
||||
database_id,
|
||||
index_table_name,
|
||||
true, /* is_index_table */
|
||||
OB_INVALID_VERSION, /* latest version */
|
||||
is_exist))) {
|
||||
LOG_WARN("failed to check is table exist", K(ret));
|
||||
} else if (is_exist) {
|
||||
ret = OB_ERR_TABLE_EXIST;
|
||||
LOG_WARN("table is exist, cannot create it twice", K(ret),
|
||||
K(tenant_id), K(database_id), K(domain_index_name));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -103,6 +103,9 @@ public:
|
||||
static bool has_multi_index_on_same_column(
|
||||
ObIArray<uint64_t> &vec_index_cols,
|
||||
const uint64_t col_id);
|
||||
static int check_table_exist(
|
||||
const ObTableSchema &data_table_schema,
|
||||
const ObString &domain_index_name);
|
||||
};
|
||||
|
||||
// For vector index snapshot write data
|
||||
|
Loading…
x
Reference in New Issue
Block a user