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

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

commit 969c19db4a763c448628f5c9df192e75ae62c972
Author: OneSizeFitQuorum <[email protected]>
AuthorDate: Tue Mar 18 18:39:28 2025 +0800

    try
    
    Signed-off-by: OneSizeFitQuorum <[email protected]>
---
 .../execution/executor/RegionWriteExecutor.java            |  7 ++++++-
 .../plan/planner/plan/node/write/InsertNode.java           | 14 ++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
index fc3013b6240..292f83f9020 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
@@ -193,7 +193,6 @@ public class RegionWriteExecutor {
                 TSStatusCode.SYSTEM_READ_ONLY,
                 "Fail to do non-query operations because system is 
read-only."));
       }
-
       try {
         final TSStatus status = 
executePlanNodeInConsensusLayer(context.getRegionId(), node);
         return RegionExecutionResult.create(
@@ -217,6 +216,10 @@ public class RegionWriteExecutor {
     private TSStatus executePlanNodeInConsensusLayer(
         final ConsensusGroupId groupId, final PlanNode planNode) throws 
ConsensusException {
       if (groupId instanceof DataRegionId) {
+        if (planNode instanceof InsertNode) {
+          ((InsertNode) planNode).cachedByteBuffer();
+          planNode.getMemorySize();
+        }
         return dataRegionConsensus.write(groupId, planNode);
       } else {
         return schemaRegionConsensus.write(groupId, planNode);
@@ -308,6 +311,8 @@ public class RegionWriteExecutor {
                 "Failed to complete the insertion because trigger error before 
the insertion.");
       } else {
         final long startWriteTime = System.nanoTime();
+        if (CONFIG.getDataRegionNum()) insertNode.cachedByteBuffer();
+        insertNode.getMemorySize();
         status = dataRegionConsensus.write(groupId, insertNode);
         
PERFORMANCE_OVERVIEW_METRICS.recordScheduleStorageCost(System.nanoTime() - 
startWriteTime);
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
index 102119269bb..6607760e40b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
@@ -91,6 +91,8 @@ public abstract class InsertNode extends SearchNode {
 
   private static final DeviceIDFactory deviceIDFactory = 
DeviceIDFactory.getInstance();
 
+  private ByteBuffer byteBuffer;
+
   protected InsertNode(PlanNodeId id) {
     super(id);
   }
@@ -431,6 +433,18 @@ public abstract class InsertNode extends SearchNode {
     return rawMeasurements;
   }
 
+  public void cachedByteBuffer() {
+    this.byteBuffer = this.serializeToByteBuffer();
+  }
+
+  @Override
+  public ByteBuffer serializeToByteBuffer() {
+    if (byteBuffer != null) {
+      return byteBuffer;
+    }
+    return super.serializeToByteBuffer();
+  }
+
   protected PartialPath readTargetPath(ByteBuffer buffer) throws 
IllegalPathException {
     return DataNodeDevicePathCache.getInstance()
         .getPartialPath(ReadWriteIOUtils.readString(buffer));

Reply via email to