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