From f9a7361102fd5f42fc314bea29f2e15d8358c910 Mon Sep 17 00:00:00 2001 From: Sam Gammon Date: Fri, 14 Jul 2023 20:55:29 -0700 Subject: [PATCH] Feature - Netty native transport for `io_uring` - add `TransportMode.IO_URING` - add incubator uring dependency Signed-off-by: Sam Gammon --- redisson/pom.xml | 7 +++++++ .../java/org/redisson/config/TransportMode.java | 5 +++++ .../org/redisson/connection/ServiceManager.java | 14 +++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/redisson/pom.xml b/redisson/pom.xml index 9e7ea5c08..27e47d41c 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -40,6 +40,13 @@ netty-transport-native-epoll provided + + io.netty.incubator + netty-incubator-transport-native-io_uring + provided + 0.0.21.Final + linux-x86_64 + io.netty diff --git a/redisson/src/main/java/org/redisson/config/TransportMode.java b/redisson/src/main/java/org/redisson/config/TransportMode.java index d564f3362..5bcea36a5 100644 --- a/redisson/src/main/java/org/redisson/config/TransportMode.java +++ b/redisson/src/main/java/org/redisson/config/TransportMode.java @@ -38,4 +38,9 @@ public enum TransportMode { */ KQUEUE, + /** + * Use `io_uring` transport. Requires netty-transport-io_uring lib in classpath. + */ + IO_URING, + } diff --git a/redisson/src/main/java/org/redisson/connection/ServiceManager.java b/redisson/src/main/java/org/redisson/connection/ServiceManager.java index 0ba2487e7..87aecb51b 100644 --- a/redisson/src/main/java/org/redisson/connection/ServiceManager.java +++ b/redisson/src/main/java/org/redisson/connection/ServiceManager.java @@ -27,6 +27,9 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.incubator.channel.uring.IOUringDatagramChannel; +import io.netty.incubator.channel.uring.IOUringEventLoopGroup; +import io.netty.incubator.channel.uring.IOUringSocketChannel; import io.netty.resolver.AddressResolver; import io.netty.resolver.AddressResolverGroup; import io.netty.resolver.DefaultAddressResolverGroup; @@ -154,11 +157,16 @@ public class ServiceManager { } this.socketChannelClass = KQueueSocketChannel.class; - if (PlatformDependent.isAndroid()) { - this.resolverGroup = DefaultAddressResolverGroup.INSTANCE; + this.resolverGroup = cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); + } else if (cfg.getTransportMode() == TransportMode.IO_URING) { + if (cfg.getEventLoopGroup() == null) { + this.group = new IOUringEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty")); } else { - this.resolverGroup = cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); + this.group = cfg.getEventLoopGroup(); } + + this.socketChannelClass = IOUringSocketChannel.class; + this.resolverGroup = cfg.getAddressResolverGroupFactory().create(IOUringDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); } else { if (cfg.getEventLoopGroup() == null) { this.group = new NioEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));