RFR: 8347597: HttpClient: improve exception reporting when closing connection [v2]

Daniel Fuchs dfuchs at openjdk.org
Tue Jan 14 20:29:40 UTC 2025


On Tue, 14 Jan 2025 09:52:59 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

>> Daniel Fuchs has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Review feedback from @japai
>
> src/java.net.http/share/classes/jdk/internal/net/http/Http1Response.java line 334:
> 
>> 332:                 if (cf.isCompletedExceptionally()) {
>> 333:                     // if an error occurs during subscription
>> 334:                     connection.close(cf.exceptionNow());
> 
> `Future.exceptionNow()` (among other things) states that it will throw a `IllegalStateException` if the Future was cancelled. We do have a check for `cf.isCompletedExceptionally()` before invoking this method. However, the `CompletableFuture.isCompletedExceptionally()` states that it returns `true` even in the case of cancellation:
> 
>> Returns {@code true} if this CompletableFuture completed exceptionally, in any way. Possible causes include cancellation ...
> 
> So I suspect this call to `exceptionNow()` might need a rethink or some additional checks?

Good catch. I suspect the case where the CF is cancelled should not occur, but I have added a Utils.exceptionNow method to take care of this case just in case.

> test/jdk/java/net/httpclient/http2/ExpectContinueResetTest.java line 104:
> 
>> 102:             testThrowable = e.getCause();
>> 103:         }
>> 104:         assertNotNull(exception, "Request should have completed exceptionally but exception is null");
> 
> Unlike the `assertNotNull` on the next line, I think it might be better to replace this new `assertNotNull` with a `fail(...)` inside the try block immediately after the `performRequest()` call.

I see what you mean. I reworked that part.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23080#discussion_r1915543009
PR Review Comment: https://git.openjdk.org/jdk/pull/23080#discussion_r1915543383


More information about the net-dev mailing list