This is an automated email from the ASF dual-hosted git repository. jakevin 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 ce3c60d110a [refactor](Nereids): avoid ConnectContext.get() ASAP to improve proformance (#29952) ce3c60d110a is described below commit ce3c60d110af82c72c64a6ec9e9b902bdafbf5e6 Author: jakevin <jakevin...@gmail.com> AuthorDate: Mon Jan 15 10:00:47 2024 +0800 [refactor](Nereids): avoid ConnectContext.get() ASAP to improve proformance (#29952) --- .../org/apache/doris/nereids/cost/CostModelV1.java | 2 +- .../glue/translator/PhysicalPlanTranslator.java | 7 +++-- .../glue/translator/PlanTranslatorContext.java | 4 +++ .../java/org/apache/doris/nereids/jobs/Job.java | 5 +++ .../nereids/jobs/cascades/CostAndEnforcerJob.java | 5 --- .../org/apache/doris/nereids/metrics/Event.java | 7 +++-- .../doris/nereids/minidump/MinidumpUtils.java | 36 ++++++++++++---------- .../expression/rules/FoldConstantRuleOnFE.java | 2 +- .../doris/nereids/rules/rewrite/CTEInline.java | 7 +++-- .../org/apache/doris/nereids/trees/plans/Plan.java | 2 +- .../plans/commands/InsertIntoTableCommand.java | 4 +-- .../trees/plans/commands/info/AlterMTMVInfo.java | 4 +-- .../trees/plans/commands/info/CreateMTMVInfo.java | 4 +-- .../trees/plans/commands/info/DropMTMVInfo.java | 4 +-- .../trees/plans/commands/info/RefreshMTMVInfo.java | 4 +-- 15 files changed, 53 insertions(+), 44 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java index 011afb46fc2..d56a9d8be2a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java @@ -75,7 +75,7 @@ class CostModelV1 extends PlanVisitor<Cost, PlanContext> { beNumber = sessionVariable.getBeNumberForTest(); parallelInstance = 8; } else { - beNumber = Math.max(1, ConnectContext.get().getEnv().getClusterInfo().getBackendsNumber(true)); + beNumber = Math.max(1, connectContext.getEnv().getClusterInfo().getBackendsNumber(true)); parallelInstance = Math.max(1, connectContext.getSessionVariable().getParallelExecInstanceNum()); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 9f8f82ad679..6270c5795b3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -179,12 +179,12 @@ import org.apache.doris.planner.external.iceberg.IcebergScanNode; import org.apache.doris.planner.external.jdbc.JdbcScanNode; import org.apache.doris.planner.external.odbc.OdbcScanNode; import org.apache.doris.planner.external.paimon.PaimonScanNode; -import org.apache.doris.qe.ConnectContext; import org.apache.doris.statistics.StatisticConstants; import org.apache.doris.tablefunction.TableValuedFunctionIf; import org.apache.doris.thrift.TFetchOption; import org.apache.doris.thrift.TPartitionType; import org.apache.doris.thrift.TPushAggOp; +import org.apache.doris.thrift.TResultSinkType; import org.apache.doris.thrift.TRuntimeFilterType; import com.google.common.base.Preconditions; @@ -363,8 +363,9 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor<PlanFragment, Pla public PlanFragment visitPhysicalResultSink(PhysicalResultSink<? extends Plan> physicalResultSink, PlanTranslatorContext context) { PlanFragment planFragment = physicalResultSink.child().accept(this, context); - planFragment.setSink(new ResultSink(planFragment.getPlanRoot().getId(), - ConnectContext.get().getResultSinkType())); + TResultSinkType resultSinkType = context.getConnectContext() != null ? context.getConnectContext() + .getResultSinkType() : null; + planFragment.setSink(new ResultSink(planFragment.getPlanRoot().getId(), resultSinkType)); return planFragment; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java index 8f273d4ec08..77b386c79e3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java @@ -151,6 +151,10 @@ public class PlanTranslatorContext { return connectContext == null ? null : connectContext.getSessionVariable(); } + public ConnectContext getConnectContext() { + return connectContext; + } + public Set<ScanNode> getScanNodeWithUnknownColumnStats() { return statsUnknownColumnsMap.keySet(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/Job.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/Job.java index 0a355efd390..a9739cbb9e2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/Job.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/Job.java @@ -33,6 +33,7 @@ import org.apache.doris.nereids.rules.Rule; import org.apache.doris.nereids.rules.RuleSet; import org.apache.doris.nereids.trees.expressions.CTEId; import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.SessionVariable; import org.apache.doris.statistics.Statistics; @@ -84,6 +85,10 @@ public abstract class Job implements TracerSupplier { return once; } + public ConnectContext getConnectContext() { + return context.getCascadesContext().getConnectContext(); + } + public abstract void execute(); public EventProducer getEventTracer() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java index 8126a0aee01..101b3ca6670 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java @@ -31,7 +31,6 @@ import org.apache.doris.nereids.properties.ChildrenPropertiesRegulator; import org.apache.doris.nereids.properties.EnforceMissingPropertiesHelper; import org.apache.doris.nereids.properties.PhysicalProperties; import org.apache.doris.nereids.properties.RequestPropertyDeriver; -import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.SessionVariable; import com.google.common.collect.Lists; @@ -81,10 +80,6 @@ public class CostAndEnforcerJob extends Job implements Cloneable { this.groupExpression = groupExpression; } - private ConnectContext getConnectContext() { - return context.getCascadesContext().getConnectContext(); - } - private SessionVariable getSessionVariable() { return context.getCascadesContext().getConnectContext().getSessionVariable(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/metrics/Event.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/metrics/Event.java index 1a310766582..43061c4879f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/metrics/Event.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/metrics/Event.java @@ -35,9 +35,10 @@ public abstract class Event implements Cloneable { } protected static boolean checkConnectContext(Class<? extends Event> targetClass) { - return ConnectContext.get() != null - && ConnectContext.get().getSessionVariable().isEnableNereidsTrace() - && ConnectContext.get().getSessionVariable().getParsedNereidsEventMode().contains(targetClass); + ConnectContext connectContext = ConnectContext.get(); + return connectContext != null + && connectContext.getSessionVariable().isEnableNereidsTrace() + && connectContext.getSessionVariable().getParsedNereidsEventMode().contains(targetClass); } public final String toJson() { 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 b1a6865c901..4187e1fc4ce 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 @@ -290,14 +290,14 @@ public class MinidumpUtils { * serialize output plan to dump file and persistent into disk */ public static void serializeOutputToDumpFile(Plan resultPlan) { - if (ConnectContext.get().getSessionVariable().isPlayNereidsDump() - || !ConnectContext.get().getSessionVariable().isEnableMinidump()) { + ConnectContext connectContext = ConnectContext.get(); + if (connectContext.getSessionVariable().isPlayNereidsDump() + || !connectContext.getSessionVariable().isEnableMinidump()) { return; } - ConnectContext.get().getMinidump().put("ResultPlan", ((AbstractPlan) resultPlan).toJson()); - if (ConnectContext.get().getSessionVariable().isEnableMinidump()) { - saveMinidumpString(ConnectContext.get().getMinidump(), - DebugUtil.printId(ConnectContext.get().queryId())); + connectContext.getMinidump().put("ResultPlan", ((AbstractPlan) resultPlan).toJson()); + if (connectContext.getSessionVariable().isEnableMinidump()) { + saveMinidumpString(connectContext.getMinidump(), DebugUtil.printId(connectContext.queryId())); } } @@ -433,15 +433,16 @@ public class MinidumpUtils { * implementation of interface serializeInputsToDumpFile */ private static JSONObject serializeInputs(Plan parsedPlan, List<TableIf> tables) throws IOException { + ConnectContext connectContext = ConnectContext.get(); // Create a JSON object JSONObject jsonObj = new JSONObject(); - jsonObj.put("Sql", ConnectContext.get().getStatementContext().getOriginStatement().originStmt); + jsonObj.put("Sql", connectContext.getStatementContext().getOriginStatement().originStmt); // add session variable - int beNumber = ConnectContext.get().getEnv().getClusterInfo().getBackendsNumber(true); - ConnectContext.get().getSessionVariable().setBeNumberForTest(beNumber); - jsonObj.put("SessionVariable", serializeChangedSessionVariable(ConnectContext.get().getSessionVariable())); + int beNumber = connectContext.getEnv().getClusterInfo().getBackendsNumber(true); + connectContext.getSessionVariable().setBeNumberForTest(beNumber); + jsonObj.put("SessionVariable", serializeChangedSessionVariable(connectContext.getSessionVariable())); // add tables - jsonObj.put("DbName", ConnectContext.get().getDatabase()); + jsonObj.put("DbName", connectContext.getDatabase()); JSONArray tablesJson = serializeTables(tables); jsonObj.put("Tables", tablesJson); // add colocate table index, used to indicate grouping of table distribution @@ -461,19 +462,20 @@ public class MinidumpUtils { * @throws IOException this will write to disk, so io exception should be dealed with */ public static void serializeInputsToDumpFile(Plan parsedPlan, List<TableIf> tables) throws IOException { + ConnectContext connectContext = ConnectContext.get(); // when playing minidump file, we do not save input again. - if (ConnectContext.get().getSessionVariable().isPlayNereidsDump() - || !ConnectContext.get().getSessionVariable().isEnableMinidump()) { + if (connectContext.getSessionVariable().isPlayNereidsDump() + || !connectContext.getSessionVariable().isEnableMinidump()) { return; } - if (!ConnectContext.get().getSessionVariable().getMinidumpPath().equals("")) { - MinidumpUtils.DUMP_PATH = ConnectContext.get().getSessionVariable().getMinidumpPath(); + if (!connectContext.getSessionVariable().getMinidumpPath().equals("")) { + MinidumpUtils.DUMP_PATH = connectContext.getSessionVariable().getMinidumpPath(); } else { - ConnectContext.get().getSessionVariable().setMinidumpPath("defaultMinidumpPath"); + connectContext.getSessionVariable().setMinidumpPath("defaultMinidumpPath"); } MinidumpUtils.init(); - ConnectContext.get().setMinidump(serializeInputs(parsedPlan, tables)); + connectContext.setMinidump(serializeInputs(parsedPlan, tables)); } /** diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java index 9988a34da42..8d56dde938e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java @@ -121,7 +121,7 @@ public class FoldConstantRuleOnFE extends AbstractExpressionRewriteRule { @Override public Expression visitEncryptKeyRef(EncryptKeyRef encryptKeyRef, ExpressionRewriteContext context) { String dbName = encryptKeyRef.getDbName(); - ConnectContext connectContext = ConnectContext.get(); + ConnectContext connectContext = context.cascadesContext.getConnectContext(); if (Strings.isNullOrEmpty(dbName)) { dbName = connectContext.getDatabase(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CTEInline.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CTEInline.java index 6b4de6d0f9a..e0c2c3da171 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CTEInline.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CTEInline.java @@ -78,9 +78,10 @@ public class CTEInline extends DefaultPlanRewriter<LogicalCTEProducer<?>> implem } return false; }); - if (ConnectContext.get().getSessionVariable().getEnablePipelineEngine() - && ConnectContext.get().getSessionVariable().enableCTEMaterialize - && consumers.size() > ConnectContext.get().getSessionVariable().inlineCTEReferencedThreshold) { + ConnectContext connectContext = ConnectContext.get(); + if (connectContext.getSessionVariable().getEnablePipelineEngine() + && connectContext.getSessionVariable().enableCTEMaterialize + && consumers.size() > connectContext.getSessionVariable().inlineCTEReferencedThreshold) { // not inline Plan right = cteAnchor.right().accept(this, null); return cteAnchor.withChildren(cteAnchor.left(), right); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java index aa87de0fcab..f31c6e97a03 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java @@ -165,7 +165,7 @@ public interface Plan extends TreeNode<Plan> { StringBuilder builder = new StringBuilder(); String me = this.getClass().getSimpleName(); String prefixTail = ""; - if (! ConnectContext.get().getSessionVariable().getIgnoreShapePlanNodes().contains(me)) { + if (!ConnectContext.get().getSessionVariable().getIgnoreShapePlanNodes().contains(me)) { builder.append(prefix).append(shapeInfo()).append("\n"); prefixTail += "--"; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java index d50ee2096ca..c1ec90fff73 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java @@ -251,8 +251,8 @@ public class InsertIntoTableCommand extends Command implements ForwardWithSync, || ctx.getSessionVariable().isEnableUniqueKeyPartialUpdate()) { return false; } - return ConnectContext.get().getSessionVariable().getSqlMode() != SqlModeHelper.MODE_NO_BACKSLASH_ESCAPES - && physicalOlapTableSink.getTargetTable() instanceof OlapTable && !ConnectContext.get().isTxnModel() + return ctx.getSessionVariable().getSqlMode() != SqlModeHelper.MODE_NO_BACKSLASH_ESCAPES + && physicalOlapTableSink.getTargetTable() instanceof OlapTable && !ctx.isTxnModel() && sink.getFragment().getPlanRoot() instanceof UnionNode && physicalOlapTableSink.getPartitionIds() .isEmpty() && physicalOlapTableSink.getTargetTable().getTableProperty().getUseSchemaLightChange(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMTMVInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMTMVInfo.java index 542ebca6ac0..a2e96ee298d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMTMVInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMTMVInfo.java @@ -44,10 +44,10 @@ public abstract class AlterMTMVInfo { */ public void analyze(ConnectContext ctx) throws AnalysisException { mvName.analyze(ctx); - if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(), + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(), mvName.getTbl(), PrivPredicate.ALTER)) { String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("ALTER", - ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), + ctx.getQualifiedUser(), ctx.getRemoteIP(), mvName.getDb() + ": " + mvName.getTbl()); throw new AnalysisException(message); } 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 c7483a2c70c..40fc06a4434 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 @@ -140,10 +140,10 @@ public class CreateMTMVInfo { public void analyze(ConnectContext ctx) { // analyze table name mvName.analyze(ctx); - if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(), + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(), mvName.getTbl(), PrivPredicate.CREATE)) { String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("CREATE", - ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), + ctx.getQualifiedUser(), ctx.getRemoteIP(), mvName.getDb() + ": " + mvName.getTbl()); throw new AnalysisException(message); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropMTMVInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropMTMVInfo.java index 650df2c96c3..c64fb7cf67d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropMTMVInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropMTMVInfo.java @@ -46,10 +46,10 @@ public class DropMTMVInfo { */ public void analyze(ConnectContext ctx) { mvName.analyze(ctx); - if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(), + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(), mvName.getTbl(), PrivPredicate.DROP)) { String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("DROP", - ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), + ctx.getQualifiedUser(), ctx.getRemoteIP(), mvName.getDb() + ": " + mvName.getTbl()); throw new AnalysisException(message); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RefreshMTMVInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RefreshMTMVInfo.java index 315b30ae87d..f280e867819 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RefreshMTMVInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RefreshMTMVInfo.java @@ -56,10 +56,10 @@ public class RefreshMTMVInfo { */ public void analyze(ConnectContext ctx) { mvName.analyze(ctx); - if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(), + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(), mvName.getTbl(), PrivPredicate.CREATE)) { String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("CREATE", - ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), + ctx.getQualifiedUser(), ctx.getRemoteIP(), mvName.getDb() + ": " + mvName.getTbl()); throw new AnalysisException(message); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org