You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/05/23 04:34:29 UTC
[iotdb] branch master updated: [IOTDB-3244] Add PlanNodes related to last query (#5987)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new c6c4ba398d [IOTDB-3244] Add PlanNodes related to last query (#5987)
c6c4ba398d is described below
commit c6c4ba398d27c3872476bea851b5bf3ed23ddac8
Author: Jackie Tien <ja...@gmail.com>
AuthorDate: Mon May 23 12:34:24 2022 +0800
[IOTDB-3244] Add PlanNodes related to last query (#5987)
---
.../mpp/plan/planner/plan/node/PlanNodeType.java | 14 +-
.../db/mpp/plan/planner/plan/node/PlanVisitor.java | 15 ++
.../plan/node/process/LastQueryMergeNode.java | 110 +++++++++++++
.../plan/node/source/AlignedLastQueryScanNode.java | 171 ++++++++++++++++++++
.../source/AlignedSeriesAggregationScanNode.java | 6 +-
.../plan/node/source/AlignedSeriesScanNode.java | 13 +-
.../plan/node/source/LastQueryScanNode.java | 173 +++++++++++++++++++++
.../node/source/SeriesAggregationScanNode.java | 6 +-
.../planner/plan/node/source/SeriesScanNode.java | 13 +-
.../mpp/plan/plan/FragmentInstanceSerdeTest.java | 9 --
.../node/process/AggregationNodeSerdeTest.java | 6 +-
.../node/process/GroupByLevelNodeSerdeTest.java | 10 +-
.../plan/plan/node/process/LimitNodeSerdeTest.java | 7 +-
.../plan/node/process/OffsetNodeSerdeTest.java | 7 +-
.../plan/plan/node/process/SortNodeSerdeTest.java | 7 +-
.../plan/node/process/TimeJoinNodeSerdeTest.java | 10 +-
.../source/SeriesAggregationScanNodeSerdeTest.java | 6 +-
.../plan/node/source/SeriesScanNodeSerdeTest.java | 7 +-
18 files changed, 496 insertions(+), 94 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java
index ea86fdcef9..c485ad136c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java
@@ -45,6 +45,7 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByTimeNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.OffsetNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ProjectNode;
@@ -52,8 +53,10 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.SortNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TimeJoinNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TransformNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.sink.FragmentSinkNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.AlignedLastQueryScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.AlignedSeriesAggregationScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.AlignedSeriesScanNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.LastQueryScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesAggregationScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.DeleteDataNode;
@@ -113,7 +116,10 @@ public enum PlanNodeType {
NODE_MANAGEMENT_MEMORY_MERGE((short) 42),
INVALIDATE_SCHEMA_CACHE((short) 43),
DELETE_DATA((short) 44),
- DELETE_TIMESERIES((short) 45);
+ DELETE_TIMESERIES((short) 45),
+ LAST_QUERY_SCAN((short) 46),
+ ALIGNED_LAST_QUERY_SCAN((short) 47),
+ LAST_QUERY_MERGE((short) 48);
private final short nodeType;
@@ -229,6 +235,12 @@ public enum PlanNodeType {
return DeleteDataNode.deserialize(buffer);
case 45:
return DeleteTimeSeriesNode.deserialize(buffer);
+ case 46:
+ return LastQueryScanNode.deserialize(buffer);
+ case 47:
+ return AlignedLastQueryScanNode.deserialize(buffer);
+ case 48:
+ return LastQueryMergeNode.deserialize(buffer);
default:
throw new IllegalArgumentException("Invalid node type: " + nodeType);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java
index 53132f3d0c..d60df01d36 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java
@@ -44,6 +44,7 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByTimeNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.OffsetNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ProjectNode;
@@ -51,8 +52,10 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.SortNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TimeJoinNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TransformNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.sink.FragmentSinkNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.AlignedLastQueryScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.AlignedSeriesAggregationScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.AlignedSeriesScanNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.LastQueryScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesAggregationScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertMultiTabletsNode;
@@ -240,4 +243,16 @@ public abstract class PlanVisitor<R, C> {
public R visitNodeManagementMemoryMerge(NodeManagementMemoryMergeNode node, C context) {
return visitPlan(node, context);
}
+
+ public R visitLastQueryScan(LastQueryScanNode node, C context) {
+ return visitPlan(node, context);
+ }
+
+ public R visitAlignedLastQueryScan(AlignedLastQueryScanNode node, C context) {
+ return visitPlan(node, context);
+ }
+
+ public R visitLastQueryMerge(LastQueryMergeNode node, C context) {
+ return visitPlan(node, context);
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/LastQueryMergeNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/LastQueryMergeNode.java
new file mode 100644
index 0000000000..e8223a42d0
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/LastQueryMergeNode.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.mpp.plan.planner.plan.node.process;
+
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import static org.apache.iotdb.db.mpp.plan.planner.plan.node.source.LastQueryScanNode.LAST_QUERY_COLUMN_HEADERS;
+
+public class LastQueryMergeNode extends ProcessNode {
+
+ // make sure child in list has been ordered by their sensor name
+ private List<PlanNode> children;
+
+ public LastQueryMergeNode(PlanNodeId id) {
+ super(id);
+ this.children = new ArrayList<>();
+ }
+
+ public LastQueryMergeNode(PlanNodeId id, List<PlanNode> children) {
+ super(id);
+ this.children = children;
+ }
+
+ @Override
+ public List<PlanNode> getChildren() {
+ return children;
+ }
+
+ @Override
+ public void addChild(PlanNode child) {
+ children.add(child);
+ }
+
+ @Override
+ public PlanNode clone() {
+ return new LastQueryMergeNode(getPlanNodeId());
+ }
+
+ @Override
+ public int allowedChildCount() {
+ return CHILD_COUNT_NO_LIMIT;
+ }
+
+ @Override
+ public List<String> getOutputColumnNames() {
+ return LAST_QUERY_COLUMN_HEADERS;
+ }
+
+ @Override
+ public String toString() {
+ return "LastQueryMergeNode-" + this.getPlanNodeId();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+ LastQueryMergeNode that = (LastQueryMergeNode) o;
+ return Objects.equals(children, that.children);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), children);
+ }
+
+ @Override
+ public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+ return visitor.visitLastQueryMerge(this, context);
+ }
+
+ @Override
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.LAST_QUERY_MERGE.serialize(byteBuffer);
+ }
+
+ public static LastQueryMergeNode deserialize(ByteBuffer byteBuffer) {
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new LastQueryMergeNode(planNodeId);
+ }
+
+ public void setChildren(List<PlanNode> children) {
+ this.children = children;
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedLastQueryScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedLastQueryScanNode.java
new file mode 100644
index 0000000000..837bdbace4
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedLastQueryScanNode.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.mpp.plan.planner.plan.node.source;
+
+import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
+import org.apache.iotdb.db.metadata.path.AlignedPath;
+import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.factory.FilterFactory;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import com.google.common.collect.ImmutableList;
+
+import javax.annotation.Nullable;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.Objects;
+
+import static org.apache.iotdb.db.mpp.plan.planner.plan.node.source.LastQueryScanNode.LAST_QUERY_COLUMN_HEADERS;
+
+public class AlignedLastQueryScanNode extends SourceNode {
+ // The path of the target series which will be scanned.
+ private final AlignedPath seriesPath;
+
+ private Filter timeFilter;
+
+ // The id of DataRegion where the node will run
+ private TRegionReplicaSet regionReplicaSet;
+
+ public AlignedLastQueryScanNode(PlanNodeId id, AlignedPath seriesPath, Filter timeFilter) {
+ super(id);
+ this.seriesPath = seriesPath;
+ this.timeFilter = timeFilter;
+ }
+
+ public AlignedLastQueryScanNode(
+ PlanNodeId id,
+ AlignedPath seriesPath,
+ Filter timeFilter,
+ TRegionReplicaSet regionReplicaSet) {
+ super(id);
+ this.seriesPath = seriesPath;
+ this.timeFilter = timeFilter;
+ this.regionReplicaSet = regionReplicaSet;
+ }
+
+ @Override
+ public void open() throws Exception {}
+
+ @Override
+ public TRegionReplicaSet getRegionReplicaSet() {
+ return regionReplicaSet;
+ }
+
+ @Override
+ public void setRegionReplicaSet(TRegionReplicaSet regionReplicaSet) {
+ this.regionReplicaSet = regionReplicaSet;
+ }
+
+ @Override
+ public void close() throws Exception {}
+
+ @Override
+ public List<PlanNode> getChildren() {
+ return ImmutableList.of();
+ }
+
+ @Override
+ public void addChild(PlanNode child) {
+ throw new UnsupportedOperationException("no child is allowed for SeriesScanNode");
+ }
+
+ @Override
+ public PlanNode clone() {
+ return new AlignedLastQueryScanNode(getPlanNodeId(), seriesPath, timeFilter, regionReplicaSet);
+ }
+
+ @Override
+ public int allowedChildCount() {
+ return NO_CHILD_ALLOWED;
+ }
+
+ @Override
+ public List<String> getOutputColumnNames() {
+ return LAST_QUERY_COLUMN_HEADERS;
+ }
+
+ @Override
+ public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+ return visitor.visitAlignedLastQueryScan(this, context);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+ AlignedLastQueryScanNode that = (AlignedLastQueryScanNode) o;
+ return Objects.equals(seriesPath, that.seriesPath)
+ && Objects.equals(timeFilter, that.timeFilter)
+ && Objects.equals(regionReplicaSet, that.regionReplicaSet);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), seriesPath, timeFilter, regionReplicaSet);
+ }
+
+ @Override
+ public String toString() {
+ return String.format(
+ "AlignedLastQueryScanNode-%s:[SeriesPath: %s, DataRegion: %s]",
+ this.getPlanNodeId(), this.getSeriesPath(), this.getRegionReplicaSet());
+ }
+
+ @Override
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.ALIGNED_LAST_QUERY_SCAN.serialize(byteBuffer);
+ seriesPath.serialize(byteBuffer);
+ if (timeFilter == null) {
+ ReadWriteIOUtils.write((byte) 0, byteBuffer);
+ } else {
+ ReadWriteIOUtils.write((byte) 1, byteBuffer);
+ timeFilter.serialize(byteBuffer);
+ }
+ }
+
+ public static AlignedLastQueryScanNode deserialize(ByteBuffer byteBuffer) {
+ AlignedPath partialPath = (AlignedPath) PathDeserializeUtil.deserialize(byteBuffer);
+ Filter timeFilter = null;
+ if (!ReadWriteIOUtils.readIsNull(byteBuffer)) {
+ timeFilter = FilterFactory.deserialize(byteBuffer);
+ }
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new AlignedLastQueryScanNode(planNodeId, partialPath, timeFilter);
+ }
+
+ public AlignedPath getSeriesPath() {
+ return seriesPath;
+ }
+
+ @Nullable
+ public Filter getTimeFilter() {
+ return timeFilter;
+ }
+
+ public void setTimeFilter(@Nullable Filter timeFilter) {
+ this.timeFilter = timeFilter;
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
index 0345031d07..2706934e06 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.mpp.plan.planner.plan.node.source;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
-import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import org.apache.iotdb.db.metadata.path.AlignedPath;
import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -207,7 +206,6 @@ public class AlignedSeriesAggregationScanNode extends SourceNode {
ReadWriteIOUtils.write((byte) 1, byteBuffer);
groupByTimeParameter.serialize(byteBuffer);
}
- ThriftCommonsSerDeUtils.serializeTRegionReplicaSet(regionReplicaSet, byteBuffer);
}
public static AlignedSeriesAggregationScanNode deserialize(ByteBuffer byteBuffer) {
@@ -228,8 +226,6 @@ public class AlignedSeriesAggregationScanNode extends SourceNode {
if (isNull == 1) {
groupByTimeParameter = GroupByTimeParameter.deserialize(byteBuffer);
}
- TRegionReplicaSet regionReplicaSet =
- ThriftCommonsSerDeUtils.deserializeTRegionReplicaSet(byteBuffer);
PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
return new AlignedSeriesAggregationScanNode(
planNodeId,
@@ -238,7 +234,7 @@ public class AlignedSeriesAggregationScanNode extends SourceNode {
scanOrder,
timeFilter,
groupByTimeParameter,
- regionReplicaSet);
+ null);
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesScanNode.java
index 72c2a24244..6e4bec3d77 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesScanNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/AlignedSeriesScanNode.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.mpp.plan.planner.plan.node.source;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
-import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import org.apache.iotdb.db.metadata.path.AlignedPath;
import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -202,7 +201,6 @@ public class AlignedSeriesScanNode extends SourceNode {
}
ReadWriteIOUtils.write(limit, byteBuffer);
ReadWriteIOUtils.write(offset, byteBuffer);
- ThriftCommonsSerDeUtils.serializeTRegionReplicaSet(regionReplicaSet, byteBuffer);
}
public static AlignedSeriesScanNode deserialize(ByteBuffer byteBuffer) {
@@ -220,18 +218,9 @@ public class AlignedSeriesScanNode extends SourceNode {
}
int limit = ReadWriteIOUtils.readInt(byteBuffer);
int offset = ReadWriteIOUtils.readInt(byteBuffer);
- TRegionReplicaSet dataRegionReplicaSet =
- ThriftCommonsSerDeUtils.deserializeTRegionReplicaSet(byteBuffer);
PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
return new AlignedSeriesScanNode(
- planNodeId,
- alignedPath,
- scanOrder,
- timeFilter,
- valueFilter,
- limit,
- offset,
- dataRegionReplicaSet);
+ planNodeId, alignedPath, scanOrder, timeFilter, valueFilter, limit, offset, null);
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/LastQueryScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/LastQueryScanNode.java
new file mode 100644
index 0000000000..546c357e82
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/LastQueryScanNode.java
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.mpp.plan.planner.plan.node.source;
+
+import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
+import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.factory.FilterFactory;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import com.google.common.collect.ImmutableList;
+
+import javax.annotation.Nullable;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.Objects;
+
+public class LastQueryScanNode extends SourceNode {
+
+ public static final List<String> LAST_QUERY_COLUMN_HEADERS =
+ ImmutableList.of("Time", "timeseries", "value", "dataType");
+
+ // The path of the target series which will be scanned.
+ private final MeasurementPath seriesPath;
+
+ private Filter timeFilter;
+
+ // The id of DataRegion where the node will run
+ private TRegionReplicaSet regionReplicaSet;
+
+ public LastQueryScanNode(PlanNodeId id, MeasurementPath seriesPath, Filter timeFilter) {
+ super(id);
+ this.seriesPath = seriesPath;
+ this.timeFilter = timeFilter;
+ }
+
+ public LastQueryScanNode(
+ PlanNodeId id,
+ MeasurementPath seriesPath,
+ Filter timeFilter,
+ TRegionReplicaSet regionReplicaSet) {
+ super(id);
+ this.seriesPath = seriesPath;
+ this.timeFilter = timeFilter;
+ this.regionReplicaSet = regionReplicaSet;
+ }
+
+ @Override
+ public void open() throws Exception {}
+
+ @Override
+ public TRegionReplicaSet getRegionReplicaSet() {
+ return regionReplicaSet;
+ }
+
+ @Override
+ public void setRegionReplicaSet(TRegionReplicaSet regionReplicaSet) {
+ this.regionReplicaSet = regionReplicaSet;
+ }
+
+ public MeasurementPath getSeriesPath() {
+ return seriesPath;
+ }
+
+ @Nullable
+ public Filter getTimeFilter() {
+ return timeFilter;
+ }
+
+ public void setTimeFilter(@Nullable Filter timeFilter) {
+ this.timeFilter = timeFilter;
+ }
+
+ @Override
+ public void close() throws Exception {}
+
+ @Override
+ public List<PlanNode> getChildren() {
+ return ImmutableList.of();
+ }
+
+ @Override
+ public void addChild(PlanNode child) {
+ throw new UnsupportedOperationException("no child is allowed for SeriesScanNode");
+ }
+
+ @Override
+ public PlanNode clone() {
+ return new LastQueryScanNode(getPlanNodeId(), seriesPath, timeFilter, regionReplicaSet);
+ }
+
+ @Override
+ public int allowedChildCount() {
+ return NO_CHILD_ALLOWED;
+ }
+
+ @Override
+ public List<String> getOutputColumnNames() {
+ return LAST_QUERY_COLUMN_HEADERS;
+ }
+
+ @Override
+ public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+ return visitor.visitLastQueryScan(this, context);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+ LastQueryScanNode that = (LastQueryScanNode) o;
+ return Objects.equals(seriesPath, that.seriesPath)
+ && Objects.equals(timeFilter, that.timeFilter)
+ && Objects.equals(regionReplicaSet, that.regionReplicaSet);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), seriesPath, timeFilter, regionReplicaSet);
+ }
+
+ @Override
+ public String toString() {
+ return String.format(
+ "LastQueryScanNode-%s:[SeriesPath: %s, DataRegion: %s]",
+ this.getPlanNodeId(), this.getSeriesPath(), this.getRegionReplicaSet());
+ }
+
+ @Override
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.LAST_QUERY_SCAN.serialize(byteBuffer);
+ seriesPath.serialize(byteBuffer);
+ if (timeFilter == null) {
+ ReadWriteIOUtils.write((byte) 0, byteBuffer);
+ } else {
+ ReadWriteIOUtils.write((byte) 1, byteBuffer);
+ timeFilter.serialize(byteBuffer);
+ }
+ }
+
+ public static LastQueryScanNode deserialize(ByteBuffer byteBuffer) {
+ MeasurementPath partialPath = (MeasurementPath) PathDeserializeUtil.deserialize(byteBuffer);
+ Filter timeFilter = null;
+ if (!ReadWriteIOUtils.readIsNull(byteBuffer)) {
+ timeFilter = FilterFactory.deserialize(byteBuffer);
+ }
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new LastQueryScanNode(planNodeId, partialPath, timeFilter);
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesAggregationScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesAggregationScanNode.java
index ced35c4fb4..817fc0a132 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesAggregationScanNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesAggregationScanNode.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.mpp.plan.planner.plan.node.source;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
-import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -224,7 +223,6 @@ public class SeriesAggregationScanNode extends SourceNode {
ReadWriteIOUtils.write((byte) 1, byteBuffer);
groupByTimeParameter.serialize(byteBuffer);
}
- ThriftCommonsSerDeUtils.serializeTRegionReplicaSet(regionReplicaSet, byteBuffer);
}
public static SeriesAggregationScanNode deserialize(ByteBuffer byteBuffer) {
@@ -245,8 +243,6 @@ public class SeriesAggregationScanNode extends SourceNode {
if (isNull == 1) {
groupByTimeParameter = GroupByTimeParameter.deserialize(byteBuffer);
}
- TRegionReplicaSet regionReplicaSet =
- ThriftCommonsSerDeUtils.deserializeTRegionReplicaSet(byteBuffer);
PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
return new SeriesAggregationScanNode(
planNodeId,
@@ -255,7 +251,7 @@ public class SeriesAggregationScanNode extends SourceNode {
scanOrder,
timeFilter,
groupByTimeParameter,
- regionReplicaSet);
+ null);
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesScanNode.java
index 3b3fe8f05c..eb3eb1937a 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesScanNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/source/SeriesScanNode.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.mpp.plan.planner.plan.node.source;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
-import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -213,7 +212,6 @@ public class SeriesScanNode extends SourceNode {
}
ReadWriteIOUtils.write(limit, byteBuffer);
ReadWriteIOUtils.write(offset, byteBuffer);
- ThriftCommonsSerDeUtils.serializeTRegionReplicaSet(regionReplicaSet, byteBuffer);
}
public static SeriesScanNode deserialize(ByteBuffer byteBuffer) {
@@ -231,18 +229,9 @@ public class SeriesScanNode extends SourceNode {
}
int limit = ReadWriteIOUtils.readInt(byteBuffer);
int offset = ReadWriteIOUtils.readInt(byteBuffer);
- TRegionReplicaSet dataRegionReplicaSet =
- ThriftCommonsSerDeUtils.deserializeTRegionReplicaSet(byteBuffer);
PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
return new SeriesScanNode(
- planNodeId,
- partialPath,
- scanOrder,
- timeFilter,
- valueFilter,
- limit,
- offset,
- dataRegionReplicaSet);
+ planNodeId, partialPath, scanOrder, timeFilter, valueFilter, limit, offset, null);
}
@Override
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java
index 53950b092a..3e32852dfd 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java
@@ -124,21 +124,12 @@ public class FragmentInstanceSerdeTest {
new TimeJoinNode(new PlanNodeId("TimeJoinNode"), OrderBy.TIMESTAMP_DESC);
SeriesScanNode seriesScanNode1 =
new SeriesScanNode(new PlanNodeId("SeriesScanNode1"), new MeasurementPath("root.sg.d1.s2"));
- seriesScanNode1.setRegionReplicaSet(
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
seriesScanNode1.setScanOrder(OrderBy.TIMESTAMP_DESC);
SeriesScanNode seriesScanNode2 =
new SeriesScanNode(new PlanNodeId("SeriesScanNode2"), new MeasurementPath("root.sg.d2.s1"));
- seriesScanNode2.setRegionReplicaSet(
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 2), new ArrayList<>()));
seriesScanNode2.setScanOrder(OrderBy.TIMESTAMP_DESC);
SeriesScanNode seriesScanNode3 =
new SeriesScanNode(new PlanNodeId("SeriesScanNode3"), new MeasurementPath("root.sg.d2.s2"));
- seriesScanNode3.setRegionReplicaSet(
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 3), new ArrayList<>()));
seriesScanNode3.setScanOrder(OrderBy.TIMESTAMP_DESC);
// build tree
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/AggregationNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/AggregationNodeSerdeTest.java
index 1393453af9..4a770db76a 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/AggregationNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/AggregationNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.process;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
@@ -67,8 +64,7 @@ public class AggregationNodeSerdeTest {
OrderBy.TIMESTAMP_ASC,
new In<>(Sets.newHashSet("s1", "s2"), VALUE_FILTER, true),
groupByTimeParameter,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
AggregationNode aggregationNode =
new AggregationNode(
new PlanNodeId("TestAggregateNode"),
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/GroupByLevelNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/GroupByLevelNodeSerdeTest.java
index 53a4b72b68..91a441ec02 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/GroupByLevelNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/GroupByLevelNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.process;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
@@ -39,7 +36,6 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.junit.Test;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -64,8 +60,7 @@ public class GroupByLevelNodeSerdeTest {
OrderBy.TIMESTAMP_ASC,
null,
groupByTimeParameter,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
SeriesAggregationScanNode seriesAggregationScanNode2 =
new SeriesAggregationScanNode(
new PlanNodeId("TestSeriesAggregateScanNode"),
@@ -79,8 +74,7 @@ public class GroupByLevelNodeSerdeTest {
OrderBy.TIMESTAMP_ASC,
null,
groupByTimeParameter,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
GroupByLevelNode groupByLevelNode =
new GroupByLevelNode(
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/LimitNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/LimitNodeSerdeTest.java
index 42348c2911..9834f97fad 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/LimitNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/LimitNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.process;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.mpp.plan.plan.node.PlanNodeDeserializeHelper;
@@ -35,7 +32,6 @@ import org.apache.iotdb.tsfile.read.filter.GroupByFilter;
import org.junit.Test;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
@@ -52,8 +48,7 @@ public class LimitNodeSerdeTest {
null,
100,
100,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
OffsetNode offsetNode = new OffsetNode(new PlanNodeId("TestOffsetNode"), seriesScanNode, 2);
LimitNode limitNode = new LimitNode(new PlanNodeId("TestLimitNode"), offsetNode, 3);
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/OffsetNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/OffsetNodeSerdeTest.java
index 0f410299d8..b22acc0a04 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/OffsetNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/OffsetNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.process;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.mpp.plan.plan.node.PlanNodeDeserializeHelper;
@@ -34,7 +31,6 @@ import org.apache.iotdb.tsfile.read.filter.GroupByFilter;
import org.junit.Test;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
@@ -51,8 +47,7 @@ public class OffsetNodeSerdeTest {
null,
100,
100,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
OffsetNode offsetNode = new OffsetNode(new PlanNodeId("TestOffsetNode"), seriesScanNode, 2);
ByteBuffer byteBuffer = ByteBuffer.allocate(2048);
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/SortNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/SortNodeSerdeTest.java
index 66b4943736..13262c20c8 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/SortNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/SortNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.process;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.mpp.plan.plan.node.PlanNodeDeserializeHelper;
@@ -34,7 +31,6 @@ import org.apache.iotdb.tsfile.read.filter.GroupByFilter;
import org.junit.Test;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
@@ -51,8 +47,7 @@ public class SortNodeSerdeTest {
null,
100,
100,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
SortNode sortNode =
new SortNode(new PlanNodeId("TestSortNode"), seriesScanNode, OrderBy.TIMESTAMP_ASC);
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/TimeJoinNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/TimeJoinNodeSerdeTest.java
index 96224b8873..9f809e2705 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/TimeJoinNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/TimeJoinNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.process;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
import org.apache.iotdb.db.mpp.plan.plan.node.PlanNodeDeserializeHelper;
@@ -35,7 +32,6 @@ import org.apache.iotdb.tsfile.read.filter.ValueFilter;
import org.junit.Test;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
@@ -51,8 +47,7 @@ public class TimeJoinNodeSerdeTest {
null,
100,
100,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
SeriesScanNode seriesScanNode2 =
new SeriesScanNode(
new PlanNodeId("TestSeriesScanNode"),
@@ -62,8 +57,7 @@ public class TimeJoinNodeSerdeTest {
ValueFilter.gt(100),
100,
100,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
TimeJoinNode timeJoinNode =
new TimeJoinNode(new PlanNodeId("TestTimeJoinNode"), OrderBy.TIMESTAMP_ASC);
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java
index 9b07836baf..30631d98da 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.source;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.QueryProcessException;
@@ -67,8 +64,7 @@ public class SeriesAggregationScanNodeSerdeTest {
OrderBy.TIMESTAMP_ASC,
new In<>(Sets.newHashSet("s1", "s2"), VALUE_FILTER, true),
groupByTimeParameter,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
ByteBuffer byteBuffer = ByteBuffer.allocate(2048);
seriesAggregationScanNode.serialize(byteBuffer);
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesScanNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesScanNodeSerdeTest.java
index 0ce1190d11..cb65b1b7ad 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesScanNodeSerdeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/source/SeriesScanNodeSerdeTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.iotdb.db.mpp.plan.plan.node.source;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
-import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.path.MeasurementPath;
@@ -34,7 +31,6 @@ import org.apache.iotdb.tsfile.read.filter.GroupByFilter;
import org.junit.Test;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
@@ -51,8 +47,7 @@ public class SeriesScanNodeSerdeTest {
null,
100,
100,
- new TRegionReplicaSet(
- new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), new ArrayList<>()));
+ null);
ByteBuffer byteBuffer = ByteBuffer.allocate(2048);
seriesScanNode.serialize(byteBuffer);