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]

Reply via email to