This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 50ba5d3 [Bug] Colocate Join and Bucket shuffle join may scan some
tablet twice time. (#5256)
50ba5d3 is described below
commit 50ba5d336d7bbfdafb73f6b2be6e3532a21a1632
Author: HappenLee <[email protected]>
AuthorDate: Wed Jan 20 21:42:04 2021 +0800
[Bug] Colocate Join and Bucket shuffle join may scan some tablet twice
time. (#5256)
Fix issue #5255
---
.../main/java/org/apache/doris/qe/Coordinator.java | 19 ++++++++-----------
.../java/org/apache/doris/qe/CoordinatorTest.java | 12 +++++++++++-
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
index 0cd3f0c..c0fba82 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
@@ -1205,13 +1205,11 @@ public class Coordinator {
for (Map<Integer, List<TScanRangeParams>> nodeScanRangeMap :
perInstanceScanRange) {
for (Map.Entry<Integer, List<TScanRangeParams>>
nodeScanRange : nodeScanRangeMap.entrySet()) {
if
(!instanceParam.perNodeScanRanges.containsKey(nodeScanRange.getKey())) {
- range.put(nodeScanRange.getKey(),
nodeScanRange.getValue());
-
instanceParam.perNodeScanRanges.put(nodeScanRange.getKey(),
nodeScanRange.getValue());
- } else {
-
range.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
-
instanceParam.perNodeScanRanges.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
+ range.put(nodeScanRange.getKey(),
Lists.newArrayList());
+
instanceParam.perNodeScanRanges.put(nodeScanRange.getKey(),
Lists.newArrayList());
}
-
+
range.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
+
instanceParam.perNodeScanRanges.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
}
}
params.instanceExecParams.add(instanceParam);
@@ -1665,12 +1663,11 @@ public class Coordinator {
instanceParam.addBucketSeq(nodeScanRangeMap.first);
for (Map.Entry<Integer, List<TScanRangeParams>>
nodeScanRange : nodeScanRangeMap.second.entrySet()) {
if
(!instanceParam.perNodeScanRanges.containsKey(nodeScanRange.getKey())) {
- range.put(nodeScanRange.getKey(),
nodeScanRange.getValue());
-
instanceParam.perNodeScanRanges.put(nodeScanRange.getKey(),
nodeScanRange.getValue());
- } else {
-
range.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
-
instanceParam.perNodeScanRanges.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
+ range.put(nodeScanRange.getKey(),
Lists.newArrayList());
+
instanceParam.perNodeScanRanges.put(nodeScanRange.getKey(),
Lists.newArrayList());
}
+
range.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
+
instanceParam.perNodeScanRanges.get(nodeScanRange.getKey()).addAll(nodeScanRange.getValue());
}
}
params.instanceExecParams.add(instanceParam);
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/CoordinatorTest.java
b/fe/fe-core/src/test/java/org/apache/doris/qe/CoordinatorTest.java
index ea4adfa..41e1755 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/CoordinatorTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/CoordinatorTest.java
@@ -110,7 +110,10 @@ public class CoordinatorTest extends Coordinator {
// 2. set bucketSeqToScanRange in coordinator
BucketSeqToScanRange bucketSeqToScanRange = new BucketSeqToScanRange();
Map<Integer, List<TScanRangeParams>> ScanRangeMap = new HashMap<>();
- ScanRangeMap.put(scanNodeId, new ArrayList<>());
+ List<TScanRangeParams> scanRangeParamsList = new ArrayList<>();
+ scanRangeParamsList.add(new TScanRangeParams());
+
+ ScanRangeMap.put(scanNodeId, scanRangeParamsList);
for (int i = 0; i < 3; i++) {
bucketSeqToScanRange.put(i, ScanRangeMap);
}
@@ -120,6 +123,13 @@ public class CoordinatorTest extends Coordinator {
Deencapsulation.invoke(coordinator,
"computeColocateJoinInstanceParam", planFragmentId, 1, params);
Assert.assertEquals(1, params.instanceExecParams.size());
+ // check whether one instance have 3 tablet to scan
+ for (FInstanceExecParam instanceExecParam : params.instanceExecParams)
{
+ for (List<TScanRangeParams> tempScanRangeParamsList
:instanceExecParam.perNodeScanRanges.values()) {
+ Assert.assertEquals(3, tempScanRangeParamsList.size());
+ }
+ }
+
params = new FragmentExecParams(null);
Deencapsulation.invoke(coordinator,
"computeColocateJoinInstanceParam", planFragmentId, 2, params);
Assert.assertEquals(2, params.instanceExecParams.size());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]