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

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


The following commit(s) were added to refs/heads/develop by this push:
     new a86eb4a0 feat: Support interface in device level of 
RestorableTsFileIOWriter
a86eb4a0 is described below

commit a86eb4a0cf58a667d6a1df5c31cd6484a87f7783
Author: YangCaiyin <[email protected]>
AuthorDate: Fri May 17 11:22:50 2024 +0800

    feat: Support interface in device level of RestorableTsFileIOWriter
---
 .../write/writer/RestorableTsFileIOWriter.java     | 31 +++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
index d5c1b44f..74d84fb2 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
@@ -23,7 +23,6 @@ import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.NotCompatibleTsFileException;
 import org.apache.tsfile.file.metadata.ChunkGroupMetadata;
 import org.apache.tsfile.file.metadata.ChunkMetadata;
-import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.fileSystem.FSFactoryProducer;
 import org.apache.tsfile.read.TsFileCheckStatus;
@@ -43,6 +42,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * This writer is for opening and recover a TsFile
@@ -186,18 +186,43 @@ public class RestorableTsFileIOWriter extends 
TsFileIOWriter {
     List<ChunkMetadata> chunkMetadataList = new ArrayList<>();
     if (metadatasForQuery.containsKey(deviceId)
         && metadatasForQuery.get(deviceId).containsKey(measurementId)) {
-      for (IChunkMetadata chunkMetaData : 
metadatasForQuery.get(deviceId).get(measurementId)) {
+      for (ChunkMetadata chunkMetaData : 
metadatasForQuery.get(deviceId).get(measurementId)) {
         // filter: if a device'measurement is defined as float type, and data 
has been persistent.
         // Then someone deletes the timeseries and recreate it with Int type. 
We have to ignore
         // all the stale data.
         if (dataType == null || dataType.equals(chunkMetaData.getDataType())) {
-          chunkMetadataList.add((ChunkMetadata) chunkMetaData);
+          chunkMetadataList.add(chunkMetaData);
         }
       }
     }
     return chunkMetadataList;
   }
 
+  /**
+   * For query.
+   *
+   * <p>get chunks' metadata of one device from memory.
+   *
+   * @param deviceId the device id
+   * @param dataType the value type
+   * @return chunks' metadata
+   */
+  public List<List<ChunkMetadata>> getVisibleMetadataList(IDeviceID deviceId, 
TSDataType dataType) {
+    List<List<ChunkMetadata>> chunkMetadataForEachMeasurement = new 
ArrayList<>();
+    if (metadatasForQuery.containsKey(deviceId)) {
+      for (List<ChunkMetadata> deviceChunkMetadataList : 
metadatasForQuery.get(deviceId).values()) {
+        List<ChunkMetadata> curChunkMetadataList =
+            deviceChunkMetadataList.stream()
+                .filter(
+                    chunkMetaData ->
+                        dataType == null || 
dataType.equals(chunkMetaData.getDataType()))
+                .collect(Collectors.toList());
+        chunkMetadataForEachMeasurement.add(curChunkMetadataList);
+      }
+    }
+    return chunkMetadataForEachMeasurement;
+  }
+
   public Map<IDeviceID, Map<String, List<ChunkMetadata>>> 
getMetadatasForQuery() {
     return metadatasForQuery;
   }

Reply via email to