You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/01/21 01:04:10 UTC

[iotdb] branch FileTimeIndexTTL created (now b723a00)

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

jackietien pushed a change to branch FileTimeIndexTTL
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at b723a00  Fix NoSuchFileException while querying and ttl happened same time

This branch includes the following new commits:

     new b723a00  Fix NoSuchFileException while querying and ttl happened same time

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[iotdb] 01/01: Fix NoSuchFileException while querying and ttl happened same time

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b723a003110ffeeaf8463af51a6410838447796f
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Fri Jan 21 09:03:04 2022 +0800

    Fix NoSuchFileException while querying and ttl happened same time
---
 .../apache/iotdb/db/engine/storagegroup/TsFileResource.java |  2 +-
 .../db/engine/storagegroup/timeindex/DeviceTimeIndex.java   |  3 ++-
 .../db/engine/storagegroup/timeindex/FileTimeIndex.java     | 13 ++++++++++++-
 .../iotdb/db/engine/storagegroup/timeindex/ITimeIndex.java  |  3 ++-
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
index 630df4f..410ce81 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java
@@ -427,7 +427,7 @@ public class TsFileResource {
   }
 
   public Set<String> getDevices() {
-    return timeIndex.getDevices(file.getPath());
+    return timeIndex.getDevices(file.getPath(), this);
   }
 
   public boolean endTimeEmpty() {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/DeviceTimeIndex.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/DeviceTimeIndex.java
index d7a7122..ce65f62 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/DeviceTimeIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/DeviceTimeIndex.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.engine.storagegroup.timeindex;
 
 import org.apache.iotdb.db.engine.StorageEngine;
+import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.PartitionViolationException;
 import org.apache.iotdb.db.rescon.CachedStringPool;
 import org.apache.iotdb.db.utils.SerializeUtils;
@@ -160,7 +161,7 @@ public class DeviceTimeIndex implements ITimeIndex {
   }
 
   @Override
-  public Set<String> getDevices(String tsFilePath) {
+  public Set<String> getDevices(String tsFilePath, TsFileResource tsFileResource) {
     return deviceToIndex.keySet();
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java
index 5defc50..b0768be 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.engine.storagegroup.timeindex;
 
 import org.apache.iotdb.db.engine.StorageEngine;
+import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.PartitionViolationException;
 import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
 import org.apache.iotdb.tsfile.utils.FilePathUtils;
@@ -33,6 +34,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
+import java.nio.file.NoSuchFileException;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -79,9 +82,17 @@ public class FileTimeIndex implements ITimeIndex {
   }
 
   @Override
-  public Set<String> getDevices(String tsFilePath) {
+  public Set<String> getDevices(String tsFilePath, TsFileResource tsFileResource) {
     try (TsFileSequenceReader fileReader = new TsFileSequenceReader(tsFilePath)) {
       return new HashSet<>(fileReader.getAllDevices());
+    } catch (NoSuchFileException e) {
+      // deleted by ttl
+      if (tsFileResource.isDeleted()) {
+        return Collections.emptySet();
+      } else {
+        logger.error("Can't read file {} from disk ", tsFilePath, e);
+        throw new RuntimeException("Can't read file " + tsFilePath + " from disk");
+      }
     } catch (IOException e) {
       logger.error("Can't read file {} from disk ", tsFilePath, e);
       throw new RuntimeException("Can't read file " + tsFilePath + " from disk");
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/ITimeIndex.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/ITimeIndex.java
index 37fac06..9252aa4 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/ITimeIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/ITimeIndex.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.engine.storagegroup.timeindex;
 
+import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.PartitionViolationException;
 
 import java.io.IOException;
@@ -62,7 +63,7 @@ public interface ITimeIndex {
    *
    * @return device names
    */
-  Set<String> getDevices(String tsFilePath);
+  Set<String> getDevices(String tsFilePath, TsFileResource tsFileResource);
 
   /** @return whether end time is empty (Long.MIN_VALUE) */
   boolean endTimeEmpty();