Greg Harris created KAFKA-15815: ----------------------------------- Summary: JsonRestServer leaks sockets via HttpURLConnection when keep-alive enabled Key: KAFKA-15815 URL: https://issues.apache.org/jira/browse/KAFKA-15815 Project: Kafka Issue Type: Bug Affects Versions: 3.6.0 Reporter: Greg Harris
By default HttpURLConnection has keep-alive enabled, which allows a single HttpURLConnection to be left open in order to be re-used for later requests. This means that despite JsonRestServer calling `close()` on the relevant InputStream, and calling `disconnect()` on the connection itself, the HttpURLConnection does not call `close()` on the underlying socket. This affects the Trogdor AgentTest and CoordinatorTest suites, where most of the methods make HTTP requests using the JsonRestServer. The effect is that ~32 sockets are leaked per test run, all remaining in the CLOSE_WAIT state (half closed) after the test. This is because the JettyServer has correctly closed the connections, but the HttpURLConnection has not. There does not appear to be a way to locally override the HttpURLConnection's behavior in this case, and only disabling keep-alive overall (via the system property `http.keepAlive=false`) seems to resolve the socket leaks. To prevent the leaks, we can move JsonRestServer to an alternative HTTP implementation, perhaps the jetty-client that Connect uses, or disable keepAlive during tests. -- This message was sent by Atlassian Jira (v8.20.10#820010)