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