in java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java [2376:2439]
public long selfCheckWithInfo(
String filename,
boolean fastFinish,
Map<Long, Pair<Path, TimeseriesMetadata>> timeseriesMetadataMap)
throws IOException, TsFileStatisticsMistakesException {
String message = " exists statistics mistakes at position ";
File checkFile = FSFactoryProducer.getFSFactory().getFile(filename);
if (!checkFile.exists()) {
return TsFileCheckStatus.FILE_NOT_FOUND;
}
long fileSize = checkFile.length();
logger.info("file length: " + fileSize);
int headerLength = TSFileConfig.MAGIC_STRING.getBytes().length + Byte.BYTES;
if (fileSize < headerLength) {
return TsFileCheckStatus.INCOMPATIBLE_FILE;
}
try {
if (!TSFileConfig.MAGIC_STRING.equals(readHeadMagic())
|| (TSFileConfig.VERSION_NUMBER != readVersionNumber())) {
return TsFileCheckStatus.INCOMPATIBLE_FILE;
}
tsFileInput.position(headerLength);
if (isComplete()) {
loadMetadataSize();
if (fastFinish) {
return TsFileCheckStatus.COMPLETE_FILE;
}
}
} catch (StopReadTsFileByInterruptException e) {
throw e;
} catch (IOException e) {
logger.error("Error occurred while fast checking TsFile.");
throw e;
}
for (Map.Entry<Long, Pair<Path, TimeseriesMetadata>> entry : timeseriesMetadataMap.entrySet()) {
TimeseriesMetadata timeseriesMetadata = entry.getValue().right;
TSDataType dataType = timeseriesMetadata.getTsDataType();
Statistics<? extends Serializable> timeseriesMetadataSta = timeseriesMetadata.getStatistics();
Statistics<? extends Serializable> chunkMetadatasSta = Statistics.getStatsByType(dataType);
for (IChunkMetadata chunkMetadata : getChunkMetadataList(entry.getValue().left)) {
long tscheckStatus = TsFileCheckStatus.COMPLETE_FILE;
try {
tscheckStatus = checkChunkAndPagesStatistics(chunkMetadata);
} catch (StopReadTsFileByInterruptException e) {
throw e;
} catch (IOException e) {
logger.error("Error occurred while checking the statistics of chunk and its pages");
throw e;
}
if (tscheckStatus == TsFileCheckStatus.FILE_EXISTS_MISTAKES) {
throw new TsFileStatisticsMistakesException(
"Chunk" + message + chunkMetadata.getOffsetOfChunkHeader());
}
chunkMetadatasSta.mergeStatistics(chunkMetadata.getStatistics());
}
if (!timeseriesMetadataSta.equals(chunkMetadatasSta)) {
long timeseriesMetadataPos = entry.getKey();
throw new TsFileStatisticsMistakesException(
"TimeseriesMetadata" + message + timeseriesMetadataPos);
}
}
return TsFileCheckStatus.COMPLETE_FILE;
}