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

jiangtian pushed a commit to branch dev/1.1
in repository https://gitbox.apache.org/repos/asf/tsfile.git


The following commit(s) were added to refs/heads/dev/1.1 by this push:
     new 670a0f59 [to dev/1.1] Add readItimeseriesMetadata method (#312)
670a0f59 is described below

commit 670a0f5915aee9d4b188d9599cb088f097ae3e6d
Author: shuwenwei <[email protected]>
AuthorDate: Tue Nov 26 12:05:32 2024 +0800

    [to dev/1.1] Add readItimeseriesMetadata method (#312)
    
    * add readITimeseriesMetadata
    
    * fix compile
---
 .../apache/tsfile/read/TsFileSequenceReader.java   | 49 ++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
index 9491afaa..376fc9b9 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
@@ -559,6 +559,55 @@ public class TsFileSequenceReader implements AutoCloseable 
{
     }
   }
 
+  /**
+   * Read the TimeseriesMetadata of the given measurement and its successors 
from the index node
+   * into the list.
+   *
+   * @param timeseriesMetadataList result holder
+   * @param node index node to be read from
+   * @param measurement the desired measurement
+   * @return true if the measurement exists
+   * @throws IOException when read fails
+   */
+  public boolean readITimeseriesMetadata(
+      List<TimeseriesMetadata> timeseriesMetadataList, MetadataIndexNode node, 
String measurement)
+      throws IOException {
+    Pair<IMetadataIndexEntry, Long> measurementMetadataIndexPair =
+        getMetadataAndEndOffsetOfMeasurementNode(node, measurement, true, 
null);
+
+    if (measurementMetadataIndexPair == null) {
+      return false;
+    }
+    long startOffset = measurementMetadataIndexPair.getLeft().getOffset();
+    long endOffset = measurementMetadataIndexPair.getRight();
+    TimeseriesMetadata timeseriesMetadata;
+    if (endOffset - startOffset >= Integer.MAX_VALUE) {
+      synchronized (this) {
+        this.position(startOffset);
+        try {
+          timeseriesMetadata = TimeseriesMetadata.deserializeFrom(tsFileInput, 
true);
+        } catch (Exception e) {
+          logger.error(
+              "Something error happened while deserializing TimeseriesMetadata 
of file {}", file);
+          throw e;
+        }
+      }
+    } else {
+      try {
+        ByteBuffer buffer =
+            readData(
+                measurementMetadataIndexPair.left.getOffset(), 
measurementMetadataIndexPair.right);
+        timeseriesMetadata = TimeseriesMetadata.deserializeFrom(buffer, true);
+      } catch (Exception e) {
+        logger.error(
+            "Something error happened while deserializing TimeseriesMetadata 
of file {}", file);
+        throw e;
+      }
+    }
+    timeseriesMetadataList.add(timeseriesMetadata);
+    return true;
+  }
+
   /**
    * Find the leaf node that contains path, return all the sensors in that 
leaf node which are also
    * in allSensors set

Reply via email to