add defense when creating index tablet

This commit is contained in:
Fengjingkun
2023-06-29 06:42:28 +00:00
committed by ob-robot
parent 71ff41ef12
commit fa9aee2c09
2 changed files with 24 additions and 6 deletions

View File

@ -2024,13 +2024,31 @@ int ObLSTabletService::create_tablet(
table_store_flag.set_with_major_sstable();
tablet_handle.reset();
if (OB_FAIL(ObTabletCreateDeleteHelper::prepare_create_msd_tablet())) {
// ddl schema version defense
if (table_schema.is_index_table()) {
const int64_t table_schema_version = table_schema.get_schema_version();
ObTenantFreezeInfoMgr::FreezeInfo freeze_info;
if (OB_FAIL(MTL_CALL_FREEZE_INFO_MGR(get_freeze_info_behind_snapshot_version, snapshot_version, freeze_info))) {
if (OB_ENTRY_NOT_EXIST != ret) {
LOG_WARN("failed to get freeze info behind snapshot version", K(ret), K(snapshot_version));
} else {
ret = OB_SUCCESS;
}
} else if (OB_UNLIKELY(table_schema_version > freeze_info.schema_version)) {
ret = OB_SCHEMA_ERROR;
LOG_ERROR("schema version in freeze info is less than table schema version", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id),
K(snapshot_version), K(table_schema_version), K(freeze_info), K(create_scn), K(table_schema));
}
}
if (FAILEDx(ObTabletCreateDeleteHelper::prepare_create_msd_tablet())) {
LOG_WARN("fail to prepare create msd tablet", K(ret));
}
{
if (OB_SUCC(ret)) {
ObBucketHashWLockGuard lock_guard(bucket_lock_, key.tablet_id_.hash());
if (FAILEDx(ObTabletCreateDeleteHelper::create_msd_tablet(key, tablet_handle))) {
if (OB_FAIL(ObTabletCreateDeleteHelper::create_msd_tablet(key, tablet_handle))) {
LOG_WARN("failed to create msd tablet", K(ret), K(key));
} else if (OB_ISNULL(tablet = tablet_handle.get_obj())
|| OB_ISNULL(allocator = tablet_handle.get_allocator())) {