aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Or <andrewor14@gmail.com>2014-09-16 16:03:20 -0700
committerAndrew Or <andrewor14@gmail.com>2014-09-16 16:03:20 -0700
commit0a7091e689a4c8b1e7b61e9f0873e6557f40d952 (patch)
tree3528a5e83cf3eb0820f60db1c83edc853af07305
parenta6e1712f1e9c36deb24c5073aa8edcfc047d76eb (diff)
downloadspark-0a7091e689a4c8b1e7b61e9f0873e6557f40d952.tar.gz
spark-0a7091e689a4c8b1e7b61e9f0873e6557f40d952.tar.bz2
spark-0a7091e689a4c8b1e7b61e9f0873e6557f40d952.zip
[SPARK-3555] Fix UISuite race condition
The test "jetty selects different port under contention" is flaky. If another process binds to 4040 before the test starts, then the first server we start there will fail, and the subsequent servers we start thereafter may successfully bind to 4040 if it was released between the servers starting. Instead, we should just let Java find a random free port for us and hold onto it for the duration of the test. Author: Andrew Or <andrewor14@gmail.com> Closes #2418 from andrewor14/fix-port-contention and squashes the following commits: 0cd4974 [Andrew Or] Stop them servers a7071fe [Andrew Or] Pick random port instead of 4040
-rw-r--r--core/src/test/scala/org/apache/spark/ui/UISuite.scala14
1 files changed, 5 insertions, 9 deletions
diff --git a/core/src/test/scala/org/apache/spark/ui/UISuite.scala b/core/src/test/scala/org/apache/spark/ui/UISuite.scala
index 48790b59e7..92a21f82f3 100644
--- a/core/src/test/scala/org/apache/spark/ui/UISuite.scala
+++ b/core/src/test/scala/org/apache/spark/ui/UISuite.scala
@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletRequest
import scala.io.Source
import scala.util.{Failure, Success, Try}
-import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.ServletContextHandler
import org.scalatest.FunSuite
import org.scalatest.concurrent.Eventually._
@@ -108,14 +107,8 @@ class UISuite extends FunSuite {
}
test("jetty selects different port under contention") {
- val startPort = 4040
- val server = new Server(startPort)
-
- Try { server.start() } match {
- case Success(s) =>
- case Failure(e) =>
- // Either case server port is busy hence setup for test complete
- }
+ val server = new ServerSocket(0)
+ val startPort = server.getLocalPort
val serverInfo1 = JettyUtils.startJettyServer(
"0.0.0.0", startPort, Seq[ServletContextHandler](), new SparkConf)
val serverInfo2 = JettyUtils.startJettyServer(
@@ -126,6 +119,9 @@ class UISuite extends FunSuite {
assert(boundPort1 != startPort)
assert(boundPort2 != startPort)
assert(boundPort1 != boundPort2)
+ serverInfo1.server.stop()
+ serverInfo2.server.stop()
+ server.close()
}
test("jetty binds to port 0 correctly") {