in backup-core/src/main/java/org/apache/iotdb/backup/core/pipeline/out/sink/OutTsfileDataSink.java [293:330]
private void registDevice(
TsFileWriter tsFileWriter,
Schema schema,
ConcurrentMap<String, Pair<DeviceModel, List<TimeseriesModel>>> deviceInfoMap,
String deviceId) {
boolean needRegist = true;
Pair<DeviceModel, List<TimeseriesModel>> pair = deviceInfoMap.get(deviceId);
Path path = new Path(pair.getLeft().getDeviceName());
synchronized (schema) {
if (schema.getRegisteredTimeseriesMap().size() == 0) {
needRegist = true;
} else if (!schema.containsDevice(path)) {
needRegist = true;
} else {
needRegist = false;
}
}
if (needRegist) {
synchronized (tsFileWriter) {
List<TimeseriesModel> timeseriesModelList = pair.getRight();
List<MeasurementSchema> measurementSchemaList =
timeseriesModelList.stream()
.map(
model -> {
String columnName =
model.getName().substring(pair.getLeft().getDeviceName().length() + 1);
TSDataType type = model.getType();
MeasurementSchema measurementSchema = new MeasurementSchema(columnName, type);
return measurementSchema;
})
.collect(Collectors.toList());
syncRegisterTimeseries(
tsFileWriter, path, measurementSchemaList, pair.getLeft().isAligned());
}
}
}