This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.1 by this push:
new c46b00a5f5 [To rel/1.1][IOTDB-5604]Fix NPE when execute Agg + align by
device query without assigned DataRegion
c46b00a5f5 is described below
commit c46b00a5f55538d5f65cc9c02040060c4aee5609
Author: Weihao Li <[email protected]>
AuthorDate: Thu Mar 2 08:57:34 2023 +0800
[To rel/1.1][IOTDB-5604]Fix NPE when execute Agg + align by device query
without assigned DataRegion
---
.../iotdb/db/it/aggregation/IoTDBAggregationIT.java | 9 +++++++++
.../plan/planner/distribution/NodeGroupContext.java | 18 ++++++++----------
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
index 65aee3dfc2..cd0a1253b1 100644
---
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
@@ -46,7 +46,9 @@ import static
org.apache.iotdb.db.constant.TestConstant.maxValue;
import static org.apache.iotdb.db.constant.TestConstant.minTime;
import static org.apache.iotdb.db.constant.TestConstant.minValue;
import static org.apache.iotdb.db.constant.TestConstant.sum;
+import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
import static
org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualWithDescOrderTest;
+import static org.apache.iotdb.itbase.constant.TestConstant.DEVICE;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.fail;
@@ -971,5 +973,12 @@ public class IoTDBAggregationIT {
String[] retArray = new String[] {"0,null,"};
resultSetEqualWithDescOrderTest(
"select count(s1), sum(s1) from root.test.noDataRegion",
expectedHeader, retArray);
+
+ expectedHeader = new String[] {DEVICE, count("s1"), sum("s1")};
+ retArray = new String[] {"root.test.noDataRegion,0,null,"};
+ resultSetEqualTest(
+ "select count(s1), sum(s1) from root.test.noDataRegion align by
device",
+ expectedHeader,
+ retArray);
}
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/NodeGroupContext.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/NodeGroupContext.java
index 6dda89e41f..cd943761ff 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/NodeGroupContext.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/NodeGroupContext.java
@@ -29,7 +29,6 @@ import
org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SourceNode;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.stream.Collectors;
public class NodeGroupContext {
protected final MPPQueryContext queryContext;
@@ -49,20 +48,19 @@ public class NodeGroupContext {
private TRegionReplicaSet getMostlyUsedDataRegion(PlanNode root) {
Map<TRegionReplicaSet, Long> regionCount = new HashMap<>();
countRegionOfSourceNodes(root, regionCount);
- return Collections.max(
- regionCount.entrySet().stream()
- .filter(e -> e.getKey() != DataPartition.NOT_ASSIGNED)
- .collect(Collectors.toList()),
- Map.Entry.comparingByValue())
- .getKey();
+ if (regionCount.isEmpty()) {
+ return DataPartition.NOT_ASSIGNED;
+ }
+ return Collections.max(regionCount.entrySet(),
Map.Entry.comparingByValue()).getKey();
}
private void countRegionOfSourceNodes(PlanNode root, Map<TRegionReplicaSet,
Long> result) {
root.getChildren().forEach(child -> countRegionOfSourceNodes(child,
result));
if (root instanceof SourceNode) {
- result.compute(
- ((SourceNode) root).getRegionReplicaSet(),
- (region, count) -> (count == null) ? 1 : count + 1);
+ TRegionReplicaSet regionReplicaSet = ((SourceNode)
root).getRegionReplicaSet();
+ if (regionReplicaSet != DataPartition.NOT_ASSIGNED) {
+ result.compute(regionReplicaSet, (region, count) -> (count == null) ?
1 : count + 1);
+ }
}
}