RFR: 8309200: java/net/httpclient/ExecutorShutdown fais intermittently, if connection closed during upgrade [v2]
Jaikiran Pai
jpai at openjdk.org
Fri Jun 2 08:31:10 UTC 2023
On Thu, 1 Jun 2023 11:09:37 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:
>> The ExecutorShutdown test has been observed failing intermittently, notably if by misfortune the shutdown sequence causes a connection to get aborted while upgrading. The issue is that the `ConnectionAborter` class that allows to mark the connection as being scheduled for closing before a handle to the connection is actually available isn't forwarding the original exception for which closing the connection was requested. When the connection is eventually closed, a generic `IOException: connection closed locally` is raised at the `SocketTube` level, which unfortunately can race with the original cause.
>>
>> The fix makes it possible to relay the original cause to the place where the IOException is raised, in order to set it as the cause of the new exception.
>
> Daniel Fuchs has updated the pull request incrementally with one additional commit since the last revision:
>
> Review feedback
The changes look fine to me. I have a minor comment about the code in the ConnectionAborter, which I've added inline. It's OK with me if you prefer to maintain it in its current form in the PR.
src/java.net.http/share/classes/jdk/internal/net/http/Exchange.java line 176:
> 174: } else {
> 175: this.connection = null;
> 176: this.cause = null;
Hello Daniel, I had to read this a few times to understand why we are resetting `this.cause`, which we potentially set a few lines above, to `null` here. From what I understand, we only want to set `this.cause` when the `connection` is `null`. Do you think this code could instead of written as:
Throwable cause;
synchronized (this) {
cause = this.cause;
if (cause == null) {
cause = error;
}
connection = this.connection;
if (connection == null) {
closeRequested = true;
this.cause = cause;
} else {
this.connection = null;
this.cause = null;
}
}
-------------
Marked as reviewed by jpai (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/14251#pullrequestreview-1456894820
PR Review Comment: https://git.openjdk.org/jdk/pull/14251#discussion_r1214079485
More information about the net-dev
mailing list