This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch MoreErrorLog in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6b59007b12141a44d166841f526054117e3e655d Author: JackieTien97 <[email protected]> AuthorDate: Fri Jan 8 14:14:32 2021 +0800 add error log to print file name while error happened --- .../iotdb/tsfile/read/TsFileSequenceReader.java | 168 ++++++++++++++------- 1 file changed, 114 insertions(+), 54 deletions(-) diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java index 6d79f9b..777893c 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java @@ -20,6 +20,7 @@ package org.apache.iotdb.tsfile.read; import java.io.File; import java.io.IOException; +import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; @@ -240,8 +241,14 @@ public class TsFileSequenceReader implements AutoCloseable { * @throws IOException io error */ public TsFileMetadata readFileMetadata() throws IOException { - if (tsFileMetaData == null) { - tsFileMetaData = TsFileMetadata.deserializeFrom(readData(fileMetadataPos, fileMetadataSize)); + try { + if (tsFileMetaData == null) { + tsFileMetaData = TsFileMetadata + .deserializeFrom(readData(fileMetadataPos, fileMetadataSize)); + } + } catch (BufferOverflowException e) { + logger.error("Something error happened while reading file metadata of file {}", file, e); + throw e; } return tsFileMetaData; } @@ -313,7 +320,13 @@ public class TsFileSequenceReader implements AutoCloseable { ByteBuffer buffer = readData(metadataIndexPair.left.getOffset(), metadataIndexPair.right); MetadataIndexNode metadataIndexNode = deviceMetadataIndexNode; if (!metadataIndexNode.getNodeType().equals(MetadataIndexNodeType.LEAF_MEASUREMENT)) { - metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + try { + metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + } catch (BufferOverflowException e) { + logger.error("Something error happened while deserializing MetadataIndexNode of file {}", + file, e); + throw e; + } metadataIndexPair = getMetadataAndEndOffset(metadataIndexNode, path.getMeasurement(), MetadataIndexNodeType.INTERNAL_MEASUREMENT, false); } @@ -323,7 +336,13 @@ public class TsFileSequenceReader implements AutoCloseable { List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>(); buffer = readData(metadataIndexPair.left.getOffset(), metadataIndexPair.right); while (buffer.hasRemaining()) { - timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer)); + try { + timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer)); + } catch (BufferOverflowException e) { + logger.error("Something error happened while deserializing TimeseriesMetadata of file {}", + file, e); + throw e; + } } // return null if path does not exist in the TsFile int searchResult = binarySearchInTimeseriesMetadataList(timeseriesMetadataList, @@ -347,7 +366,13 @@ public class TsFileSequenceReader implements AutoCloseable { ByteBuffer buffer = readData(metadataIndexPair.left.getOffset(), metadataIndexPair.right); MetadataIndexNode metadataIndexNode = deviceMetadataIndexNode; if (!metadataIndexNode.getNodeType().equals(MetadataIndexNodeType.LEAF_MEASUREMENT)) { - metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + try { + metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + } catch (BufferOverflowException e) { + logger.error("Something error happened while deserializing MetadataIndexNode of file {}", + file, e); + throw e; + } metadataIndexPair = getMetadataAndEndOffset(metadataIndexNode, path.getMeasurement(), MetadataIndexNodeType.INTERNAL_MEASUREMENT, false); } @@ -357,7 +382,14 @@ public class TsFileSequenceReader implements AutoCloseable { List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>(); buffer = readData(metadataIndexPair.left.getOffset(), metadataIndexPair.right); while (buffer.hasRemaining()) { - TimeseriesMetadata timeseriesMetadata = TimeseriesMetadata.deserializeFrom(buffer); + TimeseriesMetadata timeseriesMetadata; + try { + timeseriesMetadata = TimeseriesMetadata.deserializeFrom(buffer); + } catch (BufferOverflowException e) { + logger.error("Something error happened while deserializing TimeseriesMetadata of file {}", + file, e); + throw e; + } if (allSensors.contains(timeseriesMetadata.getMeasurementId())) { timeseriesMetadataList.add(timeseriesMetadata); } @@ -386,7 +418,13 @@ public class TsFileSequenceReader implements AutoCloseable { List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>(); MetadataIndexNode metadataIndexNode = deviceMetadataIndexNode; if (!metadataIndexNode.getNodeType().equals(MetadataIndexNodeType.LEAF_MEASUREMENT)) { - metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + try { + metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + } catch (BufferOverflowException e) { + logger.error("Something error happened while deserializing MetadataIndexNode of file {}", + file, e); + throw e; + } measurementMetadataIndexPair = getMetadataAndEndOffset(metadataIndexNode, measurementList.get(i), MetadataIndexNodeType.INTERNAL_MEASUREMENT, false); } @@ -396,7 +434,13 @@ public class TsFileSequenceReader implements AutoCloseable { buffer = readData(measurementMetadataIndexPair.left.getOffset(), measurementMetadataIndexPair.right); while (buffer.hasRemaining()) { - timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer)); + try { + timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer)); + } catch (BufferOverflowException e) { + logger.error("Something error happened while deserializing TimeseriesMetadata of file {}", + file, e); + throw e; + } } for (int j = i; j < measurementList.size(); j++) { String current = measurementList.get(j); @@ -583,32 +627,37 @@ public class TsFileSequenceReader implements AutoCloseable { private void generateMetadataIndex(MetadataIndexEntry metadataIndex, ByteBuffer buffer, String deviceId, MetadataIndexNodeType type, Map<String, List<TimeseriesMetadata>> timeseriesMetadataMap) throws IOException { - switch (type) { - case INTERNAL_DEVICE: - case LEAF_DEVICE: - case INTERNAL_MEASUREMENT: - deviceId = metadataIndex.getName(); - MetadataIndexNode metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); - int metadataIndexListSize = metadataIndexNode.getChildren().size(); - for (int i = 0; i < metadataIndexListSize; i++) { - long endOffset = metadataIndexNode.getEndOffset(); - if (i != metadataIndexListSize - 1) { - endOffset = metadataIndexNode.getChildren().get(i + 1).getOffset(); + try { + switch (type) { + case INTERNAL_DEVICE: + case LEAF_DEVICE: + case INTERNAL_MEASUREMENT: + deviceId = metadataIndex.getName(); + MetadataIndexNode metadataIndexNode = MetadataIndexNode.deserializeFrom(buffer); + int metadataIndexListSize = metadataIndexNode.getChildren().size(); + for (int i = 0; i < metadataIndexListSize; i++) { + long endOffset = metadataIndexNode.getEndOffset(); + if (i != metadataIndexListSize - 1) { + endOffset = metadataIndexNode.getChildren().get(i + 1).getOffset(); + } + ByteBuffer nextBuffer = readData(metadataIndexNode.getChildren().get(i).getOffset(), + endOffset); + generateMetadataIndex(metadataIndexNode.getChildren().get(i), nextBuffer, deviceId, + metadataIndexNode.getNodeType(), timeseriesMetadataMap); } - ByteBuffer nextBuffer = readData(metadataIndexNode.getChildren().get(i).getOffset(), - endOffset); - generateMetadataIndex(metadataIndexNode.getChildren().get(i), nextBuffer, deviceId, - metadataIndexNode.getNodeType(), timeseriesMetadataMap); - } - break; - case LEAF_MEASUREMENT: - List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>(); - while (buffer.hasRemaining()) { - timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer)); - } - timeseriesMetadataMap.computeIfAbsent(deviceId, k -> new ArrayList<>()) - .addAll(timeseriesMetadataList); - break; + break; + case LEAF_MEASUREMENT: + List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>(); + while (buffer.hasRemaining()) { + timeseriesMetadataList.add(TimeseriesMetadata.deserializeFrom(buffer)); + } + timeseriesMetadataMap.computeIfAbsent(deviceId, k -> new ArrayList<>()) + .addAll(timeseriesMetadataList); + break; + } + } catch (BufferOverflowException e) { + logger.error("Something error happened while generating MetadataIndex of file {}", file, e); + throw e; } } @@ -668,14 +717,20 @@ public class TsFileSequenceReader implements AutoCloseable { */ private Pair<MetadataIndexEntry, Long> getMetadataAndEndOffset(MetadataIndexNode metadataIndex, String name, MetadataIndexNodeType type, boolean exactSearch) throws IOException { - if (!metadataIndex.getNodeType().equals(type)) { - return metadataIndex.getChildIndexEntry(name, exactSearch); - } else { - Pair<MetadataIndexEntry, Long> childIndexEntry = metadataIndex - .getChildIndexEntry(name, false); - ByteBuffer buffer = readData(childIndexEntry.left.getOffset(), childIndexEntry.right); - return getMetadataAndEndOffset(MetadataIndexNode.deserializeFrom(buffer), name, type, - false); + try { + if (!metadataIndex.getNodeType().equals(type)) { + return metadataIndex.getChildIndexEntry(name, exactSearch); + } else { + Pair<MetadataIndexEntry, Long> childIndexEntry = metadataIndex + .getChildIndexEntry(name, false); + ByteBuffer buffer = readData(childIndexEntry.left.getOffset(), childIndexEntry.right); + return getMetadataAndEndOffset(MetadataIndexNode.deserializeFrom(buffer), name, type, + false); + } + } catch (BufferOverflowException e) { + logger + .error("Something error happened while deserializing MetadataIndex of file {}", file, e); + throw e; } } @@ -1060,22 +1115,27 @@ public class TsFileSequenceReader implements AutoCloseable { */ public List<ChunkMetadata> readChunkMetaDataList(TimeseriesMetadata timeseriesMetaData) throws IOException { - readFileMetadata(); - List<Pair<Long, Long>> versionInfo = tsFileMetaData.getVersionInfo(); - ArrayList<ChunkMetadata> chunkMetadataList = new ArrayList<>(); - long startOffsetOfChunkMetadataList = timeseriesMetaData.getOffsetOfChunkMetaDataList(); - int dataSizeOfChunkMetadataList = timeseriesMetaData.getDataSizeOfChunkMetaDataList(); + try { + readFileMetadata(); + List<Pair<Long, Long>> versionInfo = tsFileMetaData.getVersionInfo(); + ArrayList<ChunkMetadata> chunkMetadataList = new ArrayList<>(); + long startOffsetOfChunkMetadataList = timeseriesMetaData.getOffsetOfChunkMetaDataList(); + int dataSizeOfChunkMetadataList = timeseriesMetaData.getDataSizeOfChunkMetaDataList(); - ByteBuffer buffer = readData(startOffsetOfChunkMetadataList, dataSizeOfChunkMetadataList); - while (buffer.hasRemaining()) { - chunkMetadataList.add(ChunkMetadata.deserializeFrom(buffer)); - } + ByteBuffer buffer = readData(startOffsetOfChunkMetadataList, dataSizeOfChunkMetadataList); + while (buffer.hasRemaining()) { + chunkMetadataList.add(ChunkMetadata.deserializeFrom(buffer)); + } - VersionUtils.applyVersion(chunkMetadataList, versionInfo); + VersionUtils.applyVersion(chunkMetadataList, versionInfo); - // minimize the storage of an ArrayList instance. - chunkMetadataList.trimToSize(); - return chunkMetadataList; + // minimize the storage of an ArrayList instance. + chunkMetadataList.trimToSize(); + return chunkMetadataList; + } catch (BufferOverflowException e) { + logger.error("Something error happened while reading ChunkMetaDataList of file {}", file, e); + throw e; + } } /**
