netty5/codec-http2/src/main/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
..
AbstractHttp2ConnectionHandlerBuilder.java HTTP/2 Child Channel and FrameCodec Feature Parity. 2017-08-11 12:41:28 +02:00
AbstractHttp2StreamFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
AbstractInboundHttp2ToHttpAdapterBuilder.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
CharSequenceMap.java Optimize HPACK usage to align more with Netty types and remove heavy object creations. Related to [#3597] 2016-06-22 14:26:05 +02:00
CleartextHttp2ServerUpgradeHandler.java Configures HTTP2 pipeline with more proper way 2017-08-02 06:58:55 +02:00
CompressorHttp2ConnectionEncoder.java Ensure the same ByteBufAllocator is used in the EmbeddedChannel when compress / decompress. Related to [#5294] 2016-05-31 09:08:33 +02:00
DecoratingHttp2ConnectionDecoder.java Http2ConnectionDecoder remove localSettings setter method 2016-08-10 12:23:03 -07:00
DecoratingHttp2ConnectionEncoder.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
DecoratingHttp2FrameWriter.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2Connection.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
DefaultHttp2ConnectionDecoder.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
DefaultHttp2ConnectionEncoder.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2DataFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2FrameReader.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2FrameWriter.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2GoAwayFrame.java Remove double comparing of content out of the DefaultHttp2GoAwayFrame.equals() 2017-09-07 08:30:43 +02:00
DefaultHttp2Headers.java Fix failing h2spec tests 8.1.2.1 related to pseudo-headers validation 2018-01-29 19:42:56 -08:00
DefaultHttp2HeadersDecoder.java Remove HpackDecoder.maxHeaderListSizeGoAway (#7911) 2018-05-19 08:31:59 +02:00
DefaultHttp2HeadersEncoder.java fix the typos 2017-04-20 04:56:09 +02:00
DefaultHttp2HeadersFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2LocalFlowController.java DefaultHttp2Connection.close Reentrant Modification 2016-05-09 14:16:30 -07:00
DefaultHttp2PingFrame.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2RemoteFlowController.java Fix typos in docs. 2018-02-14 08:44:07 +01:00
DefaultHttp2ResetFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2SettingsFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2UnknownFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2WindowUpdateFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DelegatingDecompressorFrameListener.java HTTP/2 DelegatingDecompressorFrameListener return bytes to flow control 2016-06-20 14:24:09 -07:00
EmptyHttp2Headers.java Method to check if a Http2 header is present and has a given value 2018-01-26 08:33:49 -08:00
HpackDecoder.java HpackDecoder treats invalid pseudo-headers as stream level errors 2018-06-26 13:53:14 +02:00
HpackDynamicTable.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackEncoder.java Do not enforce arbitrary max header list size in HpackEncoder (#7853) 2018-04-16 14:27:36 -07:00
HpackHeaderField.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackHuffmanDecoder.java Fix typos in docs. 2018-02-14 08:44:07 +01:00
HpackHuffmanEncoder.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackStaticTable.java Immediate caching the strings wrapped to AsciiString 2017-08-15 06:22:14 +02:00
HpackUtil.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
Http2ChannelDuplexHandler.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2ClientUpgradeCodec.java Match Http2ClientUpgradeCodec to the new upgrade policy 2017-09-20 12:42:43 -07:00
Http2CodecUtil.java Remove dead code in Http2CodecUtil (#8009) 2018-06-07 15:53:21 -07:00
Http2Connection.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
Http2ConnectionAdapter.java HTTP/2 Non Active Stream RFC Corrections 2017-02-01 10:34:27 -08:00
Http2ConnectionDecoder.java Http2ConnectionDecoder remove localSettings setter method 2016-08-10 12:23:03 -07:00
Http2ConnectionEncoder.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
Http2ConnectionHandler.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
Http2ConnectionHandlerBuilder.java AbstractHttp2ConnectionHandlerBuilder support for HPACK huffman decoder initial size 2017-06-12 16:36:43 -07:00
Http2ConnectionPrefaceAndSettingsFrameWrittenEvent.java Trigger user event when H2 conn preface & SETTINGS frame are sent 2017-10-24 09:17:06 +02:00
Http2DataFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2DataWriter.java http2: count pad length field toward flow control. Fixes #5434 2016-06-25 09:51:36 -07:00
Http2Error.java Cleanup : for loops for arrays to make code easier to read and removed unnecessary toLowerCase() 2017-02-06 07:47:59 +01:00
Http2EventAdapter.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2Exception.java Add missed 'serialVersionUID' field for Serializable classes 2017-10-21 14:41:18 +02:00
Http2Flags.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
Http2FlowController.java HTTP/2 Ensure default settings are correctly enforced and interfaces clarified 2016-10-07 13:00:45 -07:00
Http2Frame.java Split Http2MultiplexCodec into Frame- and MultiplexCodec + Tests. Fixes #4914 2016-06-29 07:22:09 +02:00
Http2FrameAdapter.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2FrameCodec.java Provide an API for controlling and h2c upgrade response stream in Http2MultiplexCodec (#7968) 2018-06-07 16:01:41 -07:00
Http2FrameCodecBuilder.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2FrameListener.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2FrameListenerDecorator.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2FrameLogger.java Avoid implicit allocations in Http2FrameLogger when logging is disabled (#7937) 2018-05-15 09:06:32 +02:00
Http2FrameReader.java HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
Http2FrameSizePolicy.java HTTP/2 Ensure default settings are correctly enforced and interfaces clarified 2016-10-07 13:00:45 -07:00
Http2FrameStream.java HTTP/2 Remove Http2FrameStream#CONNECTION_STREAM 2018-01-14 13:31:30 +01:00
Http2FrameStreamEvent.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2FrameStreamException.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2FrameStreamVisitor.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2FrameTypes.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
Http2FrameWriter.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2GoAwayFrame.java Split Http2MultiplexCodec into Frame- and MultiplexCodec + Tests. Fixes #4914 2016-06-29 07:22:09 +02:00
Http2Headers.java Fix failing h2spec tests 8.1.2.1 related to pseudo-headers validation 2018-01-29 19:42:56 -08:00
Http2HeadersDecoder.java HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
Http2HeadersEncoder.java HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
Http2HeadersFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2InboundFrameLogger.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2LifecycleManager.java Do not fire outbound exception throught the pipeline when using Http2FrameCodec / Http2MultiplexCodec 2018-01-25 13:42:28 -08:00
Http2LocalFlowController.java http2: count pad length field toward flow control. Fixes #5434 2016-06-25 09:51:36 -07:00
Http2MultiplexCodec.java HTTP/2 child channel read cycle doesn't respect RecvByteBufAllocator and (#8147) 2018-07-26 19:44:21 -04:00
Http2MultiplexCodecBuilder.java Provide an API for controlling and h2c upgrade response stream in Http2MultiplexCodec (#7968) 2018-06-07 16:01:41 -07:00
Http2NoMoreStreamIdsException.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
Http2OutboundFrameLogger.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2PingFrame.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
Http2PromisedRequestVerifier.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
Http2RemoteFlowController.java Fix incorrect javadocs in Http2RemoteFlowController 2017-08-08 07:47:18 +02:00
Http2ResetFrame.java Split Http2MultiplexCodec into Frame- and MultiplexCodec + Tests. Fixes #4914 2016-06-29 07:22:09 +02:00
Http2SecurityUtil.java Workaround IBM's J9 JVM getSupportedCipherSuites() returning SSL_ prefix cipher names 2017-07-05 09:05:42 -04:00
Http2ServerUpgradeCodec.java Fix NPE when using Http2ServerUpgradeCodec with Http2FrameCodec and Http2MultiplexCodec 2017-09-14 08:23:53 -07:00
Http2Settings.java Supply a builder for Http2Codec 2017-05-05 09:32:46 -07:00
Http2SettingsFrame.java HTTP/2 Child Channel and FrameCodec Feature Parity. 2017-08-11 12:41:28 +02:00
Http2Stream.java Motivation: (#7848) 2018-04-21 08:23:15 +02:00
Http2StreamChannel.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2StreamChannelBootstrap.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
Http2StreamChannelId.java HTTP/2 Child Channel reading and flushing 2017-10-26 10:06:22 -07:00
Http2StreamFrame.java HTTP/2 Remove Http2FrameStream#CONNECTION_STREAM 2018-01-14 13:31:30 +01:00
Http2StreamFrameToHttpObjectCodec.java Correctly include the stream id when convert from Http2HeadersFrame to HttpMessage 2018-03-17 09:46:01 +01:00
Http2StreamVisitor.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
Http2UnknownFrame.java Correctly let Http2UnkownFrame extend HttpStreamFrame and so be usable with Http2MultiplexCodec. (#7976) 2018-05-29 07:27:40 +02:00
Http2WindowUpdateFrame.java Split Http2MultiplexCodec into Frame- and MultiplexCodec + Tests. Fixes #4914 2016-06-29 07:22:09 +02:00
HttpConversionUtil.java HttpResponseStatus object allocation reduction 2018-01-24 22:01:52 -08:00
HttpToHttp2ConnectionHandler.java Do not fire outbound exception throught the pipeline when using Http2FrameCodec / Http2MultiplexCodec 2018-01-25 13:42:28 -08:00
HttpToHttp2ConnectionHandlerBuilder.java AbstractHttp2ConnectionHandlerBuilder support for HPACK huffman decoder initial size 2017-06-12 16:36:43 -07:00
InboundHttp2ToHttpAdapter.java Adapt Http2ServerDowngrader to work with clients 2017-09-22 11:04:43 -07:00
InboundHttp2ToHttpAdapterBuilder.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
InboundHttpToHttp2Adapter.java H2C upgrades should be ineligible for flow control (#7400) 2017-12-07 16:46:16 -08:00
package-info.java [#5088] Add annotation which marks packages/interfaces/classes as unstable 2016-05-09 15:16:35 +02:00
ReadOnlyHttp2Headers.java ReadOnlyHttp2Headers.contains always ignores case for values 2018-01-27 20:29:40 +01:00
StreamBufferingEncoder.java HTTP/2 revert Http2FrameWriter throws API change 2017-01-26 23:26:17 -08:00
StreamByteDistributor.java HTTP/2 support pending data larger than Integer.MAX_VALUE 2017-12-20 08:55:15 -08:00
UniformStreamByteDistributor.java HTTP/2 support pending data larger than Integer.MAX_VALUE 2017-12-20 08:55:15 -08:00
WeightedFairQueueByteDistributor.java HTTP/2 support pending data larger than Integer.MAX_VALUE 2017-12-20 08:55:15 -08:00