You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by su...@apache.org on 2019/07/09 12:08:37 UTC

[incubator-iotdb] 01/01: catch exception to find broken tsfile

This is an automated email from the ASF dual-hosted git repository.

suyue pushed a commit to branch hash_map_with_fix_length
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 7e9f543819cdb7348a4a6e9661bf39b0add9dcf1
Author: suyue <23...@qq.com>
AuthorDate: Tue Jul 9 20:07:59 2019 +0800

    catch exception to find broken tsfile
---
 .../iotdb/tsfile/read/controller/ChunkLoader.java  |  6 +++++
 .../tsfile/read/controller/ChunkLoaderImpl.java    |  3 +++
 .../reader/series/FileSeriesReaderWithFilter.java  | 26 +++++++++++++++-------
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoader.java
index 78e561e..de92164 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoader.java
@@ -34,4 +34,10 @@ public interface ChunkLoader {
    */
   void close() throws IOException;
 
+  /**
+   *
+   * @return file name of the chunk.
+   */
+  String printFileName();
+
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoaderImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoaderImpl.java
index 4907634..1f4905f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoaderImpl.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/ChunkLoaderImpl.java
@@ -69,4 +69,7 @@ public class ChunkLoaderImpl implements ChunkLoader {
     reader.close();
   }
 
+  public String printFileName(){
+    return reader.getFileName();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java
index c874e17..d2a8444 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java
@@ -27,14 +27,17 @@ import org.apache.iotdb.tsfile.read.controller.ChunkLoader;
 import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.reader.chunk.ChunkReaderWithFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
- * Series reader is used to query one series of one TsFile,
- * and this reader has a filter operating on the same series.
+ * Series reader is used to query one series of one TsFile, and this reader has a filter operating
+ * on the same series.
  */
 public class FileSeriesReaderWithFilter extends FileSeriesReader {
 
   private Filter filter;
+  private static final Logger LOG = LoggerFactory.getLogger(FileSeriesReaderWithFilter.class);
 
   public FileSeriesReaderWithFilter(ChunkLoader chunkLoader,
       List<ChunkMetaData> chunkMetaDataList, Filter filter) {
@@ -50,12 +53,19 @@ public class FileSeriesReaderWithFilter extends FileSeriesReader {
 
   @Override
   protected boolean chunkSatisfied(ChunkMetaData chunkMetaData) {
-    DigestForFilter digest = new DigestForFilter(chunkMetaData.getStartTime(),
-        chunkMetaData.getEndTime(),
-        chunkMetaData.getDigest().getStatistics().get(StatisticConstant.MIN_VALUE),
-        chunkMetaData.getDigest().getStatistics().get(StatisticConstant.MAX_VALUE),
-        chunkMetaData.getTsDataType());
-    return filter.satisfy(digest);
+    try {
+      assert chunkMetaData.getDigest() != null;
+      assert chunkMetaData.getDigest().getStatistics() != null;
+      DigestForFilter digest = new DigestForFilter(chunkMetaData.getStartTime(),
+          chunkMetaData.getEndTime(),
+          chunkMetaData.getDigest().getStatistics().get(StatisticConstant.MIN_VALUE),
+          chunkMetaData.getDigest().getStatistics().get(StatisticConstant.MAX_VALUE),
+          chunkMetaData.getTsDataType());
+      return filter.satisfy(digest);
+    } catch (Exception e) {
+      LOG.error("when check chunkMetaData, find an error in file {}.", chunkLoader.printFileName());
+    }
+    return false;
   }
 
 }