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