Skip to content

Commit 955396c

Browse files
guojn1githubgxll
authored andcommitted
[fix][dingo-store-proxy] Correct the truncate process
1 parent d680c83 commit 955396c

File tree

1 file changed

+90
-87
lines changed

1 file changed

+90
-87
lines changed

dingo-store-proxy/src/main/java/io/dingodb/store/proxy/meta/MetaService.java

Lines changed: 90 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,26 +1032,14 @@ public long truncateTable(long schemaId, @NonNull String tableName, long tableEn
10321032
}
10331033

10341034
// Generate new table ids.
1035-
boolean autoInc = table.getTableDefinition().getColumns().stream()
1036-
.anyMatch(io.dingodb.sdk.service.entity.meta.ColumnDefinition::isAutoIncrement);
10371035
checkRegionConsistent(table, false);
10381036
for (TableDefinitionWithId index : indexes) {
10391037
checkRegionConsistent(index, true);
10401038
}
10411039

1042-
long ts = TsoService.getDefault().tso();
1043-
dropRegionByTable(MAPPER.idFrom(table.getTableId()), jobId, ts, autoInc);
1044-
1045-
for (TableDefinitionWithId index : indexes) {
1046-
dropRegionByTable(MAPPER.idFrom(index.getTableId()), jobId, ts);
1047-
}
1048-
1049-
List<DingoCommonId> oldIds = new ArrayList<>();
1050-
oldIds.add(table.getTableId());
1051-
10521040
// Reset table id.
10531041
io.dingodb.sdk.service.entity.meta.TableDefinition tableDefinition = table.getTableDefinition();
1054-
tableDefinition.setSchemaState(io.dingodb.sdk.service.entity.common.SchemaState.SCHEMA_DELETE_ONLY);
1042+
10551043
DingoCommonId tableId = DingoCommonId.builder()
10561044
.entityType(EntityType.ENTITY_TYPE_TABLE)
10571045
.parentEntityId(schemaId)
@@ -1070,8 +1058,7 @@ public long truncateTable(long schemaId, @NonNull String tableName, long tableEn
10701058
.collect(Collectors.toList());
10711059
TableIdWithPartIds newTableId =
10721060
TableIdWithPartIds.builder().tableId(tableId).partIds(tablePartIds).build();
1073-
oldIds.forEach(id -> infoSchemaService.updateTable(id.getParentEntityId(), table));
1074-
1061+
DingoCommonId originTableId = table.getTableId();
10751062
resetTableId(newTableId, table);
10761063
table.getTableDefinition().setSchemaState(io.dingodb.sdk.service.entity.common.SchemaState.SCHEMA_PUBLIC);
10771064

@@ -1113,86 +1100,102 @@ public long truncateTable(long schemaId, @NonNull String tableName, long tableEn
11131100
.build()
11141101
);
11151102
}
1116-
if (indexes.isEmpty()) {
1117-
return tableEntityId;
1118-
}
1119-
1120-
// create index id
1121-
List<DingoCommonId> indexIds = coordinatorService.createIds(
1122-
tso(),
1123-
CreateIdsRequest.builder().idEpochType(IdEpochType.ID_NEXT_TABLE).count(indexes.size()).build()
1124-
).getIds()
1125-
.stream()
1126-
.map(id -> DingoCommonId.builder()
1127-
.entityId(id)
1128-
.entityType(EntityType.ENTITY_TYPE_INDEX)
1129-
.parentEntityId(tableEntityId)
1130-
.build())
1131-
.collect(Collectors.toList());
1132-
1133-
for (int i = 0; i < indexes.size(); i++) {
1134-
int finalI = i;
1135-
TableDefinitionWithId indexDefinitionWithId = indexes.get(i);
1136-
List<DingoCommonId> indexPartIds = coordinatorService.createIds(
1137-
tso(), CreateIdsRequest.builder()
1138-
.idEpochType(IdEpochType.ID_NEXT_TABLE)
1139-
.count(indexDefinitionWithId.getTableDefinition()
1140-
.getTablePartition().getPartitions().size())
1141-
.build()
1142-
).getIds().stream()
1103+
if (!indexes.isEmpty()) {
1104+
// create index id
1105+
List<DingoCommonId> indexIds = coordinatorService.createIds(
1106+
tso(),
1107+
CreateIdsRequest.builder().idEpochType(IdEpochType.ID_NEXT_TABLE).count(indexes.size()).build()
1108+
).getIds()
1109+
.stream()
11431110
.map(id -> DingoCommonId.builder()
1144-
.entityType(EntityType.ENTITY_TYPE_PART)
1145-
.parentEntityId(indexIds.get(finalI).getEntityId())
11461111
.entityId(id)
1112+
.entityType(EntityType.ENTITY_TYPE_INDEX)
1113+
.parentEntityId(tableEntityId)
11471114
.build())
11481115
.collect(Collectors.toList());
1149-
TableIdWithPartIds indexIdWithPartIds = TableIdWithPartIds.builder()
1150-
.tableId(indexIds.get(i))
1151-
.partIds(indexPartIds)
1152-
.build();
1153-
1154-
resetTableId(indexIdWithPartIds, indexDefinitionWithId);
1155-
infoSchemaService.createIndex(
1156-
schemaId,
1157-
tableEntityId,
1158-
indexDefinitionWithId
1159-
);
1160-
}
1161-
for (TableDefinitionWithId withId : indexes) {
1162-
io.dingodb.sdk.service.entity.meta.TableDefinition definition = withId.getTableDefinition();
1163-
for (Partition partition : definition.getTablePartition().getPartitions()) {
1164-
IndexParameter indexParameter = definition.getIndexParameter();
1165-
if (indexParameter.getVectorIndexParameter() != null) {
1166-
indexParameter.setIndexType(IndexType.INDEX_TYPE_VECTOR);
1167-
} else if (indexParameter.getDocumentIndexParameter() != null) {
1168-
indexParameter.setIndexType(IndexType.INDEX_TYPE_DOCUMENT);
1169-
}
1170-
CreateRegionRequest request = CreateRegionRequest.builder()
1171-
.regionName("I_" + schemaId + "_" + definition.getName() + "_part_"
1172-
+ partition.getId().getEntityId())
1173-
.regionType(definition.getIndexParameter().getIndexType() == IndexType.INDEX_TYPE_SCALAR
1174-
? RegionType.STORE_REGION : RegionType.INDEX_REGION)
1175-
.replicaNum(tableDefinition.getReplica())
1176-
.range(partition.getRange())
1177-
.rawEngine(RawEngine.RAW_ENG_ROCKSDB)
1178-
.storeEngine(definition.getStoreEngine())
1179-
.schemaId(schemaId)
1180-
.tableId(tableId.getEntityId())
1181-
.partId(partition.getId().getEntityId())
1182-
.tenantId(withId.getTenantId())
1183-
.indexId(withId.getTableId().getEntityId())
1184-
.indexParameter(indexParameter)
1116+
for (int i = 0; i < indexes.size(); i++) {
1117+
int finalI = i;
1118+
TableDefinitionWithId indexDefinitionWithId = indexes.get(i);
1119+
List<DingoCommonId> indexPartIds = coordinatorService.createIds(
1120+
tso(), CreateIdsRequest.builder()
1121+
.idEpochType(IdEpochType.ID_NEXT_TABLE)
1122+
.count(indexDefinitionWithId.getTableDefinition()
1123+
.getTablePartition().getPartitions().size())
1124+
.build()
1125+
).getIds().stream()
1126+
.map(id -> DingoCommonId.builder()
1127+
.entityType(EntityType.ENTITY_TYPE_PART)
1128+
.parentEntityId(indexIds.get(finalI).getEntityId())
1129+
.entityId(id)
1130+
.build())
1131+
.collect(Collectors.toList());
1132+
TableIdWithPartIds indexIdWithPartIds = TableIdWithPartIds.builder()
1133+
.tableId(indexIds.get(i))
1134+
.partIds(indexPartIds)
11851135
.build();
1186-
try {
1187-
LogUtils.info(log, "create region, range:{}", partition.getRange());
1188-
coordinatorService.createRegion(tso(), request);
1189-
} catch (Exception e) {
1190-
LogUtils.error(log, "create region error,schemaId:{},regionId:{}",
1191-
schemaId, partition.getRange(), e);
1192-
throw e;
1136+
resetTableId(indexIdWithPartIds, indexDefinitionWithId);
1137+
infoSchemaService.createIndex(
1138+
schemaId,
1139+
tableEntityId,
1140+
indexDefinitionWithId
1141+
);
1142+
}
1143+
for (TableDefinitionWithId withId : indexes) {
1144+
io.dingodb.sdk.service.entity.meta.TableDefinition definition = withId.getTableDefinition();
1145+
for (Partition partition : definition.getTablePartition().getPartitions()) {
1146+
IndexParameter indexParameter = definition.getIndexParameter();
1147+
if (indexParameter.getVectorIndexParameter() != null) {
1148+
indexParameter.setIndexType(IndexType.INDEX_TYPE_VECTOR);
1149+
} else if (indexParameter.getDocumentIndexParameter() != null) {
1150+
indexParameter.setIndexType(IndexType.INDEX_TYPE_DOCUMENT);
1151+
}
1152+
CreateRegionRequest request = CreateRegionRequest.builder()
1153+
.regionName("I_" + schemaId + "_" + definition.getName() + "_part_"
1154+
+ partition.getId().getEntityId())
1155+
.regionType(definition.getIndexParameter().getIndexType() == IndexType.INDEX_TYPE_SCALAR
1156+
? RegionType.STORE_REGION : RegionType.INDEX_REGION)
1157+
.replicaNum(tableDefinition.getReplica())
1158+
.range(partition.getRange())
1159+
.rawEngine(RawEngine.RAW_ENG_ROCKSDB)
1160+
.storeEngine(definition.getStoreEngine())
1161+
.schemaId(schemaId)
1162+
.tableId(tableId.getEntityId())
1163+
.partId(partition.getId().getEntityId())
1164+
.tenantId(withId.getTenantId())
1165+
.indexId(withId.getTableId().getEntityId())
1166+
.indexParameter(indexParameter)
1167+
.build();
1168+
try {
1169+
LogUtils.info(log, "create region, range:{}", partition.getRange());
1170+
coordinatorService.createRegion(tso(), request);
1171+
} catch (Exception e) {
1172+
LogUtils.error(log, "create region error,schemaId:{},regionId:{}",
1173+
schemaId, partition.getRange(), e);
1174+
throw e;
1175+
}
11931176
}
11941177
}
11951178
}
1179+
1180+
TableDefinitionWithId originTable = Optional.mapOrGet(
1181+
infoSchemaService.getTable(schemaId, originTableId.getEntityId()), __ -> (TableDefinitionWithId) __, () -> null);
1182+
1183+
List<Object> originIndexList = infoSchemaService.listIndex(schemaId, originTable.getTableId().getEntityId());
1184+
boolean autoInc = originTable.getTableDefinition().getColumns().stream()
1185+
.anyMatch(io.dingodb.sdk.service.entity.meta.ColumnDefinition::isAutoIncrement);
1186+
1187+
long ts = TsoService.getDefault().tso();
1188+
dropRegionByTable(MAPPER.idFrom(originTableId), jobId, ts, autoInc);
1189+
1190+
for (Object indexObj : originIndexList) {
1191+
TableDefinitionWithId originIndex = (TableDefinitionWithId) indexObj;
1192+
dropRegionByTable(MAPPER.idFrom(originIndex.getTableId()), jobId, ts);
1193+
}
1194+
originTable.getTableDefinition()
1195+
.setSchemaState(io.dingodb.sdk.service.entity.common.SchemaState.SCHEMA_DELETE_ONLY);
1196+
List<DingoCommonId> oldIds = new ArrayList<>();
1197+
oldIds.add(originTableId);
1198+
oldIds.forEach(id -> infoSchemaService.updateTable(id.getParentEntityId(), originTable));
11961199
return tableEntityId;
11971200
}
11981201

0 commit comments

Comments
 (0)