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

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


The following commit(s) were added to refs/heads/object_type by this push:
     new 4584fdd37d0 fix bug
     new cf07c44869a Merge branch 'object_type' of github.com:apache/iotdb into 
object_type
4584fdd37d0 is described below

commit 4584fdd37d09564574ce4f14b531d19e876aba5d
Author: HTHou <[email protected]>
AuthorDate: Tue Jul 8 19:05:54 2025 +0800

    fix bug
---
 .../statemachine/dataregion/DataExecutionVisitor.java      |  2 +-
 .../plan/planner/plan/node/write/ObjectNode.java           | 14 ++++++++++++--
 .../plan/node/write/RelationalInsertTabletNode.java        |  7 +++++++
 .../org/apache/iotdb/db/storageengine/StorageEngine.java   |  2 +-
 .../iotdb/db/storageengine/dataregion/DataRegion.java      |  5 ++++-
 .../src/main/java/org/apache/iotdb/db/utils/MemUtils.java  |  4 +++-
 .../main/java/org/apache/iotdb/db/utils/ObjectWriter.java  | 11 ++++++++---
 7 files changed, 36 insertions(+), 9 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
index 6a6568611d3..91c76f0f9b1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
@@ -302,7 +302,7 @@ public class DataExecutionVisitor extends 
PlanVisitor<TSStatus, DataRegion> {
       return StatusUtils.OK;
     } catch (final Exception e) {
       LOGGER.error("Error in executing plan node: {}", node, e);
-      return new TSStatus(TSStatusCode.WRITE_PROCESS_ERROR.getStatusCode());
+      return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
     }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
index 9b583b56be2..26897a126a4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
@@ -48,7 +48,6 @@ import java.nio.ByteBuffer;
 import java.util.List;
 import java.util.Optional;
 
-// TODO:[OBJECT] WAL serde
 public class ObjectNode extends SearchNode implements WALEntryValue {
 
   private final boolean isEOF;
@@ -59,10 +58,12 @@ public class ObjectNode extends SearchNode implements 
WALEntryValue {
 
   private String filePath;
 
-  private int contentLength;
+  private final int contentLength;
 
   private TRegionReplicaSet dataRegionReplicaSet;
 
+  private boolean isGeneratedByRemoteConsensusLeader;
+
   public ObjectNode(boolean isEOF, long offset, byte[] content, String 
filePath) {
     super(new PlanNodeId(""));
     this.isEOF = isEOF;
@@ -276,6 +277,15 @@ public class ObjectNode extends SearchNode implements 
WALEntryValue {
     return content.length;
   }
 
+  @Override
+  public void markAsGeneratedByRemoteConsensusLeader() {
+    isGeneratedByRemoteConsensusLeader = true;
+  }
+
+  public boolean isGeneratedByRemoteConsensusLeader() {
+    return isGeneratedByRemoteConsensusLeader;
+  }
+
   @Override
   public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
     return visitor.visitWriteObjectFile(this, context);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
index 686715cd8c5..2e113c5c28f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
@@ -423,6 +423,13 @@ public class RelationalInsertTabletNode extends 
InsertTabletNode {
                 ((Binary[]) columns[i])[j] = new Binary(valueBytes);
               } else {
                 ((Binary[]) columns[i])[j] = null;
+                if (bitMaps == null) {
+                  bitMaps = new BitMap[columns.length];
+                }
+                if (bitMaps[i] == null) {
+                  bitMaps[i] = new BitMap(rowCount);
+                }
+                bitMaps[i].mark(j);
               }
             }
           }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
index a4dc0bc7a2a..20111516d7c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
@@ -1087,7 +1087,7 @@ public class StorageEngine implements IService {
             .filter(
                 path -> {
                   String name = path.getFileName().toString();
-                  return name.endsWith(".bin.tmp") || 
name.endsWith(".bin.back");
+                  return name.endsWith(".bin.back");
                 })
             .forEach(
                 path -> {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index bee359ab33f..7b378f6e58b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -3037,7 +3037,10 @@ public class DataRegion implements IDataRegionForQuery {
       File objectTmpFile =
           FSFactoryProducer.getFSFactory().getFile(objectFileDir, 
relativeTmpPathString);
       try (ObjectWriter writer = new ObjectWriter(objectTmpFile)) {
-        writer.write(objectNode.isEOF(), objectNode.getOffset(), 
objectNode.getContent());
+        writer.write(
+            objectNode.isGeneratedByRemoteConsensusLeader(),
+            objectNode.getOffset(),
+            objectNode.getContent());
       }
       if (objectNode.isEOF()) {
         File objectFile =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
index 843bcdb8937..1de1422b07b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
@@ -108,7 +108,9 @@ public class MemUtils {
       if (results == null
           || results[i] == null
           || results[i].code == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-        memSize += RamUsageEstimator.sizeOf(column[i].getValues());
+        if (column[i] != null) {
+          memSize += RamUsageEstimator.sizeOf(column[i].getValues());
+        }
       }
     }
     return memSize;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
index 7ef14b6a39c..9ba84df94ec 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
@@ -59,10 +59,15 @@ public class ObjectWriter implements AutoCloseable {
     fos = new FileOutputStream(filePath, true);
   }
 
-  public void write(boolean isEoF, long offset, byte[] content) throws 
IOException {
+  public void write(boolean isGeneratedByConsensus, long offset, byte[] 
content)
+      throws IOException {
     if (file.length() != offset) {
-      throw new IOException(
-          "The file length " + file.length() + " is not equal to the offset " 
+ offset);
+      if (isGeneratedByConsensus || offset == 0) {
+        fos.getChannel().truncate(offset);
+      } else {
+        throw new IOException(
+            "The file length " + file.length() + " is not equal to the offset 
" + offset);
+      }
     }
     if (file.length() + content.length > config.getMaxObjectSizeInByte()) {
       throw new IOException("The file length is larger than 
max_object_file_size_in_bytes");

Reply via email to