RFR: 8304065: HttpServer.stop should terminate immediately if no exchanges are in progress [v3]
Daniel Fuchs
dfuchs at openjdk.org
Thu May 22 11:24:58 UTC 2025
On Wed, 21 May 2025 16:50:28 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.
>
> Mikhail Yankelevich has updated the pull request incrementally with one additional commit since the last revision:
>
> cleanup
src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java line 228:
> 226:
> 227: public final boolean isFinishing() {
> 228: return finishedLatch.getCount()==0;
Suggestion:
return finishedLatch.getCount() == 0;
src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java line 238:
> 236: * but still stops as soon as maximum delay is reached.
> 237: *
> 238: * @param delay maximum delay in stopping the server
Suggestion:
* This ensures that the server is stopped immediately after all exchanges are complete. HttpConnections will be forcefully closed if active exchanges do not
* complete within the imparted delay.
*
* @param delay maximum delay to wait for exchanges completion, in seconds
src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java line 489:
> 487:
> 488: public void run() {
> 489: while (!isFinishing()) {
The name of the method is not great - but since it's pre-existing I'm OK with that.
Suggestion:
// isFinishing() will be true when there are no active exchange after terminating
while (!isFinishing()) {
test/jdk/com/sun/net/httpserver/ServerStopTerminationTest.java line 164:
> 162: // Complete the exchange 10 second into the future.
> 163: // Runs in parallel, so won't block the server stop
> 164: final Duration exchangeDuration = Duration.ofSeconds(Utils.adjustTimeout(5));
Let's use 10 since we're speaking about 10s everywhere. It doesn't really matter since we should finish way before 10 (unless the bug is present).
Suggestion:
final Duration exchangeDuration = Duration.ofSeconds(Utils.adjustTimeout(10));
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2102283879
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2102290292
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2102302993
PR Review Comment: https://git.openjdk.org/jdk/pull/25333#discussion_r2102312019
More information about the net-dev
mailing list