diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/StatsRecorder.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/StatsRecorder.java index e20f82c0ae5f..012efc3c05c7 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/StatsRecorder.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/StatsRecorder.java @@ -23,6 +23,10 @@ import java.util.HashMap; import java.util.Map; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Verify.verify; +import static java.lang.String.format; + public class StatsRecorder { private final Map, RuleStats> stats = new HashMap<>(); @@ -30,6 +34,7 @@ public class StatsRecorder public void registerAll(Collection> rules) { for (Rule rule : rules) { + checkArgument(!rule.getClass().isAnonymousClass()); stats.put(rule.getClass(), new RuleStats()); } } @@ -47,11 +52,17 @@ public void recordFailure(Rule rule) void export(MBeanExporter exporter) { for (Map.Entry, RuleStats> entry : stats.entrySet()) { + verify(!entry.getKey().getSimpleName().isEmpty()); String name = ObjectNames.builder(IterativeOptimizer.class) .withProperty("rule", entry.getKey().getSimpleName()) .build(); - exporter.export(name, entry.getValue()); + try { + exporter.export(name, entry.getValue()); + } + catch (RuntimeException e) { + throw new RuntimeException(format("Failed to export MBean with name '%s'", name), e); + } } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PreconditionRules.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PreconditionRules.java index 77b9af463dfd..b6f68a197c1a 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PreconditionRules.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PreconditionRules.java @@ -33,21 +33,31 @@ public static Rule checkRulesAreFiredBeforeAddExchangesRule() public static Rule checkPlanDoNotMatch(Pattern pattern, String message) { - requireNonNull(pattern, "pattern is null"); - requireNonNull(message, "message is null"); - - return new Rule() { - @Override - public Pattern getPattern() - { - return pattern; - } - - @Override - public Result apply(T node, Captures captures, Context context) - { - throw new IllegalStateException(message); - } - }; + return new CheckNoPlanNodeMatchesRule<>(pattern, message); + } + + private static class CheckNoPlanNodeMatchesRule + implements Rule + { + private final Pattern pattern; + private final String message; + + public CheckNoPlanNodeMatchesRule(Pattern pattern, String message) + { + this.pattern = requireNonNull(pattern, "pattern is null"); + this.message = requireNonNull(message, "message is null"); + } + + @Override + public Pattern getPattern() + { + return pattern; + } + + @Override + public Result apply(T node, Captures captures, Context context) + { + throw new IllegalStateException(message); + } } }