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()); } }
