You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/04/07 07:15:57 UTC
[doris] branch master updated: [fix](planner) enable fallback to legacy planner when execute internal query (#18353)
This is an automated email from the ASF dual-hosted git repository.
morrysnow 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 b0a13d019f [fix](planner) enable fallback to legacy planner when execute internal query (#18353)
b0a13d019f is described below
commit b0a13d019fcbc1297be95724476a8b6b27941be2
Author: morrySnow <10...@users.noreply.github.com>
AuthorDate: Fri Apr 7 15:15:49 2023 +0800
[fix](planner) enable fallback to legacy planner when execute internal query (#18353)
---
.../org/apache/doris/mtmv/MTMVTaskProcessor.java | 1 +
.../processor/pre/EliminateLogicalSelectHint.java | 7 ++-----
.../java/org/apache/doris/qe/SessionVariable.java | 21 +++++++++++++++++++++
.../org/apache/doris/statistics/HistogramTask.java | 1 +
.../apache/doris/statistics/HiveAnalysisTask.java | 2 ++
.../doris/statistics/IcebergAnalysisTask.java | 1 +
.../apache/doris/statistics/OlapAnalysisTask.java | 1 +
.../doris/statistics/util/StatisticsUtil.java | 1 +
8 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskProcessor.java
index 0e3020536d..0e12c294e1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskProcessor.java
@@ -119,6 +119,7 @@ public class MTMVTaskProcessor {
ctx.setThreadLocalInfo();
ctx.getState().reset();
try {
+ ctx.getSessionVariable().disableNereidsPlannerOnce();
StmtExecutor executor = new StmtExecutor(ctx, sql);
ctx.setExecutor(executor);
executor.execute();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java
index ae3fb9dcb2..b6b0e146e5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/EliminateLogicalSelectHint.java
@@ -76,13 +76,10 @@ public class EliminateLogicalSelectHint extends PlanPreprocessor {
// enable_fallback_to_original_planner=true and revert it after executing.
// throw exception to fall back to original planner
if (!sessionVariable.isEnableNereidsPlanner()) {
- String key = SessionVariable.ENABLE_FALLBACK_TO_ORIGINAL_PLANNER;
- Optional<String> value = Optional.of("true");
try {
- VariableMgr.setVar(sessionVariable, new SetVar(key, new StringLiteral(value.get())));
+ sessionVariable.enableFallbackToOriginalPlannerOnce();
} catch (Throwable t) {
- throw new AnalysisException("Can not set session variable '"
- + key + "' = '" + value.get() + "'", t);
+ throw new AnalysisException("failed to set fallback to original planner to true", t);
}
throw new AnalysisException("The nereids is disabled in this sql, fallback to original planner");
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 0d15d6fb45..a5000fbac9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -17,7 +17,10 @@
package org.apache.doris.qe;
+import org.apache.doris.analysis.SetVar;
+import org.apache.doris.analysis.StringLiteral;
import org.apache.doris.common.Config;
+import org.apache.doris.common.DdlException;
import org.apache.doris.common.io.Text;
import org.apache.doris.common.io.Writable;
import org.apache.doris.common.util.TimeUtils;
@@ -1897,4 +1900,22 @@ public class SessionVariable implements Serializable, Writable {
public void setDumpNereidsMemo(boolean dumpNereidsMemo) {
this.dumpNereidsMemo = dumpNereidsMemo;
}
+
+ public void enableFallbackToOriginalPlannerOnce() throws DdlException {
+ if (enableFallbackToOriginalPlanner) {
+ return;
+ }
+ setIsSingleSetVar(true);
+ VariableMgr.setVar(this,
+ new SetVar(SessionVariable.ENABLE_FALLBACK_TO_ORIGINAL_PLANNER, new StringLiteral("true")));
+ }
+
+ public void disableNereidsPlannerOnce() throws DdlException {
+ if (!enableNereidsPlanner) {
+ return;
+ }
+ setIsSingleSetVar(true);
+ VariableMgr.setVar(this,
+ new SetVar(SessionVariable.ENABLE_NEREIDS_PLANNER, new StringLiteral("false")));
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/HistogramTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/HistogramTask.java
index 32f0f169c9..5097a86767 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/HistogramTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/HistogramTask.java
@@ -104,6 +104,7 @@ public class HistogramTask extends BaseAnalysisTask {
LOG.info("SQL to collect the histogram:\n {}", histogramSql);
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) {
+ r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
this.stmtExecutor = new StmtExecutor(r.connectContext, histogramSql);
this.stmtExecutor.execute();
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java
index c0ca6df80c..200cd8559e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/HiveAnalysisTask.java
@@ -100,6 +100,7 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
String sql = stringSubstitutor.replace(ANALYZE_TABLE_SQL_TEMPLATE);
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) {
+ r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
this.stmtExecutor = new StmtExecutor(r.connectContext, sql);
this.stmtExecutor.execute();
}
@@ -136,6 +137,7 @@ public class HiveAnalysisTask extends HMSAnalysisTask {
// Update partition level stats for this column.
for (String partitionSql : partitionAnalysisSQLs) {
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) {
+ r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
this.stmtExecutor = new StmtExecutor(r.connectContext, partitionSql);
this.stmtExecutor.execute();
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/IcebergAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/IcebergAnalysisTask.java
index e9411e04be..8dec02ee32 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/IcebergAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/IcebergAnalysisTask.java
@@ -114,6 +114,7 @@ public class IcebergAnalysisTask extends HMSAnalysisTask {
StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
String sql = stringSubstitutor.replace(INSERT_TABLE_SQL_TEMPLATE);
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) {
+ r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
this.stmtExecutor = new StmtExecutor(r.connectContext, sql);
this.stmtExecutor.execute();
}
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 927a78c14f..2509143c75 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
@@ -107,6 +107,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
@VisibleForTesting
public void execSQL(String sql) throws Exception {
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) {
+ r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
this.stmtExecutor = new StmtExecutor(r.connectContext, sql);
this.stmtExecutor.execute();
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
index deb67a35d6..2c2de6e3d8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
@@ -92,6 +92,7 @@ public class StatisticsUtil {
public static void execUpdate(String sql) throws Exception {
try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) {
+ r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
StmtExecutor stmtExecutor = new StmtExecutor(r.connectContext, sql);
r.connectContext.setExecutor(stmtExecutor);
stmtExecutor.execute();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org