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

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

commit a801172ddc0cb7c0542867b884131bbcfaf93a5b
Author: Yongqiang YANG <[email protected]>
AuthorDate: Thu Jul 11 11:05:44 2024 +0800

    [fix](readconsistency) avoid table not exist error (#37593)
    
    Query following createting table would throw table not exist error.
    
    For example.
    t1: client issue create table to master fe
    t2: client issue 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
    
    After the pr:
    query at t2 would wait until latest edit log is received from master fe
    in the observer fe.
---
 .../java/org/apache/doris/qe/StmtExecutor.java     | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

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 6eaeb559b73..fcd0d25a130 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
@@ -725,6 +725,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 (MustFallbackException e) {
@@ -759,6 +766,13 @@ public class StmtExecutor {
         } else {
             context.getState().setIsQuery(true);
             // 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);
             if 
(context.getSessionVariable().isEnableMaterializedViewRewrite()) {
                 planner.addHook(InitMaterializationContextHook.INSTANCE);
@@ -805,7 +819,6 @@ public class StmtExecutor {
 
     private void handleQueryWithRetry(TUniqueId queryId) throws Exception {
         // queue query here
-        syncJournalIfNeeded();
         int retryTime = Config.max_query_retry_time;
         for (int i = 0; i <= retryTime; i++) {
             try {
@@ -955,6 +968,13 @@ public class StmtExecutor {
                     }
                 }
             } 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();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to