aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorMichael Armbrust <michael@databricks.com>2014-05-03 18:38:44 -0700
committerReynold Xin <rxin@apache.org>2014-05-03 18:38:44 -0700
commitb295714708476b2904e205ac6dc58867e205546e (patch)
tree9b22a1440c94b15ea95a1e2f9311143a8b3a6302 /sql/catalyst
parent4669a84ab10296e01a5fbbae1de9574b793b7ed5 (diff)
downloadspark-b295714708476b2904e205ac6dc58867e205546e.tar.gz
spark-b295714708476b2904e205ac6dc58867e205546e.tar.bz2
spark-b295714708476b2904e205ac6dc58867e205546e.zip
[SQL] Better logging when applying rules.
Author: Michael Armbrust <michael@databricks.com> Closes #616 from marmbrus/ruleLogging and squashes the following commits: 39c09fe [Michael Armbrust] Fix off by one error. 5af3537 [Michael Armbrust] Better logging when applying rules.
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/rules/RuleExecutor.scala28
1 files changed, 24 insertions, 4 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/rules/RuleExecutor.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/rules/RuleExecutor.scala
index 9db96f89dd..e32adb76fe 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/rules/RuleExecutor.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/rules/RuleExecutor.scala
@@ -50,18 +50,18 @@ abstract class RuleExecutor[TreeType <: TreeNode[_]] extends Logging {
var curPlan = plan
batches.foreach { batch =>
+ val batchStartPlan = curPlan
var iteration = 1
var lastPlan = curPlan
- curPlan = batch.rules.foldLeft(curPlan) { case (plan, rule) => rule(plan) }
+ var continue = true
// Run until fix point (or the max number of iterations as specified in the strategy.
- while (iteration < batch.strategy.maxIterations && !curPlan.fastEquals(lastPlan)) {
- lastPlan = curPlan
+ while (continue) {
curPlan = batch.rules.foldLeft(curPlan) {
case (plan, rule) =>
val result = rule(plan)
if (!result.fastEquals(plan)) {
- logger.debug(
+ logger.trace(
s"""
|=== Applying Rule ${rule.ruleName} ===
|${sideBySide(plan.treeString, result.treeString).mkString("\n")}
@@ -71,6 +71,26 @@ abstract class RuleExecutor[TreeType <: TreeNode[_]] extends Logging {
result
}
iteration += 1
+ if (iteration > batch.strategy.maxIterations) {
+ logger.info(s"Max iterations ($iteration) reached for batch ${batch.name}")
+ continue = false
+ }
+
+ if (curPlan.fastEquals(lastPlan)) {
+ logger.trace(s"Fixed point reached for batch ${batch.name} after $iteration iterations.")
+ continue = false
+ }
+ lastPlan = curPlan
+ }
+
+ if (!batchStartPlan.fastEquals(curPlan)) {
+ logger.debug(
+ s"""
+ |=== Result of Batch ${batch.name} ===
+ |${sideBySide(plan.treeString, curPlan.treeString).mkString("\n")}
+ """.stripMargin)
+ } else {
+ logger.trace(s"Batch ${batch.name} has no effect.")
}
}