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

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


The following commit(s) were added to refs/heads/debug_metero by this push:
     new 610a74c  add logs and catch NPE in filter chunks
610a74c is described below

commit 610a74c592225b9ae43e9b5647abd9a36af452af
Author: jt2594838 <[email protected]>
AuthorDate: Thu Mar 12 11:16:28 2020 +0800

    add logs and catch NPE in filter chunks
---
 .../apache/iotdb/db/engine/merge/task/MergeFileTask.java  | 15 +++++++++++++--
 .../db/engine/storagegroup/StorageGroupProcessor.java     |  2 +-
 .../apache/iotdb/tsfile/write/writer/TsFileIOWriter.java  |  6 +++++-
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java 
b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java
index 9c01908..06e9198 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java
@@ -166,7 +166,16 @@ class MergeFileTask {
               new File(nextMergeVersionFile.getAbsolutePath() + 
TsFileResource.RESOURCE_SUFFIX));
       seqFile.setFile(nextMergeVersionFile);
     } catch (Exception e) {
-      logger.error("merge broken file: " + 
oldFileWriter.getFile().getAbsolutePath(), e);
+      logger.error("An exception is encountered when moving merged chunks to 
the old file {}: {}"
+          ,seqFile, e.getMessage());
+      // the old file may have been truncated, recover it if so
+      RestorableTsFileIOWriter oldFileRecoverWriter = new 
RestorableTsFileIOWriter(
+          seqFile.getFile());
+      if (oldFileRecoverWriter.hasCrashed() && 
oldFileRecoverWriter.canWrite()) {
+        oldFileRecoverWriter.endFile(new 
Schema(oldFileRecoverWriter.getKnownSchema()));
+      } else {
+        oldFileRecoverWriter.close();
+      }
       throw e;
     } finally {
       seqFile.getWriteQueryLock().writeLock().unlock();
@@ -253,7 +262,9 @@ class MergeFileTask {
               new File(nextMergeVersionFile.getAbsolutePath() + 
TsFileResource.RESOURCE_SUFFIX));
       seqFile.setFile(nextMergeVersionFile);
     } catch (Exception e) {
-      logger.error(e.getMessage(), e);
+      logger.error("An exception is encountered when moving unmerged chunks to 
the new file {}: {}"
+          ,seqFile, e.getMessage());
+      throw e;
     }  finally {
       seqFile.getWriteQueryLock().writeLock().unlock();
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 16bfb4a..7ceb249 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -286,7 +286,7 @@ public class StorageGroupProcessor {
       if 
(!IoTDBDescriptor.getInstance().getConfig().isContinueMergeAfterReboot()) {
         mergingMods.delete();
       }
-    } catch (IOException | MetadataException e) {
+    } catch (Exception e) {
       throw new StorageGroupProcessorException(e);
     }
 
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
index 597273c..aebfe99 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
@@ -407,7 +407,11 @@ public class TsFileIOWriter {
       while (chunkMetaDataIterator.hasNext()) {
         ChunkMetaData chunkMetaData = chunkMetaDataIterator.next();
         Path path = new Path(deviceId, chunkMetaData.getMeasurementUid());
-        int startTimeIdx = startTimeIdxes.get(path);
+        Integer startTimeIdx = startTimeIdxes.get(path);
+        if (startTimeIdx == null) {
+          logger.error("Unexpected timeseries {} found in file {}", path, 
file);
+          continue;
+        }
 
         List<Long> pathChunkStartTimes = chunkStartTimes.get(path);
         boolean chunkValid = startTimeIdx < pathChunkStartTimes.size()

Reply via email to