netty5/codec-http2/src/main/java/io/netty/handler/codec/http2
Scott Mitchell 643d521d5e
HTTP/2 avoid closing connection when writing GOAWAY (#9227)
Motivation:
b4e3c12b8e introduced code to avoid coupling
close() to graceful close. It also added some code which attempted to infer when
a graceful close was being done in writing of a GOAWAY to preserve the
"connection is closed when all streams are closed behavior" for the child
channel API. However the implementation was too overzealous and may preemptively
close the connection if there are not currently any open streams (and close if
there are any frames which create streams in flight).

Modifications:
- Decouple writing a GOAWAY from trying to infer if a graceful close is being
  done and closing the connection. Even if we could enhance this logic (e.g.
wait to close until the second GOAWAY with no error) it is possible the user
doesn't want the connection to be closed yet. We can add a means for the codec
to orchestrate the graceful close in the future (e.g. write some special "close
the connection when all streams are closed") but for now we can just let the
application handle this.

Result:
Fixes https://github.com/netty/netty/issues/9207
2019-06-06 17:44:12 -07:00
..
AbstractHttp2ConnectionHandlerBuilder.java Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -07: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 Tighten up contract of PromiseCombiner and so make it more safe to use (#8886) 2019-02-28 20:32:04 +01:00
DecoratingHttp2ConnectionDecoder.java Http2ConnectionDecoder remove localSettings setter method 2016-08-10 12:23:03 -07:00
DecoratingHttp2ConnectionEncoder.java HTTP/2 to support asynchronous SETTINGS ACK (#9069) 2019-04-25 15:52:05 -07:00
DecoratingHttp2FrameWriter.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2Connection.java Update to new checkstyle plugin (#8777) (#8780) 2019-01-25 11:58:42 +01:00
DefaultHttp2ConnectionDecoder.java HTTP/2 to support asynchronous SETTINGS ACK (#9069) 2019-04-25 15:52:05 -07:00
DefaultHttp2ConnectionEncoder.java DefaultHttp2ConnectionEncoder async SETTINGS ACK SimpleChannelPromiseAggregator promise usage 2019-04-25 16:26:08 -07:00
DefaultHttp2DataFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2FrameReader.java Reduce http2 buffer slicing (#8598) 2018-11-29 19:45:52 +01:00
DefaultHttp2FrameWriter.java Upgrade to new netty-build and com.puppycrawl.tools 8.18 (#8980) 2019-03-26 14:21:34 +01:00
DefaultHttp2GoAwayFrame.java use checkPositive/checkPositiveOrZero (#8835) 2019-02-04 16:01:49 +01: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 use checkPositive/checkPositiveOrZero (#8835) 2019-02-04 16:01:49 +01:00
DefaultHttp2PingFrame.java Use long for http2 ping payload. 2018-02-08 10:23:34 +01:00
DefaultHttp2RemoteFlowController.java use checkPositive/checkPositiveOrZero (#8835) 2019-02-04 16:01:49 +01:00
DefaultHttp2ResetFrame.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
DefaultHttp2SettingsAckFrame.java HTTP/2 to support asynchronous SETTINGS ACK (#9069) 2019-04-25 15:52:05 -07:00
DefaultHttp2SettingsFrame.java HTTP/2 to support asynchronous SETTINGS ACK (#9069) 2019-04-25 15:52:05 -07: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 use checkPositive/checkPositiveOrZero (#8835) 2019-02-04 16:01:49 +01: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 Only use static Exception instances when we can ensure addSuppressed … (#9152) 2019-05-17 22:23:02 +02:00
HpackDynamicTable.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackEncoder.java Update to new checkstyle plugin (#8777) (#8780) 2019-01-25 11:58:42 +01:00
HpackHeaderField.java HTTP/2 move internal HPACK classes to the http2 package 2017-03-02 07:42:41 -08:00
HpackHuffmanDecoder.java Only use static Exception instances when we can ensure addSuppressed … (#9152) 2019-05-17 22:23:02 +02: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 avoid closing connection when writing GOAWAY (#9227) 2019-06-06 17:44:12 -07:00
Http2ConnectionHandlerBuilder.java Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -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 Fix minor spelling issues in javadocs (#8701) 2019-01-14 07:24:34 +01: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 Only use static Exception instances when we can ensure addSuppressed … (#9152) 2019-05-17 22:23:02 +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 Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -07:00
Http2FrameCodecBuilder.java Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -07: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 Only use static Exception instances when we can ensure addSuppressed … (#9152) 2019-05-17 22:23:02 +02:00
Http2MultiplexCodecBuilder.java Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -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
Http2SettingsAckFrame.java HTTP/2 to support asynchronous SETTINGS ACK (#9069) 2019-04-25 15:52:05 -07:00
Http2SettingsFrame.java HTTP/2 Child Channel and FrameCodec Feature Parity. 2017-08-11 12:41:28 +02:00
Http2SettingsReceivedConsumer.java HTTP/2 to support asynchronous SETTINGS ACK (#9069) 2019-04-25 15:52:05 -07: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 Make Http2StreamFrameToHttpObjectCodec truly @Sharable (#8482) 2018-11-09 18:23:53 +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 Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -07:00
HttpToHttp2ConnectionHandlerBuilder.java Http2ConnectionHandler to allow decoupling close(..) from GOAWAY graceful close (#9094) 2019-04-28 17:48:04 -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 use checkPositive/checkPositiveOrZero (#8835) 2019-02-04 16:01:49 +01:00
WeightedFairQueueByteDistributor.java use checkPositive/checkPositiveOrZero (#8835) 2019-02-04 16:01:49 +01:00