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

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

commit 4e284b3166a0e521a997c46890d794a56b0d8074
Author: shuwenwei <[email protected]>
AuthorDate: Thu Jan 29 11:43:41 2026 +0800

    update chunk metadata after rewrite
---
 .../schemaregion/utils/ResourceByPathUtils.java    | 19 ++++++++++++----
 .../dataregion/memtable/ReadOnlyMemChunk.java      |  4 ++++
 .../org/apache/iotdb/db/utils/SchemaUtils.java     | 25 ++++++++++++++--------
 3 files changed, 35 insertions(+), 13 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
index aa193aa4e2e..ca1f9f25995 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
@@ -563,8 +563,14 @@ class MeasurementResourceByPathUtils extends 
ResourceByPathUtils {
       isModified = (isModified || chunkMetadata.isModified());
       if (chunkMetadata != null && (chunkMetadata.getDataType() != 
targetDataType)) {
         // create new statistics object via new data type, and merge 
statistics information
-        SchemaUtils.rewriteNonAlignedChunkMetadataStatistics(
-            chunkMetadataList, index, targetDataType);
+        chunkMetadata =
+            SchemaUtils.rewriteNonAlignedChunkMetadataStatistics(
+                chunkMetadataList, index, targetDataType);
+        if (chunkMetadata == null) {
+          // data type not match and cannot convert
+          // ignore current file
+          return null;
+        }
         chunkMetadata.setModified(true);
       }
       if (!useFakeStatistics) {
@@ -584,8 +590,13 @@ class MeasurementResourceByPathUtils extends 
ResourceByPathUtils {
         if (memChunk.getChunkMetaData() != null
             && (memChunk.getChunkMetaData().getDataType() != targetDataType)) {
           // create new statistics object via new data type, and merge 
statistics information
-          SchemaUtils.rewriteNonAlignedChunkMetadataStatistics(
-              chunkMetadataList, index, targetDataType);
+          ChunkMetadata rewritedChunkMetadata =
+              SchemaUtils.rewriteChunkMetadata(
+                  (ChunkMetadata) memChunk.getChunkMetaData(), targetDataType);
+          if (rewritedChunkMetadata == null) {
+            return null;
+          }
+          memChunk.setChunkMetadata(rewritedChunkMetadata);
           memChunk.getChunkMetaData().setModified(true);
         }
         if (useFakeStatistics) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/ReadOnlyMemChunk.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/ReadOnlyMemChunk.java
index ec8a7448063..5ea4e67ee79 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/ReadOnlyMemChunk.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/ReadOnlyMemChunk.java
@@ -283,6 +283,10 @@ public class ReadOnlyMemChunk {
     return cachedMetaData;
   }
 
+  public void setChunkMetadata(IChunkMetadata cachedMetaData) {
+    this.cachedMetaData = cachedMetaData;
+  }
+
   @TestOnly
   public IPointReader getPointReader() {
     for (Map.Entry<TVList, Integer> entry : tvListQueryMap.entrySet()) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
index 56c534c01e5..94c31bdfb0e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
@@ -415,19 +415,26 @@ public class SchemaUtils {
     }
   }
 
-  public static void rewriteNonAlignedChunkMetadataStatistics(
+  public static ChunkMetadata rewriteNonAlignedChunkMetadataStatistics(
       List<IChunkMetadata> chunkMetadataList, int index, TSDataType 
targetDataType) {
-    ChunkMetadata chunkMetadata = (ChunkMetadata) chunkMetadataList.get(index);
-    if (chunkMetadata != null && 
targetDataType.isCompatible(chunkMetadata.getDataType())) {
+    ChunkMetadata newChunkMetadata =
+        rewriteChunkMetadata((ChunkMetadata) chunkMetadataList.get(index), 
targetDataType);
+    chunkMetadataList.set(index, newChunkMetadata);
+    return newChunkMetadata;
+  }
+
+  public static ChunkMetadata rewriteChunkMetadata(
+      ChunkMetadata origin, TSDataType targetDataType) {
+    if (origin != null && targetDataType.isCompatible(origin.getDataType())) {
       Statistics<?> statistics = Statistics.getStatsByType(targetDataType);
-      statistics = getNewStatistics(chunkMetadata, targetDataType, statistics);
+      statistics = getNewStatistics(origin, targetDataType, statistics);
 
-      chunkMetadata = new ChunkMetadata(chunkMetadata);
-      chunkMetadata.setTsDataType(targetDataType);
-      chunkMetadata.setStatistics(statistics);
-      chunkMetadataList.set(index, chunkMetadata);
+      ChunkMetadata target = new ChunkMetadata(origin);
+      target.setTsDataType(targetDataType);
+      target.setStatistics(statistics);
+      return target;
     } else {
-      chunkMetadataList.set(index, null);
+      return null;
     }
   }
 

Reply via email to