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

huajianlan 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 17b72a63419 [fix](Nereids) lock table when generate distribute plan 
(#38950) (#39037)
17b72a63419 is described below

commit 17b72a6341965d67f246f58094b4ec9274ff1ed8
Author: 924060929 <924060...@qq.com>
AuthorDate: Wed Aug 7 19:00:56 2024 +0800

    [fix](Nereids) lock table when generate distribute plan (#38950) (#39037)
    
    
    We should lock table when generate distribute plan, because insert 
overwrite by async materialized view will drop partitions parallel, and query 
thread will throw exception:
    ```
    java.lang.RuntimeException: Cannot invoke 
"org.apache.doris.catalog.Partition.getBaseIndex()" because "partition" is null
        at 
org.apache.doris.nereids.util.Utils.execWithUncheckedException(Utils.java:76) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.nereids.glue.translator.PhysicalPlanTranslator.translatePlan(PhysicalPlanTranslator.java:278)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.nereids.NereidsPlanner.splitFragments(NereidsPlanner.java:341) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.nereids.NereidsPlanner.distribute(NereidsPlanner.java:400) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:147) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:796) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:605) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.queryRetry(StmtExecutor.java:558) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:548) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:385) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:237) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:260)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:288)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:342)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) 
~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 
~[?:?]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
    Caused by: java.lang.NullPointerException: Cannot invoke 
"org.apache.doris.catalog.Partition.getBaseIndex()" because "partition" is null
        at 
org.apache.doris.planner.OlapScanNode.mockRowCountInStatistic(OlapScanNode.java:589)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.planner.OlapScanNode.finalizeForNereids(OlapScanNode.java:1733)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.nereids.util.Utils.execWithUncheckedException(Utils.java:74) 
~[doris-fe.jar:1.2-SNAPSHOT]
        ... 17 more
    2024-07-29 00:46:17,608 WARN (mysql-nio-pool-114|201) Analyze failed. 
stmt[210035, 49d3041004ba4b6a-b07fe4491d03c5de]
    org.apache.doris.common.NereidsException: errCode = 2, detailMessage = 
Cannot invoke "org.apache.doris.catalog.Partition.getBaseIndex()" because 
"partition" is null
        at 
org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:803) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:605) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.queryRetry(StmtExecutor.java:558) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:548) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:385) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:237) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:260)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:288)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:342)
 ~[doris-fe.jar:1.2-SNAPSHOT]
        at 
org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) 
~[doris-fe.jar:1.2-SNAPSHOT]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) 
~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 
~[?:?]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
    ```
    
    this exception is too hard to reproduce, so I can not write a test case
---
 .../org/apache/doris/nereids/NereidsPlanner.java   | 225 +++++++++++----------
 .../apache/doris/nereids/UnsupportedTypeTest.java  |   2 +-
 .../doris/nereids/preprocess/SelectHintTest.java   |   2 +-
 .../nereids/rules/analysis/AnalyzeCTETest.java     |   2 +-
 .../rules/analysis/AnalyzeSubQueryTest.java        |   2 +-
 .../rules/analysis/AnalyzeWhereSubqueryTest.java   |   2 +-
 .../PushdownExpressionsInHashConditionTest.java    |   2 +-
 .../doris/nereids/trees/expressions/ViewTest.java  |   2 +-
 .../trees/plans/ExplainInsertCommandTest.java      |   2 +-
 .../doris/nereids/trees/plans/OutFileTest.java     |   2 +-
 .../apache/doris/nereids/util/ReadLockTest.java    |  10 +-
 11 files changed, 132 insertions(+), 121 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index 2efba2b1ed8..c17d3fa545b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -81,6 +81,7 @@ import java.util.Optional;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 /**
@@ -123,43 +124,43 @@ public class NereidsPlanner extends Planner {
         setParsedPlan(parsedPlan);
         PhysicalProperties requireProperties = buildInitRequireProperties();
         statementContext.getStopwatch().reset().start();
-        Plan resultPlan = null;
         try {
-            resultPlan = plan(parsedPlan, requireProperties, explainLevel);
+            planWithLock(parsedPlan, requireProperties, explainLevel, plan -> {
+                setOptimizedPlan(plan);
+                if (explainLevel.isPlanLevel) {
+                    return;
+                }
+                physicalPlan = (PhysicalPlan) plan;
+                PlanTranslatorContext planTranslatorContext = new 
PlanTranslatorContext(cascadesContext);
+                PhysicalPlanTranslator physicalPlanTranslator = new 
PhysicalPlanTranslator(planTranslatorContext,
+                        
statementContext.getConnectContext().getStatsErrorEstimator());
+                if (statementContext.getConnectContext().getExecutor() != 
null) {
+                    
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsTranslateTime();
+                }
+                if 
(cascadesContext.getConnectContext().getSessionVariable().isEnableNereidsTrace())
 {
+                    CounterEvent.clearCounter();
+                }
+                if 
(cascadesContext.getConnectContext().getSessionVariable().isPlayNereidsDump()) {
+                    return;
+                }
+                PlanFragment root = 
physicalPlanTranslator.translatePlan(physicalPlan);
+
+                scanNodeList.addAll(planTranslatorContext.getScanNodes());
+                descTable = planTranslatorContext.getDescTable();
+                fragments = new 
ArrayList<>(planTranslatorContext.getPlanFragments());
+                for (int seq = 0; seq < fragments.size(); seq++) {
+                    fragments.get(seq).setFragmentSequenceNum(seq);
+                }
+                // set output exprs
+                logicalPlanAdapter.setResultExprs(root.getOutputExprs());
+                ArrayList<String> columnLabelList = 
physicalPlan.getOutput().stream().map(NamedExpression::getName)
+                        .collect(Collectors.toCollection(ArrayList::new));
+                logicalPlanAdapter.setColLabels(columnLabelList);
+                
logicalPlanAdapter.setViewDdlSqls(statementContext.getViewDdlSqls());
+            });
         } finally {
             statementContext.getStopwatch().stop();
         }
-        setOptimizedPlan(resultPlan);
-        if (explainLevel.isPlanLevel) {
-            return;
-        }
-        physicalPlan = (PhysicalPlan) resultPlan;
-        PlanTranslatorContext planTranslatorContext = new 
PlanTranslatorContext(cascadesContext);
-        PhysicalPlanTranslator physicalPlanTranslator = new 
PhysicalPlanTranslator(planTranslatorContext,
-                statementContext.getConnectContext().getStatsErrorEstimator());
-        if (statementContext.getConnectContext().getExecutor() != null) {
-            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsTranslateTime();
-        }
-        if 
(cascadesContext.getConnectContext().getSessionVariable().isEnableNereidsTrace())
 {
-            CounterEvent.clearCounter();
-        }
-        if 
(cascadesContext.getConnectContext().getSessionVariable().isPlayNereidsDump()) {
-            return;
-        }
-        PlanFragment root = physicalPlanTranslator.translatePlan(physicalPlan);
-
-        scanNodeList.addAll(planTranslatorContext.getScanNodes());
-        descTable = planTranslatorContext.getDescTable();
-        fragments = new ArrayList<>(planTranslatorContext.getPlanFragments());
-        for (int seq = 0; seq < fragments.size(); seq++) {
-            fragments.get(seq).setFragmentSequenceNum(seq);
-        }
-        // set output exprs
-        logicalPlanAdapter.setResultExprs(root.getOutputExprs());
-        ArrayList<String> columnLabelList = 
physicalPlan.getOutput().stream().map(NamedExpression::getName)
-                .collect(Collectors.toCollection(ArrayList::new));
-        logicalPlanAdapter.setColLabels(columnLabelList);
-        logicalPlanAdapter.setViewDdlSqls(statementContext.getViewDdlSqls());
     }
 
     @VisibleForTesting
@@ -171,8 +172,9 @@ public class NereidsPlanner extends Planner {
         }
     }
 
-    public PhysicalPlan plan(LogicalPlan plan, PhysicalProperties 
outputProperties) {
-        return (PhysicalPlan) plan(plan, outputProperties, ExplainLevel.NONE);
+    public PhysicalPlan planWithLock(LogicalPlan plan, PhysicalProperties 
outputProperties) {
+        Consumer<Plan> noCallback = p -> {};
+        return (PhysicalPlan) planWithLock(plan, outputProperties, 
ExplainLevel.NONE, noCallback);
     }
 
     /**
@@ -180,10 +182,12 @@ public class NereidsPlanner extends Planner {
      *
      * @param plan wait for plan
      * @param requireProperties request physical properties constraints
+     * @param lockCallback this callback function will invoke the table lock
      * @return plan generated by this planner
      * @throws AnalysisException throw exception if failed in ant stage
      */
-    public Plan plan(LogicalPlan plan, PhysicalProperties requireProperties, 
ExplainLevel explainLevel) {
+    public Plan planWithLock(LogicalPlan plan, PhysicalProperties 
requireProperties, ExplainLevel explainLevel,
+            Consumer<Plan> lockCallback) {
         if (explainLevel == ExplainLevel.PARSED_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
             parsedPlan = plan;
             if (explainLevel == ExplainLevel.PARSED_PLAN) {
@@ -197,89 +201,96 @@ public class NereidsPlanner extends Planner {
         initCascadesContext(plan, requireProperties);
 
         try (Lock lock = new Lock(plan, cascadesContext)) {
-            // resolve column, table and function
-            Span queryAnalysisSpan =
-                    statementContext.getConnectContext().getTracer()
-                            .spanBuilder("query 
analysis").setParent(Context.current()).startSpan();
-            try (Scope scope = queryAnalysisSpan.makeCurrent()) {
-                // analyze this query
-                analyze();
-            } catch (Exception e) {
-                queryAnalysisSpan.recordException(e);
-                throw e;
-            } finally {
-                queryAnalysisSpan.end();
-            }
+            Plan resultPlan = planWithoutLock(plan, explainLevel, 
requireProperties);
+            lockCallback.accept(resultPlan);
+            return resultPlan;
+        }
+    }
 
-            // minidump of input must be serialized first, this process ensure 
minidump string not null
-            if 
(!statementContext.getConnectContext().getSessionVariable().isPlayNereidsDump()
-                    && 
statementContext.getConnectContext().getSessionVariable().isEnableMinidump()) {
-                MinidumpUtils.init();
-                String queryId = 
DebugUtil.printId(statementContext.getConnectContext().queryId());
-                try {
-                    
statementContext.getConnectContext().setMinidump(serializeInputsToDumpFile(plan,
 queryId));
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
+    private Plan planWithoutLock(
+            LogicalPlan plan, ExplainLevel explainLevel, PhysicalProperties 
requireProperties) {
+        // resolve column, table and function
+        Span queryAnalysisSpan =
+                statementContext.getConnectContext().getTracer()
+                        .spanBuilder("query 
analysis").setParent(Context.current()).startSpan();
+        try (Scope scope = queryAnalysisSpan.makeCurrent()) {
+            // analyze this query
+            analyze();
+        } catch (Exception e) {
+            queryAnalysisSpan.recordException(e);
+            throw e;
+        } finally {
+            queryAnalysisSpan.end();
+        }
 
-            if (statementContext.getConnectContext().getExecutor() != null) {
-                
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsAnalysisTime();
+        // minidump of input must be serialized first, this process ensure 
minidump string not null
+        if 
(!statementContext.getConnectContext().getSessionVariable().isPlayNereidsDump()
+                && 
statementContext.getConnectContext().getSessionVariable().isEnableMinidump()) {
+            MinidumpUtils.init();
+            String queryId = 
DebugUtil.printId(statementContext.getConnectContext().queryId());
+            try {
+                
statementContext.getConnectContext().setMinidump(serializeInputsToDumpFile(plan,
 queryId));
+            } catch (IOException e) {
+                throw new RuntimeException(e);
             }
+        }
 
-            if (explainLevel == ExplainLevel.ANALYZED_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
-                analyzedPlan = cascadesContext.getRewritePlan();
-                if (explainLevel == ExplainLevel.ANALYZED_PLAN) {
-                    return analyzedPlan;
-                }
-            }
+        if (statementContext.getConnectContext().getExecutor() != null) {
+            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsAnalysisTime();
+        }
 
-            // rule-based optimize
-            rewrite();
-            if (statementContext.getConnectContext().getExecutor() != null) {
-                
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsRewriteTime();
-            }
-            if (explainLevel == ExplainLevel.REWRITTEN_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
-                rewrittenPlan = cascadesContext.getRewritePlan();
-                if (explainLevel == ExplainLevel.REWRITTEN_PLAN) {
-                    return rewrittenPlan;
-                }
+        if (explainLevel == ExplainLevel.ANALYZED_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
+            analyzedPlan = cascadesContext.getRewritePlan();
+            if (explainLevel == ExplainLevel.ANALYZED_PLAN) {
+                return analyzedPlan;
             }
+        }
 
-            optimize();
-            if (statementContext.getConnectContext().getExecutor() != null) {
-                
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsOptimizeTime();
-            }
-            // print memo before choose plan.
-            // if chooseNthPlan failed, we could get memo to debug
-            if 
(cascadesContext.getConnectContext().getSessionVariable().dumpNereidsMemo) {
-                String memo = cascadesContext.getMemo().toString();
-                LOG.info(ConnectContext.get().getQueryIdentifier() + "\n" + 
memo);
+        // rule-based optimize
+        rewrite();
+        if (statementContext.getConnectContext().getExecutor() != null) {
+            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsRewriteTime();
+        }
+        if (explainLevel == ExplainLevel.REWRITTEN_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
+            rewrittenPlan = cascadesContext.getRewritePlan();
+            if (explainLevel == ExplainLevel.REWRITTEN_PLAN) {
+                return rewrittenPlan;
             }
+        }
 
-            int nth = 
cascadesContext.getConnectContext().getSessionVariable().getNthOptimizedPlan();
-            PhysicalPlan physicalPlan = chooseNthPlan(getRoot(), 
requireProperties, nth);
+        optimize();
+        if (statementContext.getConnectContext().getExecutor() != null) {
+            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsOptimizeTime();
+        }
+        // print memo before choose plan.
+        // if chooseNthPlan failed, we could get memo to debug
+        if 
(cascadesContext.getConnectContext().getSessionVariable().dumpNereidsMemo) {
+            String memo = cascadesContext.getMemo().toString();
+            LOG.info(ConnectContext.get().getQueryIdentifier() + "\n" + memo);
+        }
 
-            physicalPlan = postProcess(physicalPlan);
-            if 
(cascadesContext.getConnectContext().getSessionVariable().dumpNereidsMemo) {
-                String tree = physicalPlan.treeString();
-                LOG.info(ConnectContext.get().getQueryIdentifier() + "\n" + 
tree);
-            }
-            if (explainLevel == ExplainLevel.OPTIMIZED_PLAN
-                    || explainLevel == ExplainLevel.ALL_PLAN
-                    || explainLevel == ExplainLevel.SHAPE_PLAN) {
-                optimizedPlan = physicalPlan;
-            }
-            // serialize optimized plan to dumpfile, dumpfile do not have this 
part means optimize failed
-            serializeOutputToDumpFile(physicalPlan, 
statementContext.getConnectContext());
-            if 
(statementContext.getConnectContext().getSessionVariable().isEnableMinidump()) {
-                
MinidumpUtils.saveMinidumpString(statementContext.getConnectContext().getMinidump(),
-                        
DebugUtil.printId(statementContext.getConnectContext().queryId()));
-            }
-            NereidsTracer.output(statementContext.getConnectContext());
+        int nth = 
cascadesContext.getConnectContext().getSessionVariable().getNthOptimizedPlan();
+        PhysicalPlan physicalPlan = chooseNthPlan(getRoot(), 
requireProperties, nth);
 
-            return physicalPlan;
+        physicalPlan = postProcess(physicalPlan);
+        if 
(cascadesContext.getConnectContext().getSessionVariable().dumpNereidsMemo) {
+            String tree = physicalPlan.treeString();
+            LOG.info(ConnectContext.get().getQueryIdentifier() + "\n" + tree);
+        }
+        if (explainLevel == ExplainLevel.OPTIMIZED_PLAN
+                || explainLevel == ExplainLevel.ALL_PLAN
+                || explainLevel == ExplainLevel.SHAPE_PLAN) {
+            optimizedPlan = physicalPlan;
+        }
+        // serialize optimized plan to dumpfile, dumpfile do not have this 
part means optimize failed
+        serializeOutputToDumpFile(physicalPlan, 
statementContext.getConnectContext());
+        if 
(statementContext.getConnectContext().getSessionVariable().isEnableMinidump()) {
+            
MinidumpUtils.saveMinidumpString(statementContext.getConnectContext().getMinidump(),
+                    
DebugUtil.printId(statementContext.getConnectContext().queryId()));
         }
+        NereidsTracer.output(statementContext.getConnectContext());
+
+        return physicalPlan;
     }
 
     private LogicalPlan preprocess(LogicalPlan logicalPlan) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/UnsupportedTypeTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/UnsupportedTypeTest.java
index 0fc632f2267..a78966b4e6b 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/UnsupportedTypeTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/UnsupportedTypeTest.java
@@ -106,7 +106,7 @@ public class UnsupportedTypeTest extends TestWithFeService {
     }
 
     private void runPlanner(String sql) {
-        new 
NereidsPlanner(MemoTestUtils.createStatementContext(connectContext, sql)).plan(
+        new 
NereidsPlanner(MemoTestUtils.createStatementContext(connectContext, 
sql)).planWithLock(
                 new NereidsParser().parseSingle(sql),
                 PhysicalProperties.ANY
         );
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 94dab1eef7b..f548a499cad 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
@@ -61,7 +61,7 @@ public class SelectHintTest {
         sv.setEnableNereidsPlanner(true);
         sv.enableFallbackToOriginalPlanner = false;
         Assertions.assertThrows(AnalysisException.class, () -> new 
NereidsPlanner(statementContext)
-                .plan(new NereidsParser().parseSingle(sql), 
PhysicalProperties.ANY));
+                .planWithLock(new NereidsParser().parseSingle(sql), 
PhysicalProperties.ANY));
 
         // manually recover sv
         sv.setEnableNereidsPlanner(true);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTETest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTETest.java
index 522f198e3ff..abe82c858d4 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTETest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTETest.java
@@ -119,7 +119,7 @@ public class AnalyzeCTETest extends TestWithFeService 
implements MemoPatternMatc
         for (String sql : testSqls) {
             StatementScopeIdGenerator.clear();
             StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
-            PhysicalPlan plan = new NereidsPlanner(statementContext).plan(
+            PhysicalPlan plan = new 
NereidsPlanner(statementContext).planWithLock(
                     parser.parseSingle(sql),
                     PhysicalProperties.ANY
             );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
index 26496a4dfea..57bc6ef9be2 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
@@ -91,7 +91,7 @@ public class AnalyzeSubQueryTest extends TestWithFeService 
implements MemoPatter
             StatementScopeIdGenerator.clear();
             StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
             NereidsPlanner planner = new NereidsPlanner(statementContext);
-            PhysicalPlan plan = planner.plan(
+            PhysicalPlan plan = planner.planWithLock(
                     parser.parseSingle(sql),
                     PhysicalProperties.ANY
             );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
index 73422bee702..753169a4c86 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
@@ -136,7 +136,7 @@ public class AnalyzeWhereSubqueryTest extends 
TestWithFeService implements MemoP
             try {
                 StatementScopeIdGenerator.clear();
                 StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
-                PhysicalPlan plan = new NereidsPlanner(statementContext).plan(
+                PhysicalPlan plan = new 
NereidsPlanner(statementContext).planWithLock(
                         parser.parseSingle(sql),
                         PhysicalProperties.ANY
                 );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownExpressionsInHashConditionTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownExpressionsInHashConditionTest.java
index dfad75d5d80..d56f542a326 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownExpressionsInHashConditionTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownExpressionsInHashConditionTest.java
@@ -72,7 +72,7 @@ public class PushdownExpressionsInHashConditionTest extends 
TestWithFeService im
                 "SELECT * FROM T1 JOIN (SELECT ID, SUM(SCORE) SCORE FROM T2 
GROUP BY ID) T ON T1.ID + 1 = T.ID AND T.SCORE < 10",
                 "SELECT * FROM T1 JOIN (SELECT ID, SUM(SCORE) SCORE FROM T2 
GROUP BY ID ORDER BY ID) T ON T1.ID + 1 = T.ID AND T.SCORE < 10"
         );
-        testSql.forEach(sql -> new 
NereidsPlanner(createStatementCtx(sql)).plan(
+        testSql.forEach(sql -> new 
NereidsPlanner(createStatementCtx(sql)).planWithLock(
                 new NereidsParser().parseSingle(sql),
                 PhysicalProperties.ANY
         ));
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ViewTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ViewTest.java
index 4fe217b0e6b..de47fdd91d1 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ViewTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ViewTest.java
@@ -100,7 +100,7 @@ public class ViewTest extends TestWithFeService implements 
MemoPatternMatchSuppo
             System.out.println("\n\n***** " + sql + " *****\n\n");
             StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
             NereidsPlanner planner = new NereidsPlanner(statementContext);
-            PhysicalPlan plan = planner.plan(
+            PhysicalPlan plan = planner.planWithLock(
                     new NereidsParser().parseSingle(sql),
                     PhysicalProperties.ANY
             );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
index c36d7642741..880f919a261 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
@@ -127,7 +127,7 @@ public class ExplainInsertCommandTest extends 
TestWithFeService {
         StatementScopeIdGenerator.clear();
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        PhysicalPlan plan = planner.plan(
+        PhysicalPlan plan = planner.planWithLock(
                 ((ExplainCommand) parser.parseSingle(sql)).getLogicalPlan(),
                 PhysicalProperties.ANY
         );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/OutFileTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/OutFileTest.java
index 426c6414251..f8238078f3c 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/OutFileTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/OutFileTest.java
@@ -82,7 +82,7 @@ public class OutFileTest extends TestWithFeService implements 
PlanPatternMatchSu
         StatementScopeIdGenerator.clear();
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        PhysicalPlan plan = planner.plan(
+        PhysicalPlan plan = planner.planWithLock(
                 parser.parseSingle(sql),
                 PhysicalProperties.ANY
         );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java
index c24a846a1bb..264891804ff 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java
@@ -43,7 +43,7 @@ public class ReadLockTest extends SSBTestBase {
         String sql = "SELECT s_suppkey FROM supplier";
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        planner.plan(
+        planner.planWithLock(
                 parser.parseSingle(sql),
                 PhysicalProperties.ANY
         );
@@ -65,7 +65,7 @@ public class ReadLockTest extends SSBTestBase {
                 + "        FROM cte1 as t1, cte1 as t2";
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        planner.plan(
+        planner.planWithLock(
                 parser.parseSingle(sql),
                 PhysicalProperties.ANY
         );
@@ -80,7 +80,7 @@ public class ReadLockTest extends SSBTestBase {
         String sql = "SELECT s_suppkey FROM (SELECT * FROM supplier) t";
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        planner.plan(
+        planner.planWithLock(
                 parser.parseSingle(sql),
                 PhysicalProperties.ANY
         );
@@ -95,7 +95,7 @@ public class ReadLockTest extends SSBTestBase {
         String sql = "SELECT s_suppkey FROM supplier WHERE s_suppkey > (SELECT 
MAX(lo_orderkey) FROM lineorder)";
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        planner.plan(
+        planner.planWithLock(
                 parser.parseSingle(sql),
                 PhysicalProperties.ANY
         );
@@ -116,7 +116,7 @@ public class ReadLockTest extends SSBTestBase {
         try {
             InsertIntoTableCommand insertIntoTableCommand = 
(InsertIntoTableCommand) parser.parseSingle(sql);
             NereidsPlanner planner = new NereidsPlanner(statementContext);
-            planner.plan(
+            planner.planWithLock(
                     (LogicalPlan) 
insertIntoTableCommand.getExplainPlan(connectContext),
                     PhysicalProperties.ANY
             );


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

Reply via email to