Skip to content

Commit

Permalink
Log detail name for RowExpressionRewriteRuleSet and StatsRecordingPla…
Browse files Browse the repository at this point in the history
…nOptimizer
  • Loading branch information
feilong-liu committed May 17, 2024
1 parent 08eed5a commit 568784e
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 25 deletions.
23 changes: 12 additions & 11 deletions presto-main/src/main/java/com/facebook/presto/sql/Optimizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,7 @@ public Plan validateAndOptimizePlan(PlanNode root, PlanStage stage)
PlanOptimizerResult optimizerResult = optimizer.optimize(root, session, TypeProvider.viewOf(variableAllocator.getVariables()), variableAllocator, idAllocator, warningCollector);
requireNonNull(optimizerResult, format("%s returned a null plan", optimizer.getClass().getName()));
if (enableVerboseRuntimeStats || trackOptimizerRuntime(session, optimizer)) {
String optimizerName = optimizer.getClass().getSimpleName();
if (optimizer instanceof StatsRecordingPlanOptimizer) {
optimizerName = format("%s:%s", optimizerName, ((StatsRecordingPlanOptimizer) optimizer).getDelegate().getClass().getSimpleName());
}
session.getRuntimeStats().addMetricValue(String.format("optimizer%sTimeNanos", optimizerName), NANO, System.nanoTime() - start);
session.getRuntimeStats().addMetricValue(String.format("optimizer%sTimeNanos", getOptimizerNameForLog(optimizer)), NANO, System.nanoTime() - start);
}
TypeProvider types = TypeProvider.viewOf(variableAllocator.getVariables());

Expand All @@ -146,11 +142,7 @@ private boolean trackOptimizerRuntime(Session session, PlanOptimizer optimizer)
return false;
}
List<String> optimizers = Splitter.on(",").trimResults().splitToList(optimizerString);
String optimizerName = optimizer.getClass().getSimpleName();
if (optimizer instanceof StatsRecordingPlanOptimizer) {
optimizerName = ((StatsRecordingPlanOptimizer) optimizer).getDelegate().getClass().getSimpleName();
}
return optimizers.contains(optimizerName);
return optimizers.contains(getOptimizerNameForLog(optimizer));
}

private StatsAndCosts computeStats(PlanNode root, TypeProvider types)
Expand All @@ -172,7 +164,7 @@ private void collectOptimizerInformation(PlanOptimizer optimizer, PlanNode oldNo
return;
}

String optimizerName = optimizer.getClass().getSimpleName();
String optimizerName = getOptimizerNameForLog(optimizer);
boolean isTriggered = planOptimizerResult.isOptimizerTriggered();
boolean isApplicable =
isTriggered ||
Expand All @@ -192,4 +184,13 @@ private void collectOptimizerInformation(PlanOptimizer optimizer, PlanNode oldNo
session.getOptimizerResultCollector().addOptimizerResult(optimizerName, oldNodeStr, newNodeStr);
}
}

private String getOptimizerNameForLog(PlanOptimizer optimizer)
{
String optimizerName = optimizer.getClass().getSimpleName();
if (optimizer instanceof StatsRecordingPlanOptimizer) {
optimizerName = format("%s:%s", optimizerName, ((StatsRecordingPlanOptimizer) optimizer).getDelegate().getClass().getSimpleName());
}
return optimizerName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.facebook.presto.sql.planner.PlannerUtils;
import com.facebook.presto.sql.planner.RuleStatsRecorder;
import com.facebook.presto.sql.planner.TypeProvider;
import com.facebook.presto.sql.planner.iterative.rule.RowExpressionRewriteRuleSet;
import com.facebook.presto.sql.planner.optimizations.PlanOptimizer;
import com.facebook.presto.sql.planner.optimizations.PlanOptimizerResult;
import com.google.common.base.Splitter;
Expand Down Expand Up @@ -179,7 +180,7 @@ private boolean exploreNode(int group, Context context, Matcher matcher)

if (!rule.isEnabled(context.session)) {
if (isVerboseOptimizerInfoEnabled(context.session) && isApplicable(node, rule, matcher, context)) {
context.addRulesApplicable(rule.getClass().getSimpleName());
context.addRulesApplicable(getNameOfOptimizerRule(rule));
}
continue;
}
Expand All @@ -198,7 +199,7 @@ private boolean exploreNode(int group, Context context, Matcher matcher)
transformedNode = transformedNode.assignStatsEquivalentPlanNode(node.getStatsEquivalentPlanNode());
}
}
context.addRulesTriggered(rule.getClass().getSimpleName(), node, transformedNode, rule.isCostBased(context.session), rule.getStatsSource());
context.addRulesTriggered(getNameOfOptimizerRule(rule), node, transformedNode, rule.isCostBased(context.session), rule.getStatsSource());
node = context.memo.replace(group, transformedNode, rule.getClass().getName());

done = false;
Expand All @@ -210,6 +211,15 @@ private boolean exploreNode(int group, Context context, Matcher matcher)
return progress;
}

private String getNameOfOptimizerRule(Rule<?> rule)
{
String ruleName = rule.getClass().getSimpleName();
if (rule instanceof RowExpressionRewriteRuleSet.RowExpressionRewriteRule) {
ruleName = ((RowExpressionRewriteRuleSet.RowExpressionRewriteRule) rule).getOptimizerNameForLog();
}
return ruleName;
}

private <T> Rule.Result transform(PlanNode node, Rule<T> rule, Matcher matcher, Context context)
{
Rule.Result result;
Expand All @@ -232,7 +242,7 @@ private <T> Rule.Result transform(PlanNode node, Rule<T> rule, Matcher matcher,
}
stats.record(rule, duration, !result.isEmpty());
if (SystemSessionProperties.isVerboseRuntimeStatsEnabled(context.session) || trackOptimizerRuntime(context.session, rule)) {
context.session.getRuntimeStats().addMetricValue(String.format("rule%sTimeNanos", rule.getClass().getSimpleName()), NANO, duration);
context.session.getRuntimeStats().addMetricValue(String.format("rule%sTimeNanos", getNameOfOptimizerRule(rule)), NANO, duration);
}

return result;
Expand All @@ -245,7 +255,7 @@ private boolean trackOptimizerRuntime(Session session, Rule rule)
return false;
}
List<String> optimizers = Splitter.on(",").trimResults().splitToList(optimizerString);
return optimizers.contains(rule.getClass().getSimpleName());
return optimizers.contains(getNameOfOptimizerRule(rule));
}

private <T> boolean isApplicable(PlanNode node, Rule<T> rule, Matcher matcher, Context context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableMap.builder;
import static java.lang.String.format;
import static java.util.Objects.requireNonNull;

public class RowExpressionRewriteRuleSet
Expand Down Expand Up @@ -141,8 +142,18 @@ public Rule<AggregationNode> aggregationRowExpressionRewriteRule()
return new AggregationRowExpressionRewrite();
}

public abstract class RowExpressionRewriteRule<T>
implements Rule<T>
{
public String getOptimizerNameForLog()
{
String rewriterName = rewriter.getClass().getName();
return format("%s:%s", rewriterName.substring(rewriterName.lastIndexOf('.') + 1), this.getClass().getSimpleName());
}
}

private final class ProjectRowExpressionRewrite
implements Rule<ProjectNode>
extends RowExpressionRewriteRule<ProjectNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -177,7 +188,7 @@ public Result apply(ProjectNode projectNode, Captures captures, Context context)
}

private final class SpatialJoinRowExpressionRewrite
implements Rule<SpatialJoinNode>
extends RowExpressionRewriteRule<SpatialJoinNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -215,7 +226,7 @@ public Result apply(SpatialJoinNode spatialJoinNode, Captures captures, Context
}

private final class JoinRowExpressionRewrite
implements Rule<JoinNode>
extends RowExpressionRewriteRule<JoinNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -259,7 +270,7 @@ public Result apply(JoinNode joinNode, Captures captures, Context context)
}

private final class WindowRowExpressionRewrite
implements Rule<WindowNode>
extends RowExpressionRewriteRule<WindowNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -316,7 +327,7 @@ public Result apply(WindowNode windowNode, Captures captures, Context context)
}

private final class ApplyRowExpressionRewrite
implements Rule<ApplyNode>
extends RowExpressionRewriteRule<ApplyNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -366,7 +377,7 @@ private Optional<Assignments> translateAssignments(Assignments assignments, Rule
}

private final class FilterRowExpressionRewrite
implements Rule<FilterNode>
extends RowExpressionRewriteRule<FilterNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -394,7 +405,7 @@ public Result apply(FilterNode filterNode, Captures captures, Context context)
}

private final class ValuesRowExpressionRewrite
implements Rule<ValuesNode>
extends RowExpressionRewriteRule<ValuesNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -432,7 +443,7 @@ public Result apply(ValuesNode valuesNode, Captures captures, Context context)
}

private final class AggregationRowExpressionRewrite
implements Rule<AggregationNode>
extends RowExpressionRewriteRule<AggregationNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -480,7 +491,7 @@ public Result apply(AggregationNode node, Captures captures, Context context)
}

private final class TableFinishRowExpressionRewrite
implements Rule<TableFinishNode>
extends RowExpressionRewriteRule<TableFinishNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -537,7 +548,7 @@ private Optional<StatisticAggregations> translateStatisticAggregation(StatisticA
}

private final class TableWriterRowExpressionRewrite
implements Rule<TableWriterNode>
extends RowExpressionRewriteRule<TableWriterNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down

0 comments on commit 568784e

Please sign in to comment.