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;
}