netty5/codec-http2/src/test/java/io/netty/handler/codec/http2
Norman Maurer c10ccc5dec
Tighten contract between Channel and EventLoop by require the EventLoop on Channel construction. (#8587)
Motivation:

At the moment it’s possible to have a Channel in Netty that is not registered / assigned to an EventLoop until register(...) is called. This is suboptimal as if the Channel is not registered it is also not possible to do anything useful with a ChannelFuture that belongs to the Channel. We should think about if we should have the EventLoop as a constructor argument of a Channel and have the register / deregister method only have the effect of add a Channel to KQueue/Epoll/... It is also currently possible to deregister a Channel from one EventLoop and register it with another EventLoop. This operation defeats the threading model assumptions that are wide spread in Netty, and requires careful user level coordination to pull off without any concurrency issues. It is not a commonly used feature in practice, may be better handled by other means (e.g. client side load balancing), and therefore we propose removing this feature.

Modifications:

- Change all Channel implementations to require an EventLoop for construction ( + an EventLoopGroup for all ServerChannel implementations)
- Remove all register(...) methods from EventLoopGroup
- Add ChannelOutboundInvoker.register(...) which now basically means we want to register on the EventLoop for IO.
- Change ChannelUnsafe.register(...) to not take an EventLoop as parameter (as the EventLoop is supplied on custruction).
- Change ChannelFactory to take an EventLoop to create new Channels and introduce ServerChannelFactory which takes an EventLoop and one EventLoopGroup to create new ServerChannel instances.
- Add ServerChannel.childEventLoopGroup()
- Ensure all operations on the accepted Channel is done in the EventLoop of the Channel in ServerBootstrap
- Change unit tests for new behaviour

Result:

A Channel always has an EventLoop assigned which will never change during its life-time. This ensures we are always be able to call any operation on the Channel once constructed (unit the EventLoop is shutdown). This also simplifies the logic in DefaultChannelPipeline a lot as we can always call handlerAdded / handlerRemoved directly without the need to wait for register() to happen.

Also note that its still possible to deregister a Channel and register it again. It's just not possible anymore to move from one EventLoop to another (which was not really safe anyway).

Fixes https://github.com/netty/netty/issues/8513.
2019-01-14 20:11:13 +01: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 Remove support for marking reader and writerIndex in ByteBuf to reduce overhead and complexity. (#8636) 2018-12-11 14:00:49 +01:00
DefaultHttp2ConnectionDecoderTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
DefaultHttp2ConnectionEncoderTest.java Defer HTTP/2 stream transition state on initial write until headers are written (#8471) 2018-11-14 08:17:43 +01: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 Adding support for whitespace in resource path in tests (#8606) 2018-12-12 10:29:19 +01: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 Explict always call ctx.read() when AUTO_READ is false and HTTP/2 is used. (#8647) 2018-12-13 18:02:44 +00:00
Http2ConnectionRoundtripTest.java HTTP/2 goaway connection state update sequencing (#8080) 2018-07-03 19:51:16 -07:00
Http2FrameCodecTest.java Correctly buffer multiple outbound streams if needed. (#8694) 2019-01-14 08:25:57 +01:00
Http2FrameInboundWriter.java Tighten contract between Channel and EventLoop by require the EventLoop on Channel construction. (#8587) 2019-01-14 20:11:13 +01: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 Remove support for marking reader and writerIndex in ByteBuf to reduce overhead and complexity. (#8636) 2018-12-11 14:00:49 +01: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 Cleanup HTTP/2 tests for Http2FrameCodec and Http2MultiplexCodec (#8646) 2018-12-14 11:10:20 +01: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 Make Http2StreamFrameToHttpObjectCodec truly @Sharable (#8482) 2018-11-09 18:23:53 +01:00
Http2TestUtil.java Cleanup HTTP/2 tests for Http2FrameCodec and Http2MultiplexCodec (#8646) 2018-12-14 11:10:20 +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 Cleanup HTTP/2 tests for Http2FrameCodec and Http2MultiplexCodec (#8646) 2018-12-14 11:10:20 +01: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