RFR: 8350279: HttpClient: Add a new HttpResponse method to identify connections

Daniel Fuchs dfuchs at openjdk.org
Fri Mar 21 15:36:10 UTC 2025


On Fri, 21 Mar 2025 13:45:24 GMT, Volkan Yazici <vyazici at openjdk.org> wrote:

> Adds `HttpResponse::connectionLabel` method that provides an identifier for the connection.
> 
> **Implementation note:** The feature is facilitated by `HttpConnection::label`, which should not be confused with `HttpConnection::id`. This distinction is explained in the JavaDoc of both properties.

src/java.net.http/share/classes/jdk/internal/net/http/HttpResponseImpl.java line 47:

> 45: 
> 46:     final int responseCode;
> 47:     private final Optional<String> connectionLabel;

There's a precedent for `previousResponse` below, but we could fix that in a different cleanup PR, and avoid introducing new fields of type `Optional`.

Suggestion:

    private final String connectionLabel;

src/java.net.http/share/classes/jdk/internal/net/http/HttpResponseImpl.java line 63:

> 61:                             Exchange<T> exch) {
> 62:         this.responseCode = response.statusCode();
> 63:         this.connectionLabel = connectionLabel(exch);

Suggestion:

        this.connectionLabel = connectionLabel(exch).orElse(null);

src/java.net.http/share/classes/jdk/internal/net/http/HttpResponseImpl.java line 88:

> 86:             return Optional.empty();
> 87:         }
> 88:         return Optional.of(connection.label());

Suggestion:

        return Optional.ofNullable(exchange)
                                 .map(e -> e.exchImpl)
                                 .map(ExchangeImpl::connection)
                                 .map(HttpConnection::label);

src/java.net.http/share/classes/jdk/internal/net/http/HttpResponseImpl.java line 98:

> 96:     @Override
> 97:     public Optional<String> connectionLabel() {
> 98:         return connectionLabel;

Suggestion:

        return Optional.ofNullable(connectionLabel);

test/jdk/java/net/httpclient/HttpResponseConnectionLabelTest.java line 87:

> 85:     // Primary server-client pairs
> 86: 
> 87:     private static final ServerRequestPair PRI_HTTP1 = ServerRequestPair.of(HttpClient.Version.HTTP_1_1, false);

Add an import for `HttpClient.Version`

test/jdk/java/net/httpclient/HttpResponseConnectionLabelTest.java line 243:

> 241:         if (HttpClient.Version.HTTP_2.equals(pair.server.getVersion())) {
> 242:             return;
> 243:         }

Instead you could send a first request to warm-up the client/server and get a connection in the pool.
Then you could assert that if the version is HTTP/2, the connectionLabels are identical (instead of different)

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2007835413
PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2007833459
PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2007828641
PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2007836560
PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2007786550
PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2007803802


More information about the net-dev mailing list