Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
In MiniKMS, there is potential data race when create jetty server in createJettyServer. It looks like the code searches for a free port and then starts jetty, but maybe there's enough of a race condition between port location and jetty.start to cause intermittent failures.
ServerSocket ss = new ServerSocket((inPort < 0) ? 0 : inPort, 50, localhost); int port = ss.getLocalPort(); Server server = new Server(0); if (!ssl) { server.getConnectors()[0].setHost(host); server.getConnectors()[0].setPort(port); } else { ... c.setPort(port);
We've seen test failures saying java.net.BindException: Address already in use, e.g. https://builds.apache.org/job/PreCommit-HDFS-Build/12942/testReport/
As in HADOOP-12417, we should always bind port 0 which gives us an ephemeral port, instead of searching a free port before starting jetty.