From 0b9a018e4c1a768dddc36ab89e229772b2ed8afc Mon Sep 17 00:00:00 2001 From: Jibing-Li <64681310+Jibing-Li@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:33:40 +0800 Subject: [PATCH] Improve analyze timeout. (#33836) --- .../java/org/apache/doris/statistics/AnalysisManager.java | 4 ++-- .../java/org/apache/doris/statistics/HMSAnalysisTask.java | 3 +++ .../java/org/apache/doris/statistics/JdbcAnalysisTask.java | 3 +++ .../java/org/apache/doris/statistics/OlapAnalysisTask.java | 3 +++ .../hive/test_hive_statistic_timeout.groovy | 7 ++++--- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java index 42dd6664a851f3..347b1c6b047dc5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java @@ -857,7 +857,7 @@ public void execute(ThreadPoolExecutor executor) { executor.submit(() -> { try { if (cancelled) { - errorMessages.add("Query timeout or user cancelled." + errorMessages.add("Query Timeout or user Cancelled." + "Could set analyze_timeout to a bigger value."); return; } @@ -880,7 +880,7 @@ public void execute(ThreadPoolExecutor executor) { } if (!colNames.isEmpty()) { if (cancelled) { - throw new RuntimeException("Cancelled"); + throw new RuntimeException("User Cancelled or Timeout."); } throw new RuntimeException("Failed to analyze following columns:[" + String.join(",", colNames) + "] Reasons: " + String.join(",", errorMessages)); diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java index a90308a8000157..42fb10fc449d10 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java @@ -58,6 +58,9 @@ public HMSAnalysisTask(AnalysisInfo info) { } public void doExecute() throws Exception { + if (killed) { + return; + } if (isTableLevelTask) { getTableStats(); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/JdbcAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/JdbcAnalysisTask.java index 38ee648cad4be7..c709e1044d97c0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/JdbcAnalysisTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/JdbcAnalysisTask.java @@ -60,6 +60,9 @@ public JdbcAnalysisTask(AnalysisInfo info) { } public void doExecute() throws Exception { + if (killed) { + return; + } if (isTableLevelTask) { getTableStats(); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java index 60a3528afc898e..073000d9eb2b16 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java @@ -65,6 +65,9 @@ public OlapAnalysisTask(AnalysisInfo info) { } public void doExecute() throws Exception { + if (killed) { + return; + } Set partitionNames = info.colToPartitions.get(info.colName); if (StatisticsUtil.isEmptyTable(tbl, info.analysisMethod) || partitionNames == null || partitionNames.isEmpty()) { diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy index a3329f87712802..a52a230478851b 100644 --- a/regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy +++ b/regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy @@ -34,9 +34,10 @@ suite("test_hive_statistic_timeout", "p2,external,hive,external_remote,external_ sql """use ${catalog_name}.tpch_1000_parquet""" sql """set global analyze_timeout=1""" try { - sql """analyze table part (p_partkey, p_container, p_type, p_retailprice) with sync with full;""" - } catch (Exception e) { - assertTrue(e.getMessage().contains("Cancelled")); + test { + sql """analyze table part (p_partkey, p_container, p_type, p_retailprice) with sync with full;""" + exception "Timeout" + } } finally { sql """set global analyze_timeout=43200""" }