aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/scala
diff options
context:
space:
mode:
authorRyan Blue <blue@apache.org>2016-04-20 11:26:42 +0100
committerSean Owen <sowen@cloudera.com>2016-04-20 11:26:42 +0100
commita3451119d951949f24f3a4c5e33a5daea615dfed (patch)
tree5413972266a7932444e0b3ffa6fb258a00b6dfcf /core/src/main/scala
parent7abe9a6578a99f4df50040d5cfe083c389c7b97f (diff)
downloadspark-a3451119d951949f24f3a4c5e33a5daea615dfed.tar.gz
spark-a3451119d951949f24f3a4c5e33a5daea615dfed.tar.bz2
spark-a3451119d951949f24f3a4c5e33a5daea615dfed.zip
[SPARK-14679][UI] Fix UI DAG visualization OOM.
## What changes were proposed in this pull request? The DAG visualization can cause an OOM when generating the DOT file. This happens because clusters are not correctly deduped by a contains check because they use the default equals implementation. This adds a working equals implementation. ## How was this patch tested? This adds a test suite that checks the new equals implementation. Author: Ryan Blue <blue@apache.org> Closes #12437 from rdblue/SPARK-14679-fix-ui-oom.
Diffstat (limited to 'core/src/main/scala')
-rw-r--r--core/src/main/scala/org/apache/spark/ui/scope/RDDOperationGraph.scala18
1 files changed, 18 insertions, 0 deletions
diff --git a/core/src/main/scala/org/apache/spark/ui/scope/RDDOperationGraph.scala b/core/src/main/scala/org/apache/spark/ui/scope/RDDOperationGraph.scala
index bb6b663f1e..84ca750e1a 100644
--- a/core/src/main/scala/org/apache/spark/ui/scope/RDDOperationGraph.scala
+++ b/core/src/main/scala/org/apache/spark/ui/scope/RDDOperationGraph.scala
@@ -17,6 +17,8 @@
package org.apache.spark.ui.scope
+import java.util.Objects
+
import scala.collection.mutable
import scala.collection.mutable.{ListBuffer, StringBuilder}
@@ -72,6 +74,22 @@ private[ui] class RDDOperationCluster(val id: String, private var _name: String)
def getCachedNodes: Seq[RDDOperationNode] = {
_childNodes.filter(_.cached) ++ _childClusters.flatMap(_.getCachedNodes)
}
+
+ def canEqual(other: Any): Boolean = other.isInstanceOf[RDDOperationCluster]
+
+ override def equals(other: Any): Boolean = other match {
+ case that: RDDOperationCluster =>
+ (that canEqual this) &&
+ _childClusters == that._childClusters &&
+ id == that.id &&
+ _name == that._name
+ case _ => false
+ }
+
+ override def hashCode(): Int = {
+ val state = Seq(_childClusters, id, _name)
+ state.map(Objects.hashCode).foldLeft(0)((a, b) => 31 * a + b)
+ }
}
private[ui] object RDDOperationGraph extends Logging {