Skip to content
Snippets Groups Projects
Commit 0a7091e6 authored by Andrew Or's avatar Andrew Or
Browse files

[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
parent a6e1712f
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletRequest ...@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletRequest
import scala.io.Source import scala.io.Source
import scala.util.{Failure, Success, Try} import scala.util.{Failure, Success, Try}
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.ServletContextHandler import org.eclipse.jetty.servlet.ServletContextHandler
import org.scalatest.FunSuite import org.scalatest.FunSuite
import org.scalatest.concurrent.Eventually._ import org.scalatest.concurrent.Eventually._
...@@ -108,14 +107,8 @@ class UISuite extends FunSuite { ...@@ -108,14 +107,8 @@ class UISuite extends FunSuite {
} }
test("jetty selects different port under contention") { test("jetty selects different port under contention") {
val startPort = 4040 val server = new ServerSocket(0)
val server = new Server(startPort) val startPort = server.getLocalPort
Try { server.start() } match {
case Success(s) =>
case Failure(e) =>
// Either case server port is busy hence setup for test complete
}
val serverInfo1 = JettyUtils.startJettyServer( val serverInfo1 = JettyUtils.startJettyServer(
"0.0.0.0", startPort, Seq[ServletContextHandler](), new SparkConf) "0.0.0.0", startPort, Seq[ServletContextHandler](), new SparkConf)
val serverInfo2 = JettyUtils.startJettyServer( val serverInfo2 = JettyUtils.startJettyServer(
...@@ -126,6 +119,9 @@ class UISuite extends FunSuite { ...@@ -126,6 +119,9 @@ class UISuite extends FunSuite {
assert(boundPort1 != startPort) assert(boundPort1 != startPort)
assert(boundPort2 != startPort) assert(boundPort2 != startPort)
assert(boundPort1 != boundPort2) assert(boundPort1 != boundPort2)
serverInfo1.server.stop()
serverInfo2.server.stop()
server.close()
} }
test("jetty binds to port 0 correctly") { test("jetty binds to port 0 correctly") {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment