netty5/codec-http2/src/test/java/io/netty/handler/codec/http2
Scott Mitchell 53b2dea3f4
HTTP/2 child channel read cycle doesn't respect RecvByteBufAllocator and (#8147)
Motivation:
Http2MultiplexCodec queues data internally if data is delivered from the
parent channel but the child channel did not request data. If the parent
channel notifies of a stream closure it is possible data in the queue
will be discarded before closing the channel.
Http2MultiplexCodec interacts with RecvByteBufAllocator to control the
child channel's demand for read. However it currently only ever reads a
maximum of one time per loop. This can thrash the read loop and bloat
the call stack if auto read is on, because channelReadComplete will
re-enter the read loop synchronously, and also neglect to deliver data
during the parent's read loop (if it is active). This also meant the
readPendingQueue was not utilized as originally intended (to extend the
child channel's read loop during the parent channel's read loop if
demand for data still existed).

Modifications:
- Modify the child channel's read loop to respect the
RecvByteBufAllocator, and append to the parents readPendingQueue if
appropriate.
- Stream closure notification behaves like EPOLL and KQUEUE transports
and reads all queued data, because the data is already queued in memory
and it is known there will be no more data. This will also replenish the
connection flow control window which may otherwise be constrained by a
closed stream.

Result:
More correct read loop and less risk of dropping data.
2018-07-26 19:44:21 -04:00
..
AbstractWeightedFairQueueByteDistributorDependencyTest.java HTTP/2 support pending data larger than Integer.MAX_VALUE 2017-12-20 08:55:15 -08:00
CleartextHttp2ServerUpgradeHandlerTest.java HttpServerUpgradeHandler shouldn't wait for flush to reshape pipeline 2018-03-28 19:54:30 +02:00
DataCompressionHttp2Test.java Trigger user event when H2 conn preface & SETTINGS frame are sent 2017-10-24 09:17:06 +02:00
DefaultHttp2ConnectionDecoderTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
DefaultHttp2ConnectionEncoderTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
DefaultHttp2ConnectionTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
DefaultHttp2FrameReaderTest.java Make methods 'static' where it possible 2017-10-21 14:59:26 +02:00
DefaultHttp2FrameWriterTest.java Make methods 'static' where it possible 2017-10-21 14:59:26 +02:00
DefaultHttp2HeadersDecoderTest.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
DefaultHttp2HeadersEncoderTest.java HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
DefaultHttp2HeadersTest.java DefaultHttp2Headers#contains(CharSequence, CharSequence) does not work with String 2018-01-27 20:27:50 +01:00
DefaultHttp2LocalFlowControllerTest.java Remove deprecated usage of Mockito methods 2017-03-09 20:59:54 +01:00
DefaultHttp2RemoteFlowControllerTest.java Convert Http2Error.STREAM_CLOSED to ClosedChannelException when using child channels 2018-01-29 17:50:29 -08:00
HashCollisionTest.java Remove unsafe char[] access in PlatformDependent 2016-06-30 08:58:28 -07:00
HpackDecoderTest.java HpackDecoder treats invalid pseudo-headers as stream level errors 2018-06-26 13:53:14 +02:00
HpackEncoderTest.java Remove HpackDecoder.maxHeaderListSizeGoAway (#7911) 2018-05-19 08:31:59 +02:00
HpackHuffmanTest.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackTest.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackTestCase.java Fix failing h2spec tests 8.1.2.1 related to pseudo-headers validation 2018-01-29 19:42:56 -08:00
Http2ClientUpgradeCodecTest.java Provide an API for controlling and h2c upgrade response stream in Http2MultiplexCodec (#7968) 2018-06-07 16:01:41 -07:00
Http2ConnectionHandlerTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
Http2ConnectionRoundtripTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
Http2FrameCodecTest.java Add null-check to Htt2FrameCodec#consumeBytes. (#7899) 2018-05-02 13:01:26 +02:00
Http2FrameRoundtripTest.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2HeaderBlockIOTest.java HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
Http2MultiplexCodecBuilderTest.java Fix sharable check logic 2017-11-08 08:36:07 -08:00
Http2MultiplexCodecClientUpgradeTest.java Provide an API for controlling and h2c upgrade response stream in Http2MultiplexCodec (#7968) 2018-06-07 16:01:41 -07:00
Http2MultiplexCodecTest.java HTTP/2 child channel read cycle doesn't respect RecvByteBufAllocator and (#8147) 2018-07-26 19:44:21 -04:00
Http2ServerUpgradeCodecTest.java Fix NPE when using Http2ServerUpgradeCodec with Http2FrameCodec and Http2MultiplexCodec 2017-09-14 08:23:53 -07:00
Http2SettingsTest.java HTTP/2 Ensure default settings are correctly enforced and interfaces clarified 2016-10-07 13:00:45 -07:00
Http2StreamFrameToHttpObjectCodecTest.java Correctly include the stream id when convert from Http2HeadersFrame to HttpMessage 2018-03-17 09:46:01 +01:00
Http2TestUtil.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
HttpConversionUtilTest.java HttpConversionUtil TE filtering robustness 2017-11-22 08:45:11 +01:00
HttpToHttp2ConnectionHandlerTest.java Trigger user event when H2 conn preface & SETTINGS frame are sent 2017-10-24 09:17:06 +02:00
InboundHttp2ToHttpAdapterTest.java Only enable validation of headers if original headers were validating as well. 2017-12-21 07:32:29 +01:00
InOrderHttp2Headers.java Fix failing h2spec tests 8.1.2.1 related to pseudo-headers validation 2018-01-29 19:42:56 -08:00
LastInboundHandler.java HTTP/2 child channel read cycle doesn't respect RecvByteBufAllocator and (#8147) 2018-07-26 19:44:21 -04:00
ReadOnlyHttp2HeadersTest.java ReadOnlyHttp2Headers.contains always ignores case for values 2018-01-27 20:29:40 +01:00
StreamBufferingEncoderTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
TestChannelInitializer.java HTTP/2 child channel read cycle doesn't respect RecvByteBufAllocator and (#8147) 2018-07-26 19:44:21 -04:00
TestHeaderListener.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
UniformStreamByteDistributorFlowControllerTest.java HTTP/2 DefaultHttp2RemoteFlowController Stream writability notification broken 2015-12-21 10:01:33 +01:00
UniformStreamByteDistributorTest.java HTTP/2 support pending data larger than Integer.MAX_VALUE 2017-12-20 08:55:15 -08:00
WeightedFairQueueByteDistributorDependencyTreeTest.java HTTP/2 StreamByteDistributor improve parameter validation 2017-04-24 17:17:18 -07:00
WeightedFairQueueByteDistributorTest.java HTTP/2 support pending data larger than Integer.MAX_VALUE 2017-12-20 08:55:15 -08:00
WeightedFairQueueRemoteFlowControllerTest.java HTTP/2 DefaultHttp2RemoteFlowController Stream writability notification broken 2015-12-21 10:01:33 +01:00