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

dataroaring pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new fdf21ec2510 [fix](readconsistency) avoid table not exist error 
(#37593) (#37641)
fdf21ec2510 is described below

commit fdf21ec2510baeab0d90216bf0d19bd83c6dd051
Author: Yongqiang YANG <98214048+dataroar...@users.noreply.github.com>
AuthorDate: Thu Jul 11 18:57:53 2024 +0800

    [fix](readconsistency) avoid table not exist error (#37593) (#37641)
    
    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.
    
    pick #37593
    
    ## Proposed changes
    
    Issue Number: close #xxx
    
    <!--Describe your changes.-->
---
 .../java/org/apache/doris/qe/StmtExecutor.java     | 32 ++++++++++++++++++++--
 1 file changed, 29 insertions(+), 3 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 a429ea85ba2..3c74017c1ba 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
@@ -693,6 +693,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) {
@@ -727,6 +734,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);
@@ -772,8 +786,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 {
@@ -863,6 +875,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();
@@ -1071,7 +1090,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());
@@ -1113,6 +1132,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