RFR: 8304065: HttpServer.stop should terminate immediately if no exchanges are in progress

Daniel Fuchs dfuchs at openjdk.org
Tue May 20 17:20:54 UTC 2025


On Tue, 20 May 2025 15:51:50 GMT, Mikhail Yankelevich <myankelevich at openjdk.org> wrote:

> HttpServer::stop will terminate the server immidiately after all exhcnages are complete.
> If the exchanges take longer then the specified delay it will terminate straight after the delay, the same as the previous behaviour.
> 
> Used to wait until the delay is complete at all times, regardless of the number of active exchanges.
> 
> Tests based on @eirbjo work, so adding Eirik as a contributor.

test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 128:

> 126: 
> 127:         // Time the shutdown sequence
> 128:         final Duration delayDuration = Duration.ofSeconds(2);

We should use a greater margin here since we're not expecting to wait for that duration, and probably use `Utils.adjustTimeout()` too. I'd suggest something like:

Suggestion:

        final Duration delayDuration = Duration.ofSeconds(Utils.adjustTimeout(5));

test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 160:

> 158:         // Complete the exchange 10 second into the future.
> 159:         // Runs in parallel, so won't block the server stop
> 160:         final Duration exchangeDuration = Duration.ofSeconds(10);

Suggestion:

        final Duration exchangeDuration = Duration.ofSeconds(Utils.adjustTimeout(5));

test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 190:

> 188:     public void noActiveExchanges() {
> 189:         // With no active exchanges, shutdown should complete immediately
> 190:         final Duration delayDuration = Duration.ofSeconds(1);

Suggestion:

        final Duration delayDuration = Duration.ofSeconds(Utils.adjustTimeout(5));

test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 207:

> 205:         timeShutdown(delayDuration);
> 206:         log("Shutting down the server the second time");
> 207:         timeShutdown(delayDuration);

Should we check the time it took the server to shutdown here too?

test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 228:

> 226:                 .uri(URI.create("http://"
> 227:                                 + server.getAddress().getAddress().getHostAddress()
> 228:                                 + ":" + server.getAddress().getPort() + "/"))

We should use `URIBuilder` here to take care of IPv4 vs IPv6 etc...

test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 238:

> 236:                     // count the latch down to allow the handler to complete
> 237:                     // and the server's dispatcher thread to proceed; The handler
> 238:                     // is called withing the dispatcher thread since we haven't

Suggestion:

                    // is called within the dispatcher thread since we haven't

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2098475385
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2098478903
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2098481789
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2098485308
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2098488908
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2098489836


More information about the net-dev mailing list