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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 7ea4f0d  [IOTDB-1531] Check tsfile creation time when recovering 
(#3642)
7ea4f0d is described below

commit 7ea4f0d6d71bcb72b1e21a5684fdb79ae82707b4
Author: Alan Choo <[email protected]>
AuthorDate: Mon Aug 16 17:20:26 2021 +0800

    [IOTDB-1531] Check tsfile creation time when recovering (#3642)
---
 .../engine/storagegroup/StorageGroupProcessor.java | 28 +++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

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 77d68b1..77d89bd 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
@@ -635,7 +635,7 @@ public class StorageGroupProcessor {
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   private Pair<List<TsFileResource>, List<TsFileResource>> 
getAllFiles(List<String> folders)
-      throws IOException {
+      throws IOException, StorageGroupProcessorException {
     List<File> tsFiles = new ArrayList<>();
     List<File> upgradeFiles = new ArrayList<>();
     for (String baseDir : folders) {
@@ -683,10 +683,18 @@ public class StorageGroupProcessor {
         }
       }
     }
+
     tsFiles.sort(this::compareFileName);
+    if (!tsFiles.isEmpty()) {
+      checkTsFileTime(tsFiles.get(tsFiles.size() - 1));
+    }
     List<TsFileResource> ret = new ArrayList<>();
     tsFiles.forEach(f -> ret.add(new TsFileResource(f)));
+
     upgradeFiles.sort(this::compareFileName);
+    if (!upgradeFiles.isEmpty()) {
+      checkTsFileTime(upgradeFiles.get(upgradeFiles.size() - 1));
+    }
     List<TsFileResource> upgradeRet = new ArrayList<>();
     for (File f : upgradeFiles) {
       TsFileResource fileResource = new TsFileResource(f);
@@ -712,6 +720,24 @@ public class StorageGroupProcessor {
     }
   }
 
+  /** check if the tsfile's time is smaller than system current time */
+  private void checkTsFileTime(File tsFile) throws 
StorageGroupProcessorException {
+    String[] items = tsFile.getName().replace(TSFILE_SUFFIX, 
"").split(FILE_NAME_SEPARATOR);
+    long fileTime = Long.parseLong(items[0]);
+    long currentTime = System.currentTimeMillis();
+    if (fileTime > currentTime) {
+      throw new StorageGroupProcessorException(
+          String.format(
+              "virtual storage group %s[%s] is down, because the time of 
tsfile %s is larger than system current time, "
+                  + "file time is %d while system current time is %d, please 
check it.",
+              logicalStorageGroupName,
+              virtualStorageGroupId,
+              tsFile.getAbsolutePath(),
+              fileTime,
+              currentTime));
+    }
+  }
+
   private void recoverTsFiles(List<TsFileResource> tsFiles, boolean isSeq) {
     for (int i = 0; i < tsFiles.size(); i++) {
       TsFileResource tsFileResource = tsFiles.get(i);

Reply via email to