netty5/transport-native-epoll/src/test/java/io/netty/channel/epoll
Norman Maurer ec8e8bd515
Fix event loop shutdown timing fragility (#9639)
Motivation

The current event loop shutdown logic is quite fragile and in the
epoll/NIO cases relies on the default 1 second wait/select timeout that
applies when there are no scheduled tasks. Without this default timeout
the shutdown would hang indefinitely.

The timeout only takes effect in this case because queued scheduled
tasks are first cancelled in
SingleThreadEventExecutor#confirmShutdown(), but I _think_ even this
isn't robust, since the main task queue is subsequently serviced which
could result in some new scheduled task being queued with much later
deadline.

It also means shutdowns are unnecessarily delayed by up to 1 second.

Modifications

- Add/extend unit tests to expose the issue
- Adjust SingleThreadEventExecutor shutdown and confirmShutdown methods
to explicitly add no-op tasks to the taskQueue so that the subsequent
event loop iteration doesn't enter blocking wait (as looks like was
originally intended)

Results

Faster and more robust shutdown of event loops, allows removal of the default wait timeout.
This is a port of https://github.com/netty/netty/pull/9616
2019-10-08 12:00:59 +04:00
..
EpollAbstractDomainSocketEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
EpollChannelConfigTest.java Decouple EventLoop details from the IO handling for each transport to… (#8680) 2019-01-23 08:32:05 +01:00
EpollCompositeBufferGatheringWriteTest.java IovArray#add return value resulted in more ByteBufs being added during iteration 2018-01-04 08:04:32 -08:00
EpollDatagramChannelConfigTest.java Decouple EventLoop details from the IO handling for each transport to… (#8680) 2019-01-23 08:32:05 +01:00
EpollDatagramChannelTest.java Do not cache local/remote address when creating EpollDatagramChannel with InternetProtocolFamily (#9436) 2019-08-11 09:09:26 +02:00
EpollDatagramConnectNotExistsTest.java Correctly handle connect/disconnect in EpollDatagramChannel / KQueueDatagramChannel 2017-08-04 09:22:53 +02:00
EpollDatagramMulticastIPv6Test.java Added UDP multicast (with caveats: getInterface, getNetworkInterface, block or loopback-mode-disabled operations). 2019-05-25 10:06:13 +02:00
EpollDatagramMulticastTest.java Added UDP multicast (with caveats: getInterface, getNetworkInterface, block or loopback-mode-disabled operations). 2019-05-25 10:06:13 +02:00
EpollDatagramScatteringReadTest.java Add support for recvmmsg(...) even with connected datagram channels w… (#9539) 2019-09-06 20:59:24 +02:00
EpollDatagramUnicastIPv6MappedTest.java Correctly handle IPV6-mapped-IPV4 addresses in native code when receiving datagrams (#9560) 2019-09-11 20:31:50 +02:00
EpollDatagramUnicastIPv6Test.java Correctly handle IPV6-mapped-IPV4 addresses in native code when receiving datagrams (#9560) 2019-09-11 20:31:50 +02:00
EpollDatagramUnicastTest.java Add IPv6 multicast test to testsuite (#9037) 2019-04-12 14:26:09 +02:00
EpollDetectPeerCloseWithoutReadTest.java Decouple EventLoop details from the IO handling for each transport to… (#8680) 2019-01-23 08:32:05 +01:00
EpollDomainSocketDataReadInitialStateTest.java Epoll and Kqueue shouldn't read by default (#8024) 2018-06-15 10:28:50 +02:00
EpollDomainSocketEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketFdTest.java Merge ChannelInboundHandler and ChannelOutboundHandler into ChannelHa… (#8957) 2019-03-28 09:28:27 +00:00
EpollDomainSocketFileRegionTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketFixedLengthEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketGatheringWriteTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketObjectEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketReuseFdTest.java KQueueEventLoop | EpollEventLoop may incorrectly update registration when FD is reused. 2019-05-22 10:11:42 +02:00
EpollDomainSocketShutdownOutputByPeerTest.java Support ALLOW_HALF_CLOSURE channel option on Unix domain socket. (#8932) 2019-03-19 11:37:54 +01:00
EpollDomainSocketSslClientRenegotiateTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 10:00:55 +01:00
EpollDomainSocketSslEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketSslGreetingTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 10:00:55 +01:00
EpollDomainSocketStartTlsTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketStringEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollETSocketAutoReadTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollETSocketConditionalWritabilityTest.java Epoll flush/writabilityChange deadlock 2018-02-20 11:40:58 +01:00
EpollETSocketDataReadInitialStateTest.java Epoll and Kqueue shouldn't read by default (#8024) 2018-06-15 10:28:50 +02:00
EpollETSocketExceptionHandlingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollETSocketHalfClosed.java EpollRecvByteAllocatorHandle doesn't inform delegate of more data 2017-02-13 17:42:24 -08:00
EpollETSocketReadPendingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollETSocketStringEchoBusyWaitTest.java Added option to do busy-wait on epoll (#8267) 2018-09-28 22:52:00 +02:00
EpollEventLoopTest.java Fix event loop shutdown timing fragility (#9639) 2019-10-08 12:00:59 +04:00
EpollLTSocketAutoReadTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollLTSocketConditionalWritabilityTest.java Epoll flush/writabilityChange deadlock 2018-02-20 11:40:58 +01:00
EpollLTSocketDataReadInitialStateTest.java Epoll and Kqueue shouldn't read by default (#8024) 2018-06-15 10:28:50 +02:00
EpollLTSocketExceptionHandlingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollLTSocketHalfClosed.java EpollRecvByteAllocatorHandle doesn't inform delegate of more data 2017-02-13 17:42:24 -08:00
EpollLTSocketReadPendingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollLTSocketStringEchoBusyWaitTest.java Added option to do busy-wait on epoll (#8267) 2018-09-28 22:52:00 +02:00
EpollReuseAddrTest.java Do not cache local/remote address when creating EpollDatagramChannel with InternetProtocolFamily (#9436) 2019-08-11 09:09:26 +02:00
EpollServerSocketChannelConfigTest.java Merge ChannelInboundHandler and ChannelOutboundHandler into ChannelHa… (#8957) 2019-03-28 09:28:27 +00:00
EpollSocketChannelConfigTest.java Merge ChannelInboundHandler and ChannelOutboundHandler into ChannelHa… (#8957) 2019-03-28 09:28:27 +00:00
EpollSocketChannelNotYetConnectedTest.java Throw correct NotYetConnectedException when ENOTCONN errno is set 2016-08-24 07:41:24 +02:00
EpollSocketChannelTest.java Merge ChannelInboundHandler and ChannelOutboundHandler into ChannelHa… (#8957) 2019-03-28 09:28:27 +00:00
EpollSocketCloseForciblyTest.java Only try to deregister from EventLoop when the native Channel was registered before. 2017-05-24 13:19:18 +02:00
EpollSocketConnectionAttemptTest.java [#3785] Correctly handle connection refused with native transport 2015-05-27 13:38:50 +02:00
EpollSocketConnectTest.java Ensure EpollSocketChannel.localAddress() returns correct address after connect(...) call. 2016-04-09 19:04:45 +02:00
EpollSocketEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketFileRegionTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketFixedLengthEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketGatheringWriteTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketMultipleConnectTest.java Decouple EventLoop details from the IO handling for each transport to… (#8680) 2019-01-23 08:32:05 +01:00
EpollSocketObjectEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketRstTest.java EPOLL SO_LINGER=0 sends FIN+RST 2016-03-16 22:35:04 -07:00
EpollSocketShutdownOutputByPeerTest.java DuplexChannel to support shutdownInput 2016-05-18 09:11:49 +02:00
EpollSocketShutdownOutputBySelfTest.java DuplexChannel to support shutdownInput 2016-05-18 09:11:49 +02:00
EpollSocketSslClientRenegotiateTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 10:00:55 +01:00
EpollSocketSslEchoTest.java Test TLS renegotiation with explicit cipher suite change 2014-12-12 17:49:16 +09:00
EpollSocketSslGreetingTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 10:00:55 +01:00
EpollSocketSslSessionReuseTest.java Add more tests to KQueue and Epoll testsuites. (#8851) 2019-02-08 20:12:29 +01:00
EpollSocketStartTlsTest.java Add an OpenSslEngine and the universal API for enabling SSL 2014-05-18 02:54:06 +09:00
EpollSocketStringEchoBusyWaitTest.java migrate java8: use lambda and method reference (#8781) 2019-01-29 14:06:05 +01:00
EpollSocketStringEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketTcpMd5Test.java DefaultPromise may throw checked exceptions that are not advertised (#8995) 2019-04-10 07:15:31 +02:00
EpollSocketTest.java KQueueSocket#setTrafficClass exceptions 2017-05-18 11:26:27 -07:00
EpollSocketTestPermutation.java Add support for recvmmsg when using epoll transport (#9509) 2019-09-03 09:35:21 +02:00
EpollSpliceTest.java Fix epoll spliceTo file descriptor with offset (#9369) 2019-07-16 13:23:36 +02:00
EpollTest.java migrate java8: use lambda and method reference (#8781) 2019-01-29 14:06:05 +01:00
EpollWriteBeforeRegisteredTest.java Add more tests to KQueue and Epoll testsuites. (#8851) 2019-02-08 20:12:29 +01:00
NativeTest.java Decouple Unix from Linux in Native Transport 2015-11-02 12:29:44 -08:00