8238270: java.net HTTP/2 client does not decrease stream count when receives 204 response

Daniel Fuchs daniel.fuchs at oracle.com
Thu Apr 16 18:10:01 UTC 2020


Hi Chris,

>> The fix ensures that any pending data frame will still be processed
>> after 204 has been received - thus triggering the logic that
>> eventually closes the stream.
> 
> I suppose that a 204 response MUST have an END_STREAM
> in its final HEADERS / CONTINUATION frame, right?

I have rescanned the RFC. I could not find a definitive answer to
that question. AFAIU it's expected that the HEADERS frame will
carry the END_STREAM - but there is some sibylline text that let
me think that having an empty DATA frame carrying the END_STREAM
would be OK too:

<<< A response
    that is defined to have no payload, as described in [RFC7230],
    Section 3.3.2, can have a non-zero content-length header field, even
    though no content is included in DATA frames. >>>

> It is allowable for a HEADERS frame to carry an END_STREAM,
> but not an END_HEADERS. If this happens, then CONTINUATION
> frames must follow, the last of which will carry END_HEADERS.
> That probably explains why the END_STREAM handling is done
> the way that it is.

Yes. And the CONTINUATION frame is not supposed to carry the
END_STREAM - so we can see END_STREAM before END_HEADERS.
Therefore I have removed my changes to HeaderFrame.java.
Code inspection shows that we might not deal with that situation
properly - so I have logged https://bugs.openjdk.java.net/browse/JDK-8242999
to follow up on this.

> The new test is good, but has an unnecessary reference to
> AbstractThrowingSubscribers.TestExecutor.
>> https://bugs.openjdk.java.net/browse/JDK-8238270

Done.

New webrev: http://cr.openjdk.java.net/~dfuchs/webrev_8238270/webrev.01/

best regards, and thanks for the valuable feedback!

-- daniel

>>
>> webrev:
>> http://cr.openjdk.java.net/~dfuchs/webrev_8238270/webrev.00/index.html



More information about the net-dev mailing list