This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 54c85e36ad [Fix](point query) OlapScanNode `reuslt` could be memleak 
since it's cached (#16406)
54c85e36ad is described below

commit 54c85e36adae1e60a3ca3eca630a9eef051d09bb
Author: lihangyu <15605149...@163.com>
AuthorDate: Fri Feb 3 21:42:53 2023 +0800

    [Fix](point query) OlapScanNode `reuslt` could be memleak since it's cached 
(#16406)
    
    Cached OlapScanNode each time call `addScanRangeLocations` will add 
TScanRangeLocations to result.
    So `result` could grow too large and lead `getReplicaNumPerHost` a cpu hot 
spot in it's loop.
---
 .../org/apache/doris/planner/OlapScanNode.java     |  1 +
 .../main/java/org/apache/doris/qe/Coordinator.java | 23 +++++++++++-----------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index 5b46ed7b42..f30b76b9bf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -978,6 +978,7 @@ public class OlapScanNode extends ScanNode {
         computePartitionInfo();
         scanBackendIds.clear();
         scanTabletIds.clear();
+        result.clear();
         try {
             getScanRangeLocations();
         } catch (AnalysisException e) {
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 d284ce999a..e90b38df4e 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
@@ -1615,24 +1615,23 @@ public class Coordinator {
     // Populates scan_range_assignment_.
     // <fragment, <server, nodeId>>
     private void computeScanRangeAssignment() throws Exception {
+        if (isPointQuery) {
+            // Fast path for evaluate Backend for point query
+            List<TScanRangeLocations> locations = ((OlapScanNode) 
scanNodes.get(0)).lazyEvaluateRangeLocations();
+            Preconditions.checkNotNull(locations);
+            return;
+        }
         Map<TNetworkAddress, Long> assignedBytesPerHost = Maps.newHashMap();
         Map<TNetworkAddress, Long> replicaNumPerHost = getReplicaNumPerHost();
         Collections.shuffle(scanNodes);
         // set scan ranges/locations for scan nodes
         for (ScanNode scanNode : scanNodes) {
             List<TScanRangeLocations> locations;
-            if (isPointQuery) {
-                // Fast path for evaluate Backend for point query
-                locations = ((OlapScanNode) 
scanNode).lazyEvaluateRangeLocations();
-                Preconditions.checkNotNull(locations);
-                return;
-            } else {
-                // the parameters of getScanRangeLocations may ignore, It 
doesn't take effect
-                locations = scanNode.getScanRangeLocations(0);
-                if (locations == null) {
-                    // only analysis olap scan node
-                    continue;
-                }
+            // the parameters of getScanRangeLocations may ignore, It doesn't 
take effect
+            locations = scanNode.getScanRangeLocations(0);
+            if (locations == null) {
+                // only analysis olap scan node
+                continue;
             }
             Collections.shuffle(locations);
             Set<Integer> scanNodeIds = 
fragmentIdToScanNodeIds.computeIfAbsent(scanNode.getFragmentId(),


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to