From 0c6a4465b500f4dea2448377312bbf214042d021 Mon Sep 17 00:00:00 2001 From: shuwenwei <55970239+shuwenwei@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:25:21 +0800 Subject: [PATCH] Don't print exception log when thread is interrupted (#386) * don't print exception log when thread is interrupted * modify DiskTSMIterator --- .../tsfile/write/writer/TsFileIOWriter.java | 13 ++++++++----- .../writer/tsmiterator/DiskTSMIterator.java | 17 +++++++++-------- 2 files changed, 17 insertions(+), 13 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 cc59fd20d..1ea6fa0c0 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 @@ -369,11 +369,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; @@ -451,6 +447,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 32a32340c..f83ea947f 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 @@ -26,6 +26,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; @@ -49,8 +50,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; @@ -63,7 +63,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(); @@ -76,22 +75,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 = ReadWriteIOUtils.readString(input.wrapAsInputStream());