netty5/codec-http2/src/main/java/io/netty/handler/codec/http2
nmittler 6504d52b94 Add HTTP/2 local flow control option for auto refill
Motivation:

For many HTTP/2 applications (such as gRPC) it is necessary to autorefill the connection window in order to prevent application-level deadlocking.

Consider an application with 2 streams, A and B.  A receives a stream of messages and the application pops off one message at a time and makes a request on stream B. However, if receiving of data on A has caused the connection window to collapse, B will not be able to receive any data and the application will deadlock.  The only way (currently) to get around this is 1) use multiple connections, or 2) manually refill the connection window.  Both are undesirable and could needlessly complicate the application code.

Modifications:

Add a configuration option to DefaultHttp2LocalFlowController, allowing it to autorefill the connection window.

Result:

Applications can configure HTTP/2 to avoid inter-stream deadlocking.
2015-11-05 15:47:10 -08:00
..
CharSequenceMap.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
CompressorHttp2ConnectionEncoder.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
DecoratingHttp2ConnectionDecoder.java Http2ConnectionHandler Builder instead of constructors 2015-10-01 13:51:03 -07:00
DecoratingHttp2ConnectionEncoder.java Cleaning up the initialization of Http2ConnectionHandler 2015-03-30 11:23:02 -07:00
DecoratingHttp2FrameWriter.java Cleaning up the initialization of Http2ConnectionHandler 2015-03-30 11:23:02 -07:00
DefaultHttp2Connection.java DefaultPropertyKey private member variable accessed outside scope 2015-08-28 08:54:11 -07:00
DefaultHttp2ConnectionDecoder.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
DefaultHttp2ConnectionEncoder.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
DefaultHttp2FrameReader.java DefaultHttp2FrameWriter ping payload size check 2015-09-16 10:25:07 -07:00
DefaultHttp2FrameWriter.java DefaultHttp2FrameWriter ping payload size check 2015-09-16 10:25:07 -07:00
DefaultHttp2Headers.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
DefaultHttp2HeadersDecoder.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
DefaultHttp2HeadersEncoder.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
DefaultHttp2HeaderTableListSize.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
DefaultHttp2LocalFlowController.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
DefaultHttp2RemoteFlowController.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
DelegatingDecompressorFrameListener.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
EmptyHttp2Headers.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
Http2ClientUpgradeCodec.java HTTP/2 defines using String instead of CharSequence 2015-09-16 14:55:33 -07:00
Http2CodecUtil.java HTTP/2 defines using String instead of CharSequence 2015-09-16 14:55:33 -07:00
Http2Connection.java [#3724] HTTP/2 Headers END_STREAM results in RST_STREAM 2015-05-07 08:31:05 -07:00
Http2ConnectionAdapter.java Include error code and message in GOAWAY events. 2015-03-31 09:18:26 -07:00
Http2ConnectionDecoder.java Http2ConnectionHandler Builder instead of constructors 2015-10-01 13:51:03 -07:00
Http2ConnectionEncoder.java Cleaning up the initialization of Http2ConnectionHandler 2015-03-30 11:23:02 -07:00
Http2ConnectionHandler.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
Http2DataWriter.java Http2DefaultFrameWriter direct write instead of copy 2015-02-06 11:56:14 -08:00
Http2Error.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2EventAdapter.java Include error code and message in GOAWAY events. 2015-03-31 09:18:26 -07:00
Http2Exception.java HTTP/2 Graceful Shutdown Timeout 2015-08-20 13:27:18 -07:00
Http2Flags.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2FlowController.java HTTP/2 Flow Controller should use Channel.isWritable() 2015-07-16 14:38:48 -07:00
Http2FrameAdapter.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2FrameListener.java Ignore frames for streams that may have previously existed. 2015-04-21 20:47:01 -07:00
Http2FrameListenerDecorator.java HTTP/2 Decoder reduce preface conditional checks 2015-03-28 18:52:35 -07:00
Http2FrameLogger.java Use standard syntax for logging HTTP/2 stream ID. 2015-07-28 09:54:14 -07:00
Http2FrameReader.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2FrameSizePolicy.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2FrameTypes.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2FrameWriter.java Http2DefaultFrameWriter direct write instead of copy 2015-02-06 11:56:14 -08:00
Http2Headers.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
Http2HeadersDecoder.java HTTP/2 limit header accumulated size 2015-07-07 13:25:03 -07:00
Http2HeadersEncoder.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
Http2HeaderTable.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2InboundFrameLogger.java HTTP/2 Decoder reduce preface conditional checks 2015-03-28 18:52:35 -07:00
Http2LifecycleManager.java Http2LifecycleManager.onException rename 2015-09-23 16:48:36 -07:00
Http2LocalFlowController.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
Http2NoMoreStreamIdsException.java HTTP/2 Graceful Shutdown Timeout 2015-08-20 13:27:18 -07:00
Http2OutboundFrameLogger.java Fixing logging of ping acks in Http2OutboundFrameLogger 2015-05-20 08:59:17 -07:00
Http2PromisedRequestVerifier.java Http2 draft 17 2015-03-25 09:02:15 -07:00
Http2RemoteFlowController.java Add HTTP/2 local flow control option for auto refill 2015-11-05 15:47:10 -08:00
Http2SecurityUtil.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2ServerUpgradeCodec.java HTTP/2 defines using String instead of CharSequence 2015-09-16 14:55:33 -07:00
Http2Settings.java Make IntObjectHashMap extend Map 2015-07-22 15:52:27 -07:00
Http2Stream.java Optimizing user-defined stream properties. 2015-04-23 12:41:14 -07:00
Http2StreamVisitor.java Removing direct access to HTTP/2 child streams. 2015-04-10 08:52:26 -07:00
HttpConversionUtil.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
HttpToHttp2ConnectionHandler.java Http2ConnectionHandler Builder instead of constructors 2015-10-01 13:51:03 -07:00
InboundHttp2ToHttpAdapter.java Refactor of HttpUtil and HttpHeaderUtil 2015-08-27 08:49:58 -07:00
InboundHttp2ToHttpPriorityAdapter.java Refactor of HttpUtil and HttpHeaderUtil 2015-08-27 08:49:58 -07:00
package-info.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
PriorityStreamByteDistributor.java HTTP/2 PriorityStreamByteDistributor exceptions and reentry 2015-11-03 13:22:11 -08:00
StreamBufferingEncoder.java HTTP/2 Headers Type Updates 2015-10-30 15:29:44 -07:00
StreamByteDistributor.java HTTP/2 PriorityStreamByteDistributor exceptions and reentry 2015-11-03 13:22:11 -08:00