@@ -24,10 +24,6 @@ import org.scalatest.{BeforeAndAfterAll, FunSuite}
24
24
import org .apache .spark .{SparkContext , SparkException }
25
25
import org .apache .spark .serializer .SerializerInstance
26
26
27
- // TODO: REMOVE ME
28
- import java .util .Properties
29
- import org .apache .log4j .PropertyConfigurator
30
-
31
27
/**
32
28
* Another test suite for the closure cleaner that is finer-grained.
33
29
* For tests involving end-to-end Spark jobs, see {{ClosureCleanerSuite}}.
@@ -56,6 +52,7 @@ class ClosureCleanerSuite2 extends FunSuite with BeforeAndAfterAll {
56
52
private def someSerializableMethod () = 1
57
53
private def someNonSerializableMethod () = new NonSerializable
58
54
55
+ /** Assert that the given closure is serializable (or not). */
59
56
private def assertSerializable (closure : AnyRef , serializable : Boolean ): Unit = {
60
57
if (serializable) {
61
58
closureSerializer.serialize(closure)
@@ -66,6 +63,10 @@ class ClosureCleanerSuite2 extends FunSuite with BeforeAndAfterAll {
66
63
}
67
64
}
68
65
66
+ /**
67
+ * Helper method for testing whether closure cleaning works as expected.
68
+ * This cleans the given closure twice, with and without transitive cleaning.
69
+ */
69
70
private def testClean (
70
71
closure : AnyRef ,
71
72
serializableBefore : Boolean ,
@@ -74,6 +75,7 @@ class ClosureCleanerSuite2 extends FunSuite with BeforeAndAfterAll {
74
75
testClean(closure, serializableBefore, serializableAfter, transitive = false )
75
76
}
76
77
78
+ /** Helper method for testing whether closure cleaning works as expected. */
77
79
private def testClean (
78
80
closure : AnyRef ,
79
81
serializableBefore : Boolean ,
@@ -266,26 +268,18 @@ class ClosureCleanerSuite2 extends FunSuite with BeforeAndAfterAll {
266
268
testClean(inner2, serializableBefore = false , serializableAfter = true , transitive = true )
267
269
}
268
270
271
+ // Same as above, but with more levels of nesting
272
+ val test3 = () => { () => test1() }
273
+ val test4 = () => { () => test2() }
274
+ val test5 = () => { () => { () => test3() } }
275
+ val test6 = () => { () => { () => test4() } }
276
+
269
277
test1()
270
278
test2()
271
- }
272
-
273
-
274
-
275
-
276
-
277
- // TODO: REMOVE ME
278
- configureLog4j()
279
- private def configureLog4j (): Unit = {
280
- val pro = new Properties ()
281
- pro.put(" log4j.rootLogger" , " WARN, console" )
282
- pro.put(" log4j.appender.console" , " org.apache.log4j.ConsoleAppender" )
283
- pro.put(" log4j.appender.console.target" , " System.err" )
284
- pro.put(" log4j.appender.console.layout" , " org.apache.log4j.PatternLayout" )
285
- pro.put(" log4j.appender.console.layout.ConversionPattern" ,
286
- " %d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n" )
287
- pro.put(" log4j.logger.org.apache.spark.util.ClosureCleaner" , " DEBUG" )
288
- PropertyConfigurator .configure(pro)
279
+ test3()()
280
+ test4()()
281
+ test5()()()
282
+ test6()()()
289
283
}
290
284
291
285
}
0 commit comments