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

rong 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 a90fe9ac Load: deserialize PlainDeviceID for TsFile V3 (#231)
a90fe9ac is described below

commit a90fe9ac18db2b422dc3e02f964e0a81c192470e
Author: Zikun Ma <[email protected]>
AuthorDate: Mon Sep 9 17:48:32 2024 +0800

    Load: deserialize PlainDeviceID for TsFile V3 (#231)
---
 .../tsfile/compatibility/CompatibilityUtils.java   |  7 +++++++
 .../tsfile/compatibility/DeserializeConfig.java    |  1 +
 .../tsfile/file/header/ChunkGroupHeader.java       | 23 ++++++++++++++--------
 .../org/apache/tsfile/file/metadata/IDeviceID.java |  1 +
 .../apache/tsfile/file/metadata/PlainDeviceID.java | 17 ++++++++++++++++
 .../apache/tsfile/read/TsFileSequenceReader.java   |  6 ++++--
 ...leSequenceReaderTimeseriesMetadataIterator.java |  2 +-
 7 files changed, 46 insertions(+), 11 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/compatibility/CompatibilityUtils.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/compatibility/CompatibilityUtils.java
index de01351f..ec0102c5 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/compatibility/CompatibilityUtils.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/compatibility/CompatibilityUtils.java
@@ -38,6 +38,8 @@ public class CompatibilityUtils {
   public static DeserializeConfig v3DeserializeConfig = new 
DeserializeConfig();
 
   static {
+    v3DeserializeConfig.versionNumber =
+        org.apache.tsfile.common.conf.TSFileConfig.VERSION_NUMBER_V3;
     v3DeserializeConfig.tsFileMetadataBufferDeserializer =
         CompatibilityUtils::deserializeTsFileMetadataFromV3;
     v3DeserializeConfig.deviceIDBufferDeserializer =
@@ -45,6 +47,11 @@ public class CompatibilityUtils {
           final PlainDeviceID deviceID = PlainDeviceID.deserialize(buffer);
           return deviceID.convertToStringArrayDeviceId();
         });
+    v3DeserializeConfig.deviceIDStreamDeserializer =
+        ((stream, context) -> {
+          final PlainDeviceID deviceID = PlainDeviceID.deserialize(stream);
+          return deviceID.convertToStringArrayDeviceId();
+        });
   }
 
   public static TsFileMetadata deserializeTsFileMetadataFromV3(
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
index b1c4f18f..b9228bd0 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/compatibility/DeserializeConfig.java
@@ -34,6 +34,7 @@ import java.io.InputStream;
 import java.nio.ByteBuffer;
 
 public class DeserializeConfig {
+  public byte versionNumber = 
org.apache.tsfile.common.conf.TSFileConfig.VERSION_NUMBER;
   public BufferDeserializer<TsFileMetadata> tsFileMetadataBufferDeserializer =
       TsFileMetadata::deserializeFrom;
 
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java 
b/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java
index 7a424f89..b46f0e0c 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java
@@ -64,8 +64,8 @@ public class ChunkGroupHeader {
    * @param markerRead - Whether the marker of the CHUNK_GROUP_HEADER is read 
ahead.
    * @throws IOException – If an I/O error occurs.
    */
-  public static ChunkGroupHeader deserializeFrom(InputStream inputStream, 
boolean markerRead)
-      throws IOException {
+  public static ChunkGroupHeader deserializeFrom(
+      InputStream inputStream, boolean markerRead, byte versionNumber) throws 
IOException {
     if (!markerRead) {
       byte marker = (byte) inputStream.read();
       if (marker != MARKER) {
@@ -74,8 +74,7 @@ public class ChunkGroupHeader {
     }
 
     // TODO: add an interface in IDeviceID
-    final IDeviceID deviceID =
-        
IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(inputStream);
+    final IDeviceID deviceID = deserializeDeviceID(inputStream, versionNumber);
     return new ChunkGroupHeader(deviceID);
   }
 
@@ -85,19 +84,27 @@ public class ChunkGroupHeader {
    * @param markerRead - Whether the marker of the CHUNK_GROUP_HEADER is read 
ahead.
    * @throws IOException - If an I/O error occurs.
    */
-  public static ChunkGroupHeader deserializeFrom(TsFileInput input, long 
offset, boolean markerRead)
-      throws IOException {
+  public static ChunkGroupHeader deserializeFrom(
+      TsFileInput input, long offset, boolean markerRead, byte versionNumber) 
throws IOException {
     long offsetVar = offset;
     if (!markerRead) {
       offsetVar++;
     }
     input.position(offsetVar);
     final InputStream inputStream = input.wrapAsInputStream();
-    final IDeviceID deviceID =
-        
IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(inputStream);
+    final IDeviceID deviceID = deserializeDeviceID(inputStream, versionNumber);
     return new ChunkGroupHeader(deviceID);
   }
 
+  private static IDeviceID deserializeDeviceID(InputStream inputStream, byte 
versionNumber)
+      throws IOException {
+    final IDeviceID.Deserializer deserializer =
+        versionNumber == 
org.apache.tsfile.common.conf.TSFileConfig.VERSION_NUMBER
+            ? IDeviceID.Deserializer.DEFAULT_DESERIALIZER
+            : IDeviceID.Deserializer.DESERIALIZER_V3;
+    return deserializer.deserializeFrom(inputStream);
+  }
+
   public IDeviceID getDeviceID() {
     return deviceID;
   }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IDeviceID.java 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IDeviceID.java
index 87e04cc0..b67053a5 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IDeviceID.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IDeviceID.java
@@ -151,6 +151,7 @@ public interface IDeviceID extends Comparable<IDeviceID>, 
Accountable, Serializa
     IDeviceID deserializeFrom(InputStream inputStream) throws IOException;
 
     Deserializer DEFAULT_DESERIALIZER = StringArrayDeviceID.getDESERIALIZER();
+    Deserializer DESERIALIZER_V3 = PlainDeviceID.getDESERIALIZER();
   }
 
   interface Factory {
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
index f36255fe..cc93350f 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/PlainDeviceID.java
@@ -48,6 +48,23 @@ public class PlainDeviceID implements IDeviceID {
     this.deviceID = deviceID;
   }
 
+  private static final Deserializer DESERIALIZER =
+      new Deserializer() {
+        @Override
+        public IDeviceID deserializeFrom(ByteBuffer byteBuffer) {
+          return deserialize(byteBuffer).convertToStringArrayDeviceId();
+        }
+
+        @Override
+        public IDeviceID deserializeFrom(InputStream inputStream) throws 
IOException {
+          return deserialize(inputStream).convertToStringArrayDeviceId();
+        }
+      };
+
+  public static Deserializer getDESERIALIZER() {
+    return DESERIALIZER;
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
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 57c2500d..9daff0c1 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
@@ -1479,7 +1479,8 @@ public class TsFileSequenceReader implements 
AutoCloseable {
    * @throws IOException io error
    */
   public ChunkGroupHeader readChunkGroupHeader() throws IOException {
-    return ChunkGroupHeader.deserializeFrom(tsFileInput.wrapAsInputStream(), 
true);
+    return ChunkGroupHeader.deserializeFrom(
+        tsFileInput.wrapAsInputStream(), true, 
deserializeConfig.versionNumber);
   }
 
   /**
@@ -1492,7 +1493,8 @@ public class TsFileSequenceReader implements 
AutoCloseable {
    */
   public ChunkGroupHeader readChunkGroupHeader(long position, boolean 
markerRead)
       throws IOException {
-    return ChunkGroupHeader.deserializeFrom(tsFileInput, position, markerRead);
+    return ChunkGroupHeader.deserializeFrom(
+        tsFileInput, position, markerRead, deserializeConfig.versionNumber);
   }
 
   public void readPlanIndex() throws IOException {
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReaderTimeseriesMetadataIterator.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReaderTimeseriesMetadataIterator.java
index 9fa1c311..798714a8 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReaderTimeseriesMetadataIterator.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReaderTimeseriesMetadataIterator.java
@@ -59,7 +59,7 @@ public class TsFileSequenceReaderTimeseriesMetadataIterator
     this.reader = reader;
     this.needChunkMetadata = needChunkMetadata;
     this.timeseriesBatchReadNumber = timeseriesBatchReadNumber;
-    this.deserializeConfig = new DeserializeConfig();
+    this.deserializeConfig = this.reader.getDeserializeContext();
 
     if (this.reader.tsFileMetaData == null) {
       this.reader.readFileMetadata();

Reply via email to