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

dataroaring 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 c7e492deb44 [fix](readconsistency) avoid table not exist error #37593 
(#37709)
c7e492deb44 is described below

commit c7e492deb44a7cfd9b0e90f0055ce5188cca9f1b
Author: Yongqiang YANG <98214048+dataroar...@users.noreply.github.com>
AuthorDate: Sat Jul 13 22:18:53 2024 +0800

    [fix](readconsistency) avoid table not exist error #37593 (#37709)
    
    pick #37593
    
    ## Proposed changes
    
    Issue Number: close #xxx
    
    <!--Describe your changes.-->
---
 .../java/org/apache/doris/qe/StmtExecutor.java     | 31 ++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

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 03ec39818b8..342b38892da 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
@@ -588,6 +588,13 @@ public class StmtExecutor {
                     return;
                 }
             }
+            // Query following createting table would throw table not exist 
error.
+            // For example.
+            // t1: client issues create table to master fe
+            // t2: client issues query sql to observer fe, the query would 
fail due to not exist table in
+            //     plan phase.
+            // t3: observer fe receive editlog creating the table from the 
master fe
+            syncJournalIfNeeded();
             try {
                 ((Command) logicalPlan).run(context, this);
             } catch (QueryStateException e) {
@@ -611,6 +618,13 @@ public class StmtExecutor {
                 ConnectContext.get().setStatsErrorEstimator(new 
StatsErrorEstimator());
             }
             // create plan
+            // Query following createting table would throw table not exist 
error.
+            // For example.
+            // t1: client issues create table to master fe
+            // t2: client issues query sql to observer fe, the query would 
fail due to not exist table in
+            //     plan phase.
+            // t3: observer fe receive editlog creating the table from the 
master fe
+            syncJournalIfNeeded();
             planner = new NereidsPlanner(statementContext);
             try {
                 planner.plan(parsedStmt, 
context.getSessionVariable().toThrift());
@@ -643,7 +657,6 @@ public class StmtExecutor {
 
     private void handleQueryWithRetry(TUniqueId queryId) throws Exception {
         // queue query here
-        syncJournalIfNeeded();
         QueueOfferToken offerRet = null;
         QueryQueue queryQueue = null;
         if (!parsedStmt.isExplain() && Config.enable_workload_group && 
Config.enable_query_queue
@@ -760,6 +773,13 @@ public class StmtExecutor {
                     LOG.debug("no need to transfer to Master. stmt: {}", 
context.getStmtId());
                 }
             } else {
+                // Query following createting table would throw table not 
exist error.
+                // For example.
+                // t1: client issues create table to master fe
+                // t2: client issues query sql to observer fe, the query would 
fail due to not exist table
+                //     in plan phase.
+                // t3: observer fe receive editlog creating the table from the 
master fe
+                syncJournalIfNeeded();
                 analyzer = new Analyzer(context.getEnv(), context);
                 parsedStmt.analyze(analyzer);
                 parsedStmt.checkPriv();
@@ -947,7 +967,7 @@ public class StmtExecutor {
     }
 
     // Analyze one statement to structure in memory.
-    public void analyze(TQueryOptions tQueryOptions) throws UserException, 
InterruptedException {
+    public void analyze(TQueryOptions tQueryOptions) throws UserException, 
InterruptedException, Exception {
         if (LOG.isDebugEnabled()) {
             LOG.debug("begin to analyze stmt: {}, forwarded stmt id: {}", 
context.getStmtId(),
                     context.getForwardedStmtId());
@@ -988,6 +1008,13 @@ public class StmtExecutor {
             return;
         }
 
+        // Query following createting table would throw table not exist error.
+        // For example.
+        // t1: client issues create table to master fe
+        // t2: client issues query sql to observer fe, the query would fail 
due to not exist table in
+        //     plan phase.
+        // t3: observer fe receive editlog creating the table from the master 
fe
+        syncJournalIfNeeded();
         analyzer = new Analyzer(context.getEnv(), context);
 
         if (parsedStmt instanceof PrepareStmt || context.getCommand() == 
MysqlCommand.COM_STMT_PREPARE) {


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

Reply via email to