morrySnow commented on code in PR #13659:
URL: https://github.com/apache/doris/pull/13659#discussion_r1033613800


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java:
##########
@@ -29,6 +30,8 @@
  */
 public class StatementContext {
 
+    private static final EventChannel channel = 
EventChannel.getDefaultChannel().start();

Review Comment:
   why not put in EventChannel class?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java:
##########
@@ -79,4 +82,8 @@ public RelationId getNextRelationId() {
     public void setParsedStatement(StatementBase parsedStatement) {
         this.parsedStatement = parsedStatement;
     }
+
+    public static EventChannel getChannel() {
+        return channel;
+    }

Review Comment:
   if channle is global, we should not put it in statementContext



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/StatementContext.java:
##########
@@ -40,12 +43,12 @@ public class StatementContext {
     private StatementBase parsedStatement;
 
     public StatementContext() {
-        this.connectContext = ConnectContext.get();
+        setConnectContext(ConnectContext.get());
     }
 
     public StatementContext(ConnectContext connectContext, OriginStatement 
originStatement) {
-        this.connectContext = connectContext;
-        this.originStatement = originStatement;
+        setConnectContext(connectContext);
+        setOriginStatement(originStatement);

Review Comment:
   why change to set?



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/Job.java:
##########
@@ -88,48 +94,33 @@ public List<Rule> getValidRules(GroupExpression 
groupExpression, List<Rule> cand
 
     public abstract void execute() throws AnalysisException;
 
-    protected Optional<CopyInResult> invokeRewriteRuleWithTrace(Rule rule, 
Plan before, Group targetGroup) {
+    protected Optional<CopyInResult> invokeRewriteRuleWithTrace(Rule rule, 
Plan before, Group targetGroup,
+            EventProducer transformTracer) {
         context.onInvokeRule(rule.getRuleType());
-
-        String traceBefore = enableTrace ? getPlanTraceLog() : null;
+        COUNTER_TRACER.log(CounterEvent.of(Memo.getStateId(),
+                CounterType.EXPRESSION_TRANSFORM, targetGroup, 
targetGroup.getLogicalExpression(), before));
 
         List<Plan> afters = rule.transform(before, 
context.getCascadesContext());
         Preconditions.checkArgument(afters.size() == 1);
         Plan after = afters.get(0);
-
-        if (after != before) {
-            CopyInResult result = context.getCascadesContext()
-                    .getMemo()
-                    .copyIn(after, targetGroup, rule.isRewrite());
-
-            if ((result.generateNewExpression || 
result.correspondingExpression.getOwnerGroup() != targetGroup)
-                    && enableTrace) {
-                String traceAfter = getPlanTraceLog();
-                printTraceLog(rule, traceBefore, traceAfter);
-            }
-
-            return Optional.of(result);
+        if (after == before) {
+            return Optional.empty();
         }
 
-        return Optional.empty();
-    }
-
-    protected String getPlanTraceLog() {
-        return context.getCascadesContext()
+        CopyInResult result = context.getCascadesContext()
                 .getMemo()
-                .copyOut(false)
-                .treeString();
-    }
+                .copyIn(after, targetGroup, rule.isRewrite());
 
-    protected String getMemoTraceLog() {
-        return context.getCascadesContext()
-                .getMemo()
-                .getRoot()
-                .treeString();
+        if (result.generateNewExpression || 
result.correspondingExpression.getOwnerGroup() != targetGroup) {
+            
transformTracer.log(TransformEvent.of(targetGroup.getLogicalExpression(), 
before, afters,
+                            rule.getRuleType()), rule::isRewrite);
+        }
+
+        return Optional.of(result);
     }
 
-    protected void printTraceLog(Rule rule, String traceBefore, String 
traceAfter) {
-        logger.info("========== {} {} ==========\nbefore:\n{}\n\nafter:\n{}\n",
-                getClass().getSimpleName(), rule.getRuleType(), traceBefore, 
traceAfter);
+    protected void trace(GroupExpression groupExpression) {

Review Comment:
   this function name is too generalize. we should know trace what from 
function name. and need to add some comment to explain this function



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/Job.java:
##########
@@ -39,12 +46,15 @@
  * Abstract class for all job using for analyze and optimize query plan in 
Nereids.
  */
 public abstract class Job {
+    protected static final EventProducer COUNTER_TRACER = new 
EventProducer(CounterEvent.class,

Review Comment:
   add comment to each tracer in all job class to explain what it is trace for



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RewriteBottomUpJob.java:
##########
@@ -72,12 +79,14 @@ public void execute() throws AnalysisException {
             return;
         }
 
+        trace(logicalExpression);
         List<Rule> validRules = getValidRules(logicalExpression, rules);
         for (Rule rule : validRules) {
             GroupExpressionMatching groupExpressionMatching
                     = new GroupExpressionMatching(rule.getPattern(), 
logicalExpression);
             for (Plan before : groupExpressionMatching) {
-                Optional<CopyInResult> copyInResult = 
invokeRewriteRuleWithTrace(rule, before, group);
+                Optional<CopyInResult> copyInResult = 
invokeRewriteRuleWithTrace(rule, before, group,
+                        REWRITE_BOTTOM_UP_JOB_TRACER);

Review Comment:
   you could use a mixin interface to get the tracer from a method from this 
interface and to avoid this parameter.
   ```java
   RewriteBottomUpJob extends Job implements TracerSupplier {
       ...
   }
   
   interface TracerSupplier {
       EventProducer getTracer();
   }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to