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

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

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

    [fix](Nereids) lock table when generate distribute plan (#38950) (#39029)
    
    
    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
---
 .../main/java/org/apache/doris/mtmv/MTMVCache.java |   2 +-
 .../java/org/apache/doris/mtmv/MTMVPlanUtil.java   |   2 +-
 .../org/apache/doris/nereids/NereidsPlanner.java   | 166 ++++++++++++---------
 .../doris/nereids/minidump/MinidumpUtils.java      |   2 +-
 .../trees/plans/commands/AddConstraintCommand.java |   2 +-
 .../trees/plans/commands/CreateTableCommand.java   |   2 +-
 .../plans/commands/DropConstraintCommand.java      |   2 +-
 .../trees/plans/commands/info/AlterViewInfo.java   |   2 +-
 .../trees/plans/commands/info/CreateMTMVInfo.java  |   4 +-
 .../trees/plans/commands/info/CreateViewInfo.java  |   2 +-
 .../commands/info/MTMVPartitionDefinition.java     |   2 +-
 .../datasource/hive/HiveDDLAndDMLPlanTest.java     |   2 +-
 .../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 +-
 .../org/apache/doris/nereids/util/PlanChecker.java |   6 +-
 .../apache/doris/nereids/util/ReadLockTest.java    |  10 +-
 .../org/apache/doris/qe/OlapQueryCacheTest.java    |   2 +-
 24 files changed, 122 insertions(+), 104 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVCache.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVCache.java
index a6403b5892e..aceb453c2c3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVCache.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVCache.java
@@ -89,7 +89,7 @@ public class MTMVCache {
         }
         // Can not convert to table sink, because use the same column from 
different table when self join
         // the out slot is wrong
-        planner.plan(unboundMvPlan, PhysicalProperties.ANY, 
ExplainLevel.ALL_PLAN);
+        planner.planWithLock(unboundMvPlan, PhysicalProperties.ANY, 
ExplainLevel.ALL_PLAN);
         Plan originPlan = planner.getCascadesContext().getRewritePlan();
         // Eliminate result sink because sink operator is useless in query 
rewrite by materialized view
         // and the top sort can also be removed
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
index e1ad35aa758..cf80e58eb7e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
@@ -153,6 +153,6 @@ public class MTMVPlanUtil {
         StatementBase parsedStmt = statements.get(0);
         LogicalPlan logicalPlan = ((LogicalPlanAdapter) 
parsedStmt).getLogicalPlan();
         NereidsPlanner planner = new NereidsPlanner(ctx.getStatementContext());
-        return planner.plan(logicalPlan, PhysicalProperties.ANY, 
ExplainLevel.NONE);
+        return planner.planWithLock(logicalPlan, PhysicalProperties.ANY, 
ExplainLevel.NONE);
     }
 }
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 5853f7255d3..f607b6cf91e 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
@@ -72,6 +72,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.Consumer;
 import java.util.function.Function;
 
 /**
@@ -118,23 +119,23 @@ public class NereidsPlanner extends Planner {
         setParsedPlan(parsedPlan);
         PhysicalProperties requireProperties = buildInitRequireProperties();
         statementContext.getStopwatch().reset().start();
-        Plan resultPlan = null;
         try {
             boolean showPlanProcess = 
showPlanProcess(queryStmt.getExplainOptions());
-            resultPlan = plan(parsedPlan, requireProperties, explainLevel, 
showPlanProcess);
+            planWithLock(parsedPlan, requireProperties, explainLevel, 
showPlanProcess, plan -> {
+                setOptimizedPlan(plan);
+                if (explainLevel.isPlanLevel) {
+                    return;
+                }
+                physicalPlan = (PhysicalPlan) plan;
+                translate(physicalPlan);
+            });
         } finally {
             statementContext.getStopwatch().stop();
         }
-        setOptimizedPlan(resultPlan);
-        if (explainLevel.isPlanLevel) {
-            return;
-        }
-        physicalPlan = (PhysicalPlan) resultPlan;
-        translate(physicalPlan);
     }
 
     @VisibleForTesting
-    public void plan(StatementBase queryStmt) {
+    public void planWithLock(StatementBase queryStmt) {
         try {
             plan(queryStmt, 
statementContext.getConnectContext().getSessionVariable().toThrift());
         } catch (Exception e) {
@@ -142,12 +143,18 @@ public class NereidsPlanner extends Planner {
         }
     }
 
-    public PhysicalPlan plan(LogicalPlan plan, PhysicalProperties 
outputProperties) {
-        return (PhysicalPlan) plan(plan, outputProperties, ExplainLevel.NONE, 
false);
+    public PhysicalPlan planWithLock(LogicalPlan plan, PhysicalProperties 
outputProperties) {
+        return (PhysicalPlan) planWithLock(plan, outputProperties, 
ExplainLevel.NONE, false);
     }
 
-    public Plan plan(LogicalPlan plan, PhysicalProperties requireProperties, 
ExplainLevel explainLevel) {
-        return plan(plan, requireProperties, explainLevel, false);
+    public Plan planWithLock(LogicalPlan plan, PhysicalProperties 
requireProperties, ExplainLevel explainLevel) {
+        return planWithLock(plan, requireProperties, explainLevel, false);
+    }
+
+    public Plan planWithLock(LogicalPlan plan, PhysicalProperties 
requireProperties,
+            ExplainLevel explainLevel, boolean showPlanProcess) {
+        Consumer<Plan> noCallback = p -> {};
+        return planWithLock(plan, requireProperties, explainLevel, 
showPlanProcess, noCallback);
     }
 
     /**
@@ -155,11 +162,14 @@ public class NereidsPlanner extends Planner {
      *
      * @param plan wait for plan
      * @param requireProperties request physical properties constraints
+     * @param showPlanProcess is record plan process to CascadesContext
+     * @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, boolean showPlanProcess) {
+    public Plan planWithLock(LogicalPlan plan, PhysicalProperties 
requireProperties,
+                ExplainLevel explainLevel, boolean showPlanProcess,
+                Consumer<Plan> lockCallback) {
         try {
             if (plan instanceof LogicalSqlCache) {
                 rewrittenPlan = analyzedPlan = plan;
@@ -186,75 +196,83 @@ public class NereidsPlanner extends Planner {
             initCascadesContext(plan, requireProperties);
 
             try (Lock lock = new Lock(plan, cascadesContext)) {
-                // resolve column, table and function
-                // analyze this query
-                analyze(showAnalyzeProcess(explainLevel, showPlanProcess));
-                // minidump of input must be serialized first, this process 
ensure minidump string not null
-                try {
-                    MinidumpUtils.serializeInputsToDumpFile(plan, 
cascadesContext.getTables());
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
-                }
+                Plan resultPlan = planWithoutLock(plan, explainLevel, 
showPlanProcess, requireProperties);
+                lockCallback.accept(resultPlan);
+                return resultPlan;
+            }
+        } finally {
+            statementContext.releasePlannerResources();
+        }
+    }
 
-                if (statementContext.getConnectContext().getExecutor() != 
null) {
-                    
statementContext.getConnectContext().getExecutor().getSummaryProfile().setQueryAnalysisFinishTime();
-                    
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsAnalysisTime();
-                }
+    private Plan planWithoutLock(
+            LogicalPlan plan, ExplainLevel explainLevel,
+            boolean showPlanProcess, PhysicalProperties requireProperties) {
+        // resolve column, table and function
+        // analyze this query
+        analyze(showAnalyzeProcess(explainLevel, showPlanProcess));
+        // minidump of input must be serialized first, this process ensure 
minidump string not null
+        try {
+            MinidumpUtils.serializeInputsToDumpFile(plan, 
cascadesContext.getTables());
+        } 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().setQueryAnalysisFinishTime();
+            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsAnalysisTime();
+        }
 
-                // rule-based optimize
-                rewrite(showRewriteProcess(explainLevel, showPlanProcess));
-                if (statementContext.getConnectContext().getExecutor() != 
null) {
-                    
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsRewriteTime();
-                }
+        if (explainLevel == ExplainLevel.ANALYZED_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
+            analyzedPlan = cascadesContext.getRewritePlan();
+            if (explainLevel == ExplainLevel.ANALYZED_PLAN) {
+                return analyzedPlan;
+            }
+        }
 
-                if (explainLevel == ExplainLevel.REWRITTEN_PLAN || 
explainLevel == ExplainLevel.ALL_PLAN) {
-                    rewrittenPlan = cascadesContext.getRewritePlan();
-                    if (explainLevel == ExplainLevel.REWRITTEN_PLAN) {
-                        return rewrittenPlan;
-                    }
-                }
+        // rule-based optimize
+        rewrite(showRewriteProcess(explainLevel, showPlanProcess));
+        if (statementContext.getConnectContext().getExecutor() != null) {
+            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsRewriteTime();
+        }
 
-                optimize();
-                if (statementContext.getConnectContext().getExecutor() != 
null) {
-                    
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsOptimizeTime();
-                }
+        if (explainLevel == ExplainLevel.REWRITTEN_PLAN || explainLevel == 
ExplainLevel.ALL_PLAN) {
+            rewrittenPlan = cascadesContext.getRewritePlan();
+            if (explainLevel == ExplainLevel.REWRITTEN_PLAN) {
+                return rewrittenPlan;
+            }
+        }
 
-                // 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);
-                }
+        optimize();
+        if (statementContext.getConnectContext().getExecutor() != null) {
+            
statementContext.getConnectContext().getExecutor().getSummaryProfile().setNereidsOptimizeTime();
+        }
 
-                int nth = 
cascadesContext.getConnectContext().getSessionVariable().getNthOptimizedPlan();
-                PhysicalPlan physicalPlan = chooseNthPlan(getRoot(), 
requireProperties, nth);
+        // 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
-                MinidumpUtils.serializeOutputToDumpFile(physicalPlan);
-                NereidsTracer.output(statementContext.getConnectContext());
+        int nth = 
cascadesContext.getConnectContext().getSessionVariable().getNthOptimizedPlan();
+        PhysicalPlan physicalPlan = chooseNthPlan(getRoot(), 
requireProperties, nth);
 
-                return physicalPlan;
-            }
-        } finally {
-            statementContext.releasePlannerResources();
+        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
+        MinidumpUtils.serializeOutputToDumpFile(physicalPlan);
+        NereidsTracer.output(statementContext.getConnectContext());
+
+        return physicalPlan;
     }
 
     private LogicalPlan preprocess(LogicalPlan logicalPlan) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java
index bd64da6d470..8d6d9b0e794 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/minidump/MinidumpUtils.java
@@ -214,7 +214,7 @@ public class MinidumpUtils {
         }
         NereidsPlanner nereidsPlanner = new NereidsPlanner(
                 new StatementContext(ConnectContext.get(), new 
OriginStatement(sql, 0)));
-        nereidsPlanner.plan(LogicalPlanAdapter.of(parsed));
+        nereidsPlanner.planWithLock(LogicalPlanAdapter.of(parsed));
         return ((AbstractPlan) nereidsPlanner.getOptimizedPlan()).toJson();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
index 38bf71133c0..08954741c80 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
@@ -75,7 +75,7 @@ public class AddConstraintCommand extends Command implements 
ForwardWithSync {
 
     private Pair<ImmutableList<String>, TableIf> 
extractColumnsAndTable(ConnectContext ctx, LogicalPlan plan) {
         NereidsPlanner planner = new NereidsPlanner(ctx.getStatementContext());
-        Plan analyzedPlan = planner.plan(plan, PhysicalProperties.ANY, 
ExplainLevel.ANALYZED_PLAN);
+        Plan analyzedPlan = planner.planWithLock(plan, PhysicalProperties.ANY, 
ExplainLevel.ANALYZED_PLAN);
         Set<LogicalCatalogRelation> logicalCatalogRelationSet = analyzedPlan
                 .collect(LogicalCatalogRelation.class::isInstance);
         if (logicalCatalogRelationSet.size() != 1) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
index 38c92631d41..fe54a5dfd9f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
@@ -109,7 +109,7 @@ public class CreateTableCommand extends Command implements 
ForwardWithSync {
         NereidsPlanner planner = new NereidsPlanner(ctx.getStatementContext());
         // must disable constant folding by be, because be constant folding 
may return wrong type
         ctx.getSessionVariable().disableConstantFoldingByBEOnce();
-        Plan plan = planner.plan(new UnboundResultSink<>(query), 
PhysicalProperties.ANY, ExplainLevel.NONE);
+        Plan plan = planner.planWithLock(new UnboundResultSink<>(query), 
PhysicalProperties.ANY, ExplainLevel.NONE);
         if (ctasCols == null) {
             // we should analyze the plan firstly to get the columns' name.
             ctasCols = 
plan.getOutput().stream().map(NamedExpression::getName).collect(Collectors.toList());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
index 9878b0e9263..fe777ea8297 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
@@ -61,7 +61,7 @@ public class DropConstraintCommand extends Command implements 
ForwardWithSync {
 
     private TableIf extractTable(ConnectContext ctx, LogicalPlan plan) {
         NereidsPlanner planner = new NereidsPlanner(ctx.getStatementContext());
-        Plan analyzedPlan = planner.plan(plan, PhysicalProperties.ANY, 
ExplainLevel.ANALYZED_PLAN);
+        Plan analyzedPlan = planner.planWithLock(plan, PhysicalProperties.ANY, 
ExplainLevel.ANALYZED_PLAN);
         Set<LogicalCatalogRelation> logicalCatalogRelationSet = analyzedPlan
                 .collect(LogicalCatalogRelation.class::isInstance);
         if (logicalCatalogRelationSet.size() != 1) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
index 7627f89d75d..ac9a18082b1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
@@ -85,7 +85,7 @@ public class AlterViewInfo extends BaseViewInfo {
     /**validate*/
     public void validate(ConnectContext ctx) throws UserException {
         NereidsPlanner planner = new NereidsPlanner(ctx.getStatementContext());
-        planner.plan(new UnboundResultSink<>(logicalQuery), 
PhysicalProperties.ANY, ExplainLevel.NONE);
+        planner.planWithLock(new UnboundResultSink<>(logicalQuery), 
PhysicalProperties.ANY, ExplainLevel.NONE);
         Set<String> colSets = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
         for (Column col : finalCols) {
             if (!colSets.add(col.getName())) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
index 8bd90673f24..c65d6b6ded8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java
@@ -209,7 +209,7 @@ public class CreateMTMVInfo {
         LogicalSink<Plan> logicalSink = new UnboundResultSink<>(logicalQuery);
         // must disable constant folding by be, because be constant folding 
may return wrong type
         ctx.getSessionVariable().disableConstantFoldingByBEOnce();
-        Plan plan = planner.plan(logicalSink, PhysicalProperties.ANY, 
ExplainLevel.ALL_PLAN);
+        Plan plan = planner.planWithLock(logicalSink, PhysicalProperties.ANY, 
ExplainLevel.ALL_PLAN);
         if (plan.anyMatch(node -> node instanceof OneRowRelation)) {
             throw new AnalysisException("at least contain one table");
         }
@@ -280,7 +280,7 @@ public class CreateMTMVInfo {
         }
         Plan plan;
         try {
-            plan = planner.plan(logicalQuery, PhysicalProperties.ANY, 
ExplainLevel.NONE);
+            plan = planner.planWithLock(logicalQuery, PhysicalProperties.ANY, 
ExplainLevel.NONE);
         } finally {
             sessionVariable.setDisableNereidsRules(String.join(",", 
tempDisableRules));
             
ctx.getStatementContext().invalidCache(SessionVariable.DISABLE_NEREIDS_RULES);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
index 17931f9e628..8279a311030 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
@@ -78,7 +78,7 @@ public class CreateViewInfo extends BaseViewInfo {
                     PrivPredicate.CREATE.getPrivs().toString(), 
viewName.getTbl());
         }
         NereidsPlanner planner = new NereidsPlanner(ctx.getStatementContext());
-        planner.plan(new UnboundResultSink<>(logicalQuery), 
PhysicalProperties.ANY, ExplainLevel.NONE);
+        planner.planWithLock(new UnboundResultSink<>(logicalQuery), 
PhysicalProperties.ANY, ExplainLevel.NONE);
         Set<String> colSets = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
         for (Column col : finalCols) {
             if (!colSets.add(col.getName())) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/MTMVPartitionDefinition.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/MTMVPartitionDefinition.java
index 2c5cbb4649e..427e2368e7a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/MTMVPartitionDefinition.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/MTMVPartitionDefinition.java
@@ -137,7 +137,7 @@ public class MTMVPartitionDefinition {
         
cascadesContext.getStatementContext().invalidCache(SessionVariable.DISABLE_NEREIDS_RULES);
         try {
             Plan mvRewrittenPlan =
-                    planner.plan(logicalQuery, PhysicalProperties.ANY, 
ExplainLevel.REWRITTEN_PLAN);
+                    planner.planWithLock(logicalQuery, PhysicalProperties.ANY, 
ExplainLevel.REWRITTEN_PLAN);
             RelatedTableInfo relatedTableInfo = MaterializedViewUtils
                     .getRelatedTableInfo(partitionColName, timeUnit, 
mvRewrittenPlan, cascadesContext);
             if (!relatedTableInfo.isPctPossible()) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/hive/HiveDDLAndDMLPlanTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/hive/HiveDDLAndDMLPlanTest.java
index fcf647b2d03..a40a4fed385 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/hive/HiveDDLAndDMLPlanTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/hive/HiveDDLAndDMLPlanTest.java
@@ -610,7 +610,7 @@ public class HiveDDLAndDMLPlanTest extends 
TestWithFeService {
         }
         Assertions.assertTrue(exPlan instanceof UnboundLogicalSink);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        return planner.plan((UnboundLogicalSink<?>) exPlan, 
physicalProperties);
+        return planner.planWithLock((UnboundLogicalSink<?>) exPlan, 
physicalProperties);
     }
 
     @Test
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 8031516ff5e..c202230ce82 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
@@ -94,7 +94,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 db56b16e6f4..138db44863f 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 a8f9543f182..258f9ace453 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
@@ -137,7 +137,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 4370298d6c9..f9907e2088a 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 d55a034710a..7d2cb54d33e 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
@@ -101,7 +101,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 de73470d59b..d4756746e98 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
@@ -140,7 +140,7 @@ public class ExplainInsertCommandTest extends 
TestWithFeService {
         NereidsPlanner planner = new NereidsPlanner(statementContext);
         LogicalPlan logicalPlan = (LogicalPlan) ((Explainable) 
(((ExplainCommand) parser.parseSingle(sql))
                 .getLogicalPlan())).getExplainPlan(connectContext);
-        PhysicalPlan plan = planner.plan(logicalPlan, PhysicalProperties.ANY);
+        PhysicalPlan plan = planner.planWithLock(logicalPlan, 
PhysicalProperties.ANY);
         return new PhysicalPlanTranslator(new 
PlanTranslatorContext(planner.getCascadesContext())).translatePlan(plan);
     }
 }
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 f8f59fa4e62..6a10110cf90 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/PlanChecker.java 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanChecker.java
index fdce1c0b9af..3d908214062 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanChecker.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanChecker.java
@@ -181,7 +181,7 @@ public class PlanChecker {
         LogicalPlan command = parser.parseSingle(sql);
         NereidsPlanner planner = new NereidsPlanner(
                 new StatementContext(connectContext, new OriginStatement(sql, 
0)));
-        planner.plan(command, PhysicalProperties.ANY, ExplainLevel.ALL_PLAN, 
true);
+        planner.planWithLock(command, PhysicalProperties.ANY, 
ExplainLevel.ALL_PLAN, true);
         this.cascadesContext = planner.getCascadesContext();
         return cascadesContext.getPlanProcesses();
     }
@@ -560,7 +560,7 @@ public class PlanChecker {
                 new StatementContext(connectContext, new OriginStatement(sql, 
0)));
         LogicalPlanAdapter adapter = LogicalPlanAdapter.of(parsed);
         adapter.setIsExplain(new ExplainOptions(ExplainLevel.ALL_PLAN, false));
-        nereidsPlanner.plan(adapter);
+        nereidsPlanner.planWithLock(adapter);
         consumer.accept(nereidsPlanner);
         return this;
     }
@@ -569,7 +569,7 @@ public class PlanChecker {
         LogicalPlan parsed = new NereidsParser().parseSingle(sql);
         NereidsPlanner nereidsPlanner = new NereidsPlanner(
                 new StatementContext(connectContext, new OriginStatement(sql, 
0)));
-        nereidsPlanner.plan(LogicalPlanAdapter.of(parsed));
+        nereidsPlanner.planWithLock(LogicalPlanAdapter.of(parsed));
         consumer.accept(nereidsPlanner);
         return this;
     }
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 7bcbecafb02..9283b286f41 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
         );
@@ -113,7 +113,7 @@ public class ReadLockTest extends SSBTestBase {
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         InsertIntoTableCommand insertIntoTableCommand = 
(InsertIntoTableCommand) parser.parseSingle(sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);
-        planner.plan(
+        planner.planWithLock(
                 (LogicalPlan) 
insertIntoTableCommand.getExplainPlan(connectContext),
                 PhysicalProperties.ANY
         );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
index 86a1bc17834..18dee386c8c 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
@@ -514,7 +514,7 @@ public class OlapQueryCacheTest {
             ctx.setStatementContext(statementContext);
             NereidsPlanner nereidsPlanner = new 
NereidsPlanner(statementContext);
             LogicalPlanAdapter adapter = new LogicalPlanAdapter(plan, 
statementContext);
-            nereidsPlanner.plan(adapter);
+            nereidsPlanner.planWithLock(adapter);
             statementContext.setParsedStatement(adapter);
             stmt = adapter;
         } catch (Throwable throwable) {


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


Reply via email to