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

starocean999 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 4818ba02777 [fix](nereids)let query be able to forwarded to master 
(#40797)
4818ba02777 is described below

commit 4818ba02777b113f674909e07d77e86bc8e410ae
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Sat Sep 14 10:02:04 2024 +0800

    [fix](nereids)let query be able to forwarded to master (#40797)
    
    ## Proposed changes
    
    pick from master https://github.com/apache/doris/pull/40119
    
    <!--Describe your changes.-->
---
 .../main/java/org/apache/doris/qe/StmtExecutor.java | 21 +++++++++++++++++++++
 .../doris/nereids/preprocess/SelectHintTest.java    |  6 ++++++
 2 files changed, 27 insertions(+)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 8d56271ac4f..02b0872fe6b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -628,6 +628,27 @@ public class StmtExecutor {
             }
         } else {
             context.getState().setIsQuery(true);
+            if (isForwardToMaster()) {
+                // some times the follower's meta data is out of date.
+                // so we need forward the query to master until the meta data 
is sync with master
+                if (context.getCommand() == MysqlCommand.COM_STMT_PREPARE) {
+                    throw new UserException("Forward master command is not 
supported for prepare statement");
+                }
+                if (isProxy) {
+                    // This is already a stmt forwarded from other FE.
+                    // If we goes here, means we can't find a valid Master 
FE(some error happens).
+                    // To avoid endless forward, throw exception here.
+                    throw new NereidsException(new UserException("The 
statement has been forwarded to master FE("
+                            + Env.getCurrentEnv().getSelfNode().getHost() + ") 
and failed to execute"
+                            + " because Master FE is not ready. You may need 
to check FE's status"));
+                }
+                redirectStatus = RedirectStatus.NO_FORWARD;
+                forwardToMaster();
+                if (masterOpExecutor != null && masterOpExecutor.getQueryId() 
!= null) {
+                    context.setQueryId(masterOpExecutor.getQueryId());
+                }
+                return;
+            }
             if (context.getSessionVariable().enableProfile) {
                 ConnectContext.get().setStatsErrorEstimator(new 
StatsErrorEstimator());
             }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/preprocess/SelectHintTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/preprocess/SelectHintTest.java
index f548a499cad..62965ac27b3 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/preprocess/SelectHintTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/preprocess/SelectHintTest.java
@@ -47,6 +47,12 @@ public class SelectHintTest {
                 return ctx;
             }
         };
+        new MockUp<Env>() {
+            @Mock
+            public boolean isMaster() {
+                return true;
+            }
+        };
     }
 
     @Test


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

Reply via email to