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

lijibing pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new d78787e612e [improvement](statistics)Stop analyze quickly after user 
close auto analyze. #29809 (#29920)
d78787e612e is described below

commit d78787e612ee63f25850ef3ac38214cebe9b3022
Author: Jibing-Li <64681310+jibing...@users.noreply.github.com>
AuthorDate: Wed Jan 24 22:03:20 2024 +0800

    [improvement](statistics)Stop analyze quickly after user close auto 
analyze. #29809 (#29920)
---
 .../doris/statistics/StatisticsAutoCollector.java  | 26 +++++---
 .../statistics/StatisticsAutoCollectorTest.java    | 71 ++++++++++++++++++++++
 2 files changed, 90 insertions(+), 7 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
index 727181a59a8..3fbcb7dfb4f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java
@@ -59,24 +59,32 @@ public class StatisticsAutoCollector extends 
StatisticsCollector {
 
     @Override
     protected void collect() {
-        if 
(!StatisticsUtil.inAnalyzeTime(LocalTime.now(TimeUtils.getTimeZone().toZoneId())))
 {
-            analysisTaskExecutor.clear();
-            return;
-        }
-        if (StatisticsUtil.enableAutoAnalyze()) {
+        if (canCollect()) {
             analyzeAll();
         }
     }
 
-    @SuppressWarnings({"rawtypes", "unchecked"})
-    private void analyzeAll() {
+    protected boolean canCollect() {
+        return StatisticsUtil.enableAutoAnalyze()
+            && 
StatisticsUtil.inAnalyzeTime(LocalTime.now(TimeUtils.getTimeZone().toZoneId()));
+    }
+
+    protected void analyzeAll() {
         List<CatalogIf> catalogs = getCatalogsInOrder();
         for (CatalogIf ctl : catalogs) {
+            if (!canCollect()) {
+                analysisTaskExecutor.clear();
+                break;
+            }
             if (!ctl.enableAutoAnalyze()) {
                 continue;
             }
             List<DatabaseIf> dbs = getDatabasesInOrder(ctl);
             for (DatabaseIf<TableIf> databaseIf : dbs) {
+                if (!canCollect()) {
+                    analysisTaskExecutor.clear();
+                    break;
+                }
                 if 
(StatisticConstants.SYSTEM_DBS.contains(databaseIf.getFullName())) {
                     continue;
                 }
@@ -109,6 +117,10 @@ public class StatisticsAutoCollector extends 
StatisticsCollector {
         List<AnalysisInfo> analysisInfos = constructAnalysisInfo(databaseIf);
         for (AnalysisInfo analysisInfo : analysisInfos) {
             try {
+                if (!canCollect()) {
+                    analysisTaskExecutor.clear();
+                    break;
+                }
                 analysisInfo = getReAnalyzeRequiredPart(analysisInfo);
                 if (analysisInfo == null) {
                     continue;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
index 6d95cc381b8..fd39df93720 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/StatisticsAutoCollectorTest.java
@@ -32,6 +32,7 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.datasource.CatalogIf;
+import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.statistics.AnalysisInfo.AnalysisMethod;
 import org.apache.doris.statistics.AnalysisInfo.AnalysisType;
 import org.apache.doris.statistics.AnalysisInfo.JobType;
@@ -463,4 +464,74 @@ public class StatisticsAutoCollectorTest {
             Assertions.assertNotNull(task.getTableSample());
         }
     }
+
+    @Test
+    public void testDisableAuto1() throws Exception {
+        InternalCatalog catalog1 = new InternalCatalog();
+        List<CatalogIf> catalogs = Lists.newArrayList();
+        catalogs.add(catalog1);
+
+        new MockUp<StatisticsAutoCollector>() {
+            @Mock
+            public List<CatalogIf> getCatalogsInOrder() {
+                return catalogs;
+            }
+
+            @Mock
+            protected boolean canCollect() {
+                return false;
+            }
+
+        };
+
+        StatisticsAutoCollector sac = new StatisticsAutoCollector();
+        new Expectations(catalog1) {{
+                catalog1.enableAutoAnalyze();
+                times = 0;
+            }};
+
+        sac.analyzeAll();
+    }
+
+    @Test
+    public void testDisableAuto2() throws Exception {
+        InternalCatalog catalog1 = new InternalCatalog();
+        List<CatalogIf> catalogs = Lists.newArrayList();
+        catalogs.add(catalog1);
+
+        Database db1 = new Database();
+        List<DatabaseIf<? extends TableIf>> dbs = Lists.newArrayList();
+        dbs.add(db1);
+
+        new MockUp<StatisticsAutoCollector>() {
+            int count = 0;
+            boolean[] canCollectReturn = {true, false};
+            @Mock
+            public List<CatalogIf> getCatalogsInOrder() {
+                return catalogs;
+            }
+
+            @Mock
+            public List<DatabaseIf<? extends TableIf>> 
getDatabasesInOrder(CatalogIf<DatabaseIf> catalog) {
+                return dbs;
+            }
+
+                @Mock
+            protected boolean canCollect() {
+                return canCollectReturn[count++];
+            }
+
+        };
+
+        StatisticsAutoCollector sac = new StatisticsAutoCollector();
+        new Expectations(catalog1, db1) {{
+                catalog1.enableAutoAnalyze();
+                result = true;
+                times = 1;
+                db1.getFullName();
+                times = 0;
+            }};
+
+        sac.analyzeAll();
+    }
 }


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

Reply via email to