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

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

commit 641fc5aab199a4b5603cbdca2f324084b0f8a2f0
Author: Jiang Tian <[email protected]>
AuthorDate: Mon Dec 2 14:08:18 2024 +0800

    Fix the deserialization of table deletion in WAL
---
 .../plan/node/write/RelationalDeleteDataNode.java  |  8 ++++++--
 .../node/write/RelationalDeleteDataNodeTest.java   | 24 +++++++++++++++++-----
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNode.java
index 3bda6d51443..05e46cf895d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNode.java
@@ -105,10 +105,14 @@ public class RelationalDeleteDataNode extends 
AbstractDeleteDataNode {
       throws IOException {
     long searchIndex = stream.readLong();
 
-    TableDeletionEntry entry = ((TableDeletionEntry) 
ModEntry.createFrom(stream));
+    int entryNum = ReadWriteForEncodingUtils.readVarInt(stream);
+    List<TableDeletionEntry> modEntries = new ArrayList<>(entryNum);
+    for (int i = 0; i < entryNum; i++) {
+      modEntries.add((TableDeletionEntry) ModEntry.createFrom(stream));
+    }
 
     RelationalDeleteDataNode deleteDataNode =
-        new RelationalDeleteDataNode(new PlanNodeId(""), entry);
+        new RelationalDeleteDataNode(new PlanNodeId(""), modEntries);
     deleteDataNode.setSearchIndex(searchIndex);
     return deleteDataNode;
   }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNodeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNodeTest.java
index 7ba8d2c5544..9e3e2e5e433 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNodeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalDeleteDataNodeTest.java
@@ -35,7 +35,9 @@ import org.apache.tsfile.file.metadata.IDeviceID.Factory;
 import org.apache.tsfile.read.common.TimeRange;
 import org.junit.Test;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -90,16 +92,28 @@ public class RelationalDeleteDataNodeTest {
     WALByteBufferForTest walByteBufferForTest = new 
WALByteBufferForTest(buffer);
     relationalDeleteDataNode.serializeToWAL(walByteBufferForTest);
     buffer.flip();
-    PlanNode planNode = PlanNodeType.deserializeFromWAL(buffer);
+    PlanNode deserialized = PlanNodeType.deserializeFromWAL(buffer);
     // plan node id is not serialized to WAL, manually set it to pass 
comparison
-    planNode.setPlanNodeId(relationalDeleteDataNode.getPlanNodeId());
-    assertEquals(relationalDeleteDataNode, planNode);
+    deserialized.setPlanNodeId(relationalDeleteDataNode.getPlanNodeId());
+    assertEquals(relationalDeleteDataNode, deserialized);
+
+    buffer.flip();
+    DataInputStream dataInputStream =
+        new DataInputStream(
+            new ByteArrayInputStream(
+                buffer.array(), buffer.arrayOffset() + buffer.position(), 
buffer.remaining()));
+    deserialized = PlanNodeType.deserializeFromWAL(dataInputStream);
+    // plan node id is not serialized to WAL, manually set it to pass 
comparison
+    deserialized.setPlanNodeId(relationalDeleteDataNode.getPlanNodeId());
+    assertEquals(relationalDeleteDataNode, deserialized);
 
     buffer = relationalDeleteDataNode.serializeToDAL();
-    AbstractDeleteDataNode deserialized = 
DeleteNodeType.deserializeFromDAL(buffer);
+    deserialized = DeleteNodeType.deserializeFromDAL(buffer);
     // plan node id is not serialized to DAL, manually set it to pass 
comparison
     deserialized.setPlanNodeId(relationalDeleteDataNode.getPlanNodeId());
     assertEquals(relationalDeleteDataNode, deserialized);
-    assertEquals(relationalDeleteDataNode.getProgressIndex(), 
deserialized.getProgressIndex());
+    assertEquals(
+        relationalDeleteDataNode.getProgressIndex(),
+        ((AbstractDeleteDataNode) deserialized).getProgressIndex());
   }
 }

Reply via email to