On Fri, 11 Mar 2022 10:12:46 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> src/java.net.http/share/classes/jdk/internal/net/http/Http2ClientImpl.java 
>> line 170:
>> 
>>> 168:             Http2Connection c1 = connections.putIfAbsent(key, c);
>>> 169:             if (c1 != null) {
>>> 170:                 c.setFinalStream();
>> 
>> This comment isn't related to the change in this PR, but is this a typo 
>> here? Should it instead be `c1.setFinalStream()`? Reading up on the 
>> `finalStream` javadoc in `Http2Connection` this flag indicates that no new 
>> streams should be opened on this connection and the connection should be 
>> closed once this final stream completes. Is that an accurate understanding?
>> There's an additional comment on top of this 
>> `Http2ClientImpl#offerConnection` which states:
>>>
>>> Cache the given connection, if no connection to the same
>> destination exists. If one exists, then we let the initial stream
>> complete but allow it to close itself upon completion.
>>    ...
>> 
>> So if I'm reading that last part correctly in that comment, what it seems to 
>> suggest is that we should be allow the initial connection (which is already 
>> in cache) to close on completion i.e. mark the `finalStream` flag on the 
>> previously cached connection, which in this case is `c1`. So I would expect 
>> this to be `c1.setFinalStream()` instead of `c.setFinalStream()`.
>> 
>> Am I misunderstanding this code and comments?
>
> It's not a typo: we want only one Http2Connection of the same type to a given 
> server in the pool (the key encodes the connection type). putIfAbsent returns 
> the previous connection. The logic is to close the *new* connection after the 
> first exchange completes. In other words: the first connection that gets into 
> the pool wins. Keep in mind that the Http2Connection pool is very different 
> to the HTTP/1.1 connection pool. Because HTTP/2 supports multiplexing, 
> Http2Connection stay in the pool until they are closed - the pool contains 
> *active* connections (whereas in HTTP/1.1 it contains *idle* connections).

Thank you - that helped.

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

PR: https://git.openjdk.java.net/jdk/pull/7776

Reply via email to