From 2ea3738ee8f57f35aa15e3d623666da5c32e016b Mon Sep 17 00:00:00 2001 From: shuwenwei Date: Thu, 23 Jan 2025 09:48:36 +0800 Subject: [PATCH 1/2] don't print exception log when thread is interrupted --- .../write/writer/tsmiterator/DiskTSMIterator.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java index fd413b43a..7f49ad0c3 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java @@ -78,22 +78,24 @@ public boolean hasNext() { } @Override - public Pair next() { + public Pair next() throws IOException { try { if (remainsInFile) { // deserialize from file - return getTimeSerisMetadataFromFile(); + return getTimeSeriesMetadataFromFile(); } else { // get from memory iterator return super.next(); } } catch (IOException e) { - LOG.error("Meets IOException when reading timeseries metadata from disk", e); - return null; + if (!Thread.currentThread().isInterrupted()) { + LOG.error("Meets IOException when reading timeseries metadata from disk", e); + } + throw e; } } - private Pair getTimeSerisMetadataFromFile() throws IOException { + private Pair getTimeSeriesMetadataFromFile() throws IOException { if (currentPos == nextEndPosForDevice) { // deserialize the current device name currentDevice = Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(input.wrapAsInputStream()); From 90b08b30d18ea2539b0e20ebda7e33adc8749cae Mon Sep 17 00:00:00 2001 From: shuwenwei Date: Fri, 24 Jan 2025 17:56:10 +0800 Subject: [PATCH 2/2] modify DiskTSMIterator --- .../apache/tsfile/write/writer/TsFileIOWriter.java | 13 ++++++++----- .../write/writer/tsmiterator/DiskTSMIterator.java | 5 ++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java index 54244ed08..85bea9c98 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/TsFileIOWriter.java @@ -440,11 +440,7 @@ private void readChunkMetadataAndConstructIndexTree() throws IOException { // serialize the SEPARATOR of MetaData ReadWriteIOUtils.write(MetaMarker.SEPARATOR, out.wrapAsStream()); - TSMIterator tsmIterator = - hasChunkMetadataInDisk - ? TSMIterator.getTSMIteratorInDisk( - chunkMetadataTempFile, chunkGroupMetadataList, endPosInCMTForDevice) - : TSMIterator.getTSMIteratorInMemory(chunkGroupMetadataList); + TSMIterator tsmIterator = getTSMIterator(); Map deviceMetadataIndexMap = new TreeMap<>(); Queue measurementMetadataIndexQueue = new ArrayDeque<>(); IDeviceID currentDevice = null; @@ -532,6 +528,13 @@ private void readChunkMetadataAndConstructIndexTree() throws IOException { ReadWriteIOUtils.write(size, out.wrapAsStream()); } + protected TSMIterator getTSMIterator() throws IOException { + return hasChunkMetadataInDisk + ? TSMIterator.getTSMIteratorInDisk( + chunkMetadataTempFile, chunkGroupMetadataList, endPosInCMTForDevice) + : TSMIterator.getTSMIteratorInMemory(chunkGroupMetadataList); + } + /** * get the length of normal OutputStream. * diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java index 7f49ad0c3..44c596b1d 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/tsmiterator/DiskTSMIterator.java @@ -28,6 +28,7 @@ import org.apache.tsfile.file.metadata.TimeseriesMetadata; import org.apache.tsfile.read.common.Path; import org.apache.tsfile.read.reader.LocalTsFileInput; +import org.apache.tsfile.read.reader.TsFileInput; import org.apache.tsfile.utils.Pair; import org.apache.tsfile.utils.ReadWriteIOUtils; @@ -51,8 +52,7 @@ public class DiskTSMIterator extends TSMIterator { private static final Logger LOG = LoggerFactory.getLogger(DiskTSMIterator.class); private LinkedList endPosForEachDevice; - private File cmtFile; - private LocalTsFileInput input; + protected TsFileInput input; private long fileLength = 0; private long currentPos = 0; private long nextEndPosForDevice = 0; @@ -65,7 +65,6 @@ protected DiskTSMIterator( LinkedList endPosForEachDevice) throws IOException { super(chunkGroupMetadataList); - this.cmtFile = cmtFile; this.endPosForEachDevice = endPosForEachDevice; this.input = new LocalTsFileInput(cmtFile.toPath()); this.fileLength = cmtFile.length();