Fix incorrect channel factory selection for custom EventLoopGroups #4074
+404
−30
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
LoopResources.onChannel()andonChannelClass()incorrectly selected channel factories when users provided customEventLoopGroupsviarunOn(). The previous logic only checked ifDefaultLoopNativeDetector.INSTANCE(the highest-priority available transport) supported the group, falling back toNIOotherwise.This caused issues when, for example,
io_uringwas the default transport but a user explicitly provided anEpollEventLoopGroup- the code would incorrectly returnNIOchannel factories instead ofEpollones.Changes:
forGroup(EventLoopGroup)method toDefaultLoopNativeDetectorthat checks all available transports (io_uring,epoll,kqueue,nio) to find the correct channel factory for any givenEventLoopGroupDefaultLoopNIO.supportGroup()to properly detectNIOevent loops usingisCompatible(NioIoHandle.class), matching the pattern used by other transportsonChannel()andonChannelClass()to useforGroup()instead of the previous INSTANCE-or-NIO logic