From eb1c8e49918c3bc075b8f4ab74e2ea20cdc8d794 Mon Sep 17 00:00:00 2001 From: Josef Grieb Date: Wed, 22 Jul 2020 14:01:48 +0200 Subject: [PATCH] Cleanup Motivation: fix checkstyle errors and many classes are unnecessarily public Modification: -fixed maven checkstyle errors -using package-private and final classes Result: better code quality --- example/pom.xml | 1 - run-example.sh | 2 +- .../src/main/c/io_uring.h | 55 ++-- .../src/main/c/netty_io_uring_native.c | 283 +++++++++--------- .../src/main/c/syscall.c | 9 +- .../src/main/c/syscall.h | 2 - .../channel/uring/AbstractIOUringChannel.java | 2 +- .../channel/uring/IOUringCompletionQueue.java | 4 +- .../io/netty/channel/uring/IOUringCqe.java | 2 +- .../netty/channel/uring/IOUringEventLoop.java | 4 +- .../uring/IOUringServerChannelConfig.java | 3 +- .../uring/IOUringServerSocketChannel.java | 2 +- .../channel/uring/IOUringSocketChannel.java | 2 +- .../channel/uring/IOUringSubmissionQueue.java | 4 +- .../io/netty/channel/uring/LinuxSocket.java | 4 +- .../java/io/netty/channel/uring/Native.java | 9 +- .../io/netty/channel/uring/RingBuffer.java | 2 +- .../io/netty/channel/uring/package-info.java | 3 +- .../io/netty/channel/uring/NativeTest.java | 13 +- .../io/netty/channel/unix/FileDescriptor.java | 1 + 20 files changed, 195 insertions(+), 212 deletions(-) diff --git a/example/pom.xml b/example/pom.xml index c0b20488d1..b56e77b9cb 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -43,7 +43,6 @@ netty-buffer ${project.version} - ${project.groupId} netty-transport-native-io_uring diff --git a/run-example.sh b/run-example.sh index 60a8dd34cb..b27790d465 100755 --- a/run-example.sh +++ b/run-example.sh @@ -1,6 +1,6 @@ #!/bin/bash -e EXAMPLE_MAP=( - 'uring:io.netty.example.uring.EchoIOUringServer' + 'io_uring:io.netty.example.uring.EchoIOUringServer' 'discard-client:io.netty.example.discard.DiscardClient' 'discard-server:io.netty.example.discard.DiscardServer' 'echo-client:io.netty.example.echo.EchoClient' diff --git a/transport-native-io_uring/src/main/c/io_uring.h b/transport-native-io_uring/src/main/c/io_uring.h index 5a322d05c7..a5e7020af4 100644 --- a/transport-native-io_uring/src/main/c/io_uring.h +++ b/transport-native-io_uring/src/main/c/io_uring.h @@ -17,48 +17,51 @@ #include #include #include +#include "netty_unix_buffer.h" #include "netty_unix_errors.h" #include "netty_unix_filedescriptor.h" #include "netty_unix_jni.h" +#include "netty_unix_limits.h" #include "netty_unix_socket.h" #include "netty_unix_util.h" -#ifndef LIB_TEST -#define LIB_TEST + +#ifndef NETTY_IO_URING +#define NETTY_IO_URING struct io_uring_sq { - unsigned *khead; - unsigned *ktail; - unsigned *kring_mask; - unsigned *kring_entries; - unsigned *kflags; - unsigned *kdropped; - unsigned *array; - struct io_uring_sqe *sqes; + unsigned *khead; + unsigned *ktail; + unsigned *kring_mask; + unsigned *kring_entries; + unsigned *kflags; + unsigned *kdropped; + unsigned *array; + struct io_uring_sqe *sqes; - unsigned sqe_head; - unsigned sqe_tail; + unsigned sqe_head; + unsigned sqe_tail; - size_t ring_sz; - void *ring_ptr; + size_t ring_sz; + void *ring_ptr; }; struct io_uring_cq { - unsigned *khead; - unsigned *ktail; - unsigned *kring_mask; - unsigned *kring_entries; - unsigned *koverflow; - struct io_uring_cqe *cqes; + unsigned *khead; + unsigned *ktail; + unsigned *kring_mask; + unsigned *kring_entries; + unsigned *koverflow; + struct io_uring_cqe *cqes; - size_t ring_sz; - void *ring_ptr; + size_t ring_sz; + void *ring_ptr; }; struct io_uring { - struct io_uring_sq sq; - struct io_uring_cq cq; - unsigned flags; - int ring_fd; + struct io_uring_sq sq; + struct io_uring_cq cq; + unsigned flags; + int ring_fd; }; #endif \ No newline at end of file diff --git a/transport-native-io_uring/src/main/c/netty_io_uring_native.c b/transport-native-io_uring/src/main/c/netty_io_uring_native.c index 366235a2e6..5e1757cfcc 100644 --- a/transport-native-io_uring/src/main/c/netty_io_uring_native.c +++ b/transport-native-io_uring/src/main/c/netty_io_uring_native.c @@ -56,14 +56,6 @@ #include #include -#include "netty_unix_buffer.h" -#include "netty_unix_errors.h" -#include "netty_unix_filedescriptor.h" -#include "netty_unix_jni.h" -#include "netty_unix_limits.h" -#include "netty_unix_socket.h" -#include "netty_unix_util.h" - static jmethodID ringBufferMethodId = NULL; static jmethodID ioUringSubmissionQueueMethodId = NULL; static jmethodID ioUringCommpletionQueueMethodId = NULL; @@ -72,183 +64,190 @@ static jclass ioUringCompletionQueueClass = NULL; static jclass ioUringSubmissionQueueClass = NULL; void io_uring_unmap_rings(struct io_uring_sq *sq, struct io_uring_cq *cq) { - munmap(sq->ring_ptr, sq->ring_sz); - if (cq->ring_ptr && cq->ring_ptr != sq->ring_ptr) - munmap(cq->ring_ptr, cq->ring_sz); + munmap(sq->ring_ptr, sq->ring_sz); + if (cq->ring_ptr && cq->ring_ptr != sq->ring_ptr) { + munmap(cq->ring_ptr, cq->ring_sz); + } } -int io_uring_mmap(int fd, struct io_uring_params *p, struct io_uring_sq *sq, - struct io_uring_cq *cq) { - size_t size; - int ret; +static int io_uring_mmap(int fd, struct io_uring_params *p, + struct io_uring_sq *sq, struct io_uring_cq *cq) +{ + size_t size; + int ret; - sq->ring_sz = p->sq_off.array + p->sq_entries * sizeof(unsigned); - cq->ring_sz = p->cq_off.cqes + p->cq_entries * sizeof(struct io_uring_cqe); + sq->ring_sz = p->sq_off.array + p->sq_entries * sizeof(unsigned); + cq->ring_sz = p->cq_off.cqes + p->cq_entries * sizeof(struct io_uring_cqe); - if (p->features & IORING_FEAT_SINGLE_MMAP) { - if (cq->ring_sz > sq->ring_sz) - sq->ring_sz = cq->ring_sz; - cq->ring_sz = sq->ring_sz; - } - sq->ring_ptr = mmap(0, sq->ring_sz, PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_POPULATE, fd, IORING_OFF_SQ_RING); - if (sq->ring_ptr == MAP_FAILED) - return -errno; + if (p->features & IORING_FEAT_SINGLE_MMAP) { + if (cq->ring_sz > sq->ring_sz) + sq->ring_sz = cq->ring_sz; + cq->ring_sz = sq->ring_sz; + } + sq->ring_ptr = mmap(0, sq->ring_sz, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_POPULATE, fd, IORING_OFF_SQ_RING); + if (sq->ring_ptr == MAP_FAILED) + return -errno; - if (p->features & IORING_FEAT_SINGLE_MMAP) { - cq->ring_ptr = sq->ring_ptr; - } else { - cq->ring_ptr = mmap(0, cq->ring_sz, PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_POPULATE, fd, IORING_OFF_CQ_RING); - if (cq->ring_ptr == MAP_FAILED) { - cq->ring_ptr = NULL; - ret = -errno; - goto err; - } - } + if (p->features & IORING_FEAT_SINGLE_MMAP) { + cq->ring_ptr = sq->ring_ptr; + } else { + cq->ring_ptr = mmap(0, cq->ring_sz, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_POPULATE, fd, IORING_OFF_CQ_RING); + if (cq->ring_ptr == MAP_FAILED) { + cq->ring_ptr = NULL; + ret = -errno; + goto err; + } + } - sq->khead = sq->ring_ptr + p->sq_off.head; - sq->ktail = sq->ring_ptr + p->sq_off.tail; - sq->kring_mask = sq->ring_ptr + p->sq_off.ring_mask; - sq->kring_entries = sq->ring_ptr + p->sq_off.ring_entries; - sq->kflags = sq->ring_ptr + p->sq_off.flags; - sq->kdropped = sq->ring_ptr + p->sq_off.dropped; - sq->array = sq->ring_ptr + p->sq_off.array; + sq->khead = sq->ring_ptr + p->sq_off.head; + sq->ktail = sq->ring_ptr + p->sq_off.tail; + sq->kring_mask = sq->ring_ptr + p->sq_off.ring_mask; + sq->kring_entries = sq->ring_ptr + p->sq_off.ring_entries; + sq->kflags = sq->ring_ptr + p->sq_off.flags; + sq->kdropped = sq->ring_ptr + p->sq_off.dropped; + sq->array = sq->ring_ptr + p->sq_off.array; - size = p->sq_entries * sizeof(struct io_uring_sqe); - sq->sqes = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, - fd, IORING_OFF_SQES); - if (sq->sqes == MAP_FAILED) { - ret = -errno; - err: - io_uring_unmap_rings(sq, cq); - return ret; - } + size = p->sq_entries * sizeof(struct io_uring_sqe); + sq->sqes = mmap(0, size, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_POPULATE, fd, + IORING_OFF_SQES); + if (sq->sqes == MAP_FAILED) { + ret = -errno; + goto err; + } - cq->khead = cq->ring_ptr + p->cq_off.head; - cq->ktail = cq->ring_ptr + p->cq_off.tail; - cq->kring_mask = cq->ring_ptr + p->cq_off.ring_mask; - cq->kring_entries = cq->ring_ptr + p->cq_off.ring_entries; - cq->koverflow = cq->ring_ptr + p->cq_off.overflow; - cq->cqes = cq->ring_ptr + p->cq_off.cqes; - return 0; + cq->khead = cq->ring_ptr + p->cq_off.head; + cq->ktail = cq->ring_ptr + p->cq_off.tail; + cq->kring_mask = cq->ring_ptr + p->cq_off.ring_mask; + cq->kring_entries = cq->ring_ptr + p->cq_off.ring_entries; + cq->koverflow = cq->ring_ptr + p->cq_off.overflow; + cq->cqes = cq->ring_ptr + p->cq_off.cqes; + + return 0; +err: + io_uring_unmap_rings(sq, cq); + return ret; } void setup_io_uring(int ring_fd, struct io_uring *io_uring_ring, struct io_uring_params *p) { - int ret; + int ret; - ret = io_uring_mmap(ring_fd, p, &io_uring_ring->sq, &io_uring_ring->cq); - if (!ret) { - io_uring_ring->flags = p->flags; - io_uring_ring->ring_fd = ring_fd; - } else { - perror("setup_io_uring error \n"); - } + ret = io_uring_mmap(ring_fd, p, &io_uring_ring->sq, &io_uring_ring->cq); + if (!ret) { + io_uring_ring->flags = p->flags; + io_uring_ring->ring_fd = ring_fd; + } else { + //Todo signal this back to EventLoop + perror("setup_io_uring error \n"); + } } static jint netty_io_uring_enter(JNIEnv *env, jclass class1, jint ring_fd, jint to_submit, jint min_complete, jint flags) { - return sys_io_uring_enter(ring_fd, to_submit, min_complete, flags, NULL); + return sys_io_uring_enter(ring_fd, to_submit, min_complete, flags, NULL); +} + +static int nettyBlockingSocket(int domain, int type, int protocol) { + return socket(domain, type, protocol); } static jobject netty_io_uring_setup(JNIEnv *env, jclass class1, jint entries) { - struct io_uring_params p; - memset(&p, 0, sizeof(p)); + struct io_uring_params p; + memset(&p, 0, sizeof(p)); - int ring_fd = sys_io_uring_setup((int)entries, &p); + int ring_fd = sys_io_uring_setup((int)entries, &p); - //Todo - if (ring_fd < -1) { + //Todo + if (ring_fd < -1) { //throw Exception return NULL; - } + } + struct io_uring io_uring_ring; + //Todo memset instead + io_uring_ring.flags = 0; + io_uring_ring.sq.sqe_tail = 0; + io_uring_ring.sq.sqe_head = 0; + setup_io_uring(ring_fd, &io_uring_ring, &p); - struct io_uring io_uring_ring; - //memset instead - io_uring_ring.flags = 0; - io_uring_ring.sq.sqe_tail = 0; - io_uring_ring.sq.sqe_head = 0; - setup_io_uring(ring_fd, &io_uring_ring, &p); + jobject ioUringSubmissionQueue = (*env)->NewObject( + env, ioUringSubmissionQueueClass, ioUringSubmissionQueueMethodId, + (jlong)io_uring_ring.sq.khead, (jlong)io_uring_ring.sq.ktail, + (jlong)io_uring_ring.sq.kring_mask, + (jlong)io_uring_ring.sq.kring_entries, (jlong)io_uring_ring.sq.kflags, + (jlong)io_uring_ring.sq.kdropped, (jlong)io_uring_ring.sq.array, + (jlong)io_uring_ring.sq.sqes, (jlong)io_uring_ring.sq.ring_sz, + (jlong)io_uring_ring.cq.ring_ptr, (jint)ring_fd); + jobject ioUringCompletionQueue = (*env)->NewObject( + env, ioUringCompletionQueueClass, ioUringCommpletionQueueMethodId, + (jlong)io_uring_ring.cq.khead, (jlong)io_uring_ring.cq.ktail, + (jlong)io_uring_ring.cq.kring_mask, + (jlong)io_uring_ring.cq.kring_entries, + (jlong)io_uring_ring.cq.koverflow, (jlong)io_uring_ring.cq.cqes, + (jlong)io_uring_ring.cq.ring_sz, (jlong)io_uring_ring.cq.ring_ptr, + (jint)ring_fd); - jobject ioUringSubmissionQueue = (*env)->NewObject( - env, ioUringSubmissionQueueClass, ioUringSubmissionQueueMethodId, - (jlong)io_uring_ring.sq.khead, (jlong)io_uring_ring.sq.ktail, - (jlong)io_uring_ring.sq.kring_mask, - (jlong)io_uring_ring.sq.kring_entries, (jlong)io_uring_ring.sq.kflags, - (jlong)io_uring_ring.sq.kdropped, (jlong)io_uring_ring.sq.array, - (jlong)io_uring_ring.sq.sqes, (jlong)io_uring_ring.sq.ring_sz, - (jlong)io_uring_ring.cq.ring_ptr, (jint)ring_fd); - - jobject ioUringCompletionQueue = (*env)->NewObject( - env, ioUringCompletionQueueClass, ioUringCommpletionQueueMethodId, - (jlong)io_uring_ring.cq.khead, (jlong)io_uring_ring.cq.ktail, - (jlong)io_uring_ring.cq.kring_mask, - (jlong)io_uring_ring.cq.kring_entries, - (jlong)io_uring_ring.cq.koverflow, (jlong)io_uring_ring.cq.cqes, - (jlong)io_uring_ring.cq.ring_sz, (jlong)io_uring_ring.cq.ring_ptr, - (jint)ring_fd); - - jobject ringBuffer = - (*env)->NewObject(env, ringBufferClass, ringBufferMethodId, + jobject ringBuffer = + (*env)->NewObject(env, ringBufferClass, ringBufferMethodId, ioUringSubmissionQueue, ioUringCompletionQueue); - return ringBuffer; + return ringBuffer; } -static jlong netty_create_file(JNIEnv *env, jclass class) { - return open("io-uring-test.txt", O_RDWR | O_TRUNC | O_CREAT, 0644); +static jint netty_create_file(JNIEnv *env, jclass class) { + return open("io-uring-test.txt", O_RDWR | O_TRUNC | O_CREAT, 0644); } static void netty_io_uring_native_JNI_OnUnLoad(JNIEnv *env) { - // OnUnLoad + // Todo OnUnLoad } // JNI Method Registration Table Begin static const JNINativeMethod method_table[] = { - {"ioUringSetup", "(I)Lio/netty/channel/uring/RingBuffer;", - (void *)netty_io_uring_setup}, - {"createFile", "()J", (void *)netty_create_file}, + {"ioUringSetup", "(I)Lio/netty/channel/uring/RingBuffer;", (void *)netty_io_uring_setup}, + {"createFile", "()I", (void *)netty_create_file}, {"ioUringEnter", "(IIII)I", (void *)netty_io_uring_enter}}; static const jint method_table_size = sizeof(method_table) / sizeof(method_table[0]); // JNI Method Registration Table End JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { - JNIEnv *env; - char *nettyClassName = NULL; + JNIEnv *env; + char *nettyClassName = NULL; - if ((*vm)->GetEnv(vm, (void **)&env, NETTY_JNI_VERSION) != JNI_OK) { - return JNI_ERR; - } - char *packagePrefix = NULL; + if ((*vm)->GetEnv(vm, (void **)&env, NETTY_JNI_VERSION) != JNI_OK) { + return JNI_ERR; + } + char *packagePrefix = NULL; - Dl_info dlinfo; - jint status = 0; + Dl_info dlinfo; + jint status = 0; - if (!dladdr((void *)netty_io_uring_native_JNI_OnUnLoad, &dlinfo)) { - fprintf(stderr, + if (!dladdr((void *)netty_io_uring_native_JNI_OnUnLoad, &dlinfo)) { + fprintf(stderr, "FATAL: transport-native-epoll JNI call to dladdr failed!\n"); - return JNI_ERR; - } - packagePrefix = netty_unix_util_parse_package_prefix( + return JNI_ERR; + } + packagePrefix = netty_unix_util_parse_package_prefix( dlinfo.dli_fname, "netty_transport_native_io_uring", &status); - if (status == JNI_ERR) { - fprintf(stderr, + if (status == JNI_ERR) { + fprintf(stderr, "FATAL: netty_transport_native_io_uring JNI encountered unexpected " "dlinfo.dli_fname: %s\n", dlinfo.dli_fname); - return JNI_ERR; - } + return JNI_ERR; + } - if (netty_unix_util_register_natives(env, packagePrefix, + if (netty_unix_util_register_natives(env, packagePrefix, "io/netty/channel/uring/Native", method_table, method_table_size) != 0) { - printf("netty register natives error\n"); - } + printf("netty register natives error\n"); + } - // Load all c modules that we depend upon + // Load all c modules that we depend upon if (netty_unix_limits_JNI_OnLoad(env, packagePrefix) == JNI_ERR) { goto done; } @@ -269,30 +268,30 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { goto done; } - NETTY_PREPEND(packagePrefix, "io/netty/channel/uring/RingBuffer", + NETTY_PREPEND(packagePrefix, "io/netty/channel/uring/RingBuffer", nettyClassName, done); - NETTY_LOAD_CLASS(env, ringBufferClass, nettyClassName, done); - NETTY_GET_METHOD(env, ringBufferClass, ringBufferMethodId, "", + NETTY_LOAD_CLASS(env, ringBufferClass, nettyClassName, done); + NETTY_GET_METHOD(env, ringBufferClass, ringBufferMethodId, "", "(Lio/netty/channel/uring/IOUringSubmissionQueue;Lio/netty/" "channel/uring/IOUringCompletionQueue;)V", done); - NETTY_PREPEND(packagePrefix, "io/netty/channel/uring/IOUringSubmissionQueue", + NETTY_PREPEND(packagePrefix, "io/netty/channel/uring/IOUringSubmissionQueue", nettyClassName, done); - NETTY_LOAD_CLASS(env, ioUringSubmissionQueueClass, nettyClassName, done); - NETTY_GET_METHOD(env, ioUringSubmissionQueueClass, + NETTY_LOAD_CLASS(env, ioUringSubmissionQueueClass, nettyClassName, done); + NETTY_GET_METHOD(env, ioUringSubmissionQueueClass, ioUringSubmissionQueueMethodId, "", "(JJJJJJJJIJI)V", done); - NETTY_PREPEND(packagePrefix, "io/netty/channel/uring/IOUringCompletionQueue", + NETTY_PREPEND(packagePrefix, "io/netty/channel/uring/IOUringCompletionQueue", nettyClassName, done); - NETTY_LOAD_CLASS(env, ioUringCompletionQueueClass, nettyClassName, done); - NETTY_GET_METHOD(env, ioUringCompletionQueueClass, + NETTY_LOAD_CLASS(env, ioUringCompletionQueueClass, nettyClassName, done); + NETTY_GET_METHOD(env, ioUringCompletionQueueClass, ioUringCommpletionQueueMethodId, "", "(JJJJJJIJI)V", done); -done: - //unload + done: + //unload - return NETTY_JNI_VERSION; -} + return NETTY_JNI_VERSION; +} \ No newline at end of file diff --git a/transport-native-io_uring/src/main/c/syscall.c b/transport-native-io_uring/src/main/c/syscall.c index e9b8e1289a..f3acfbc78b 100644 --- a/transport-native-io_uring/src/main/c/syscall.c +++ b/transport-native-io_uring/src/main/c/syscall.c @@ -19,17 +19,12 @@ #include #include -int sys_io_uring_register(int fd, unsigned opcode, const void *arg, - unsigned nr_args) { - return syscall(__NR_io_uring_register, fd, opcode, arg, nr_args); -} - int sys_io_uring_setup(unsigned entries, struct io_uring_params *p) { - return syscall(__NR_io_uring_setup, entries, p); + return syscall(__NR_io_uring_setup, entries, p); } int sys_io_uring_enter(int fd, unsigned to_submit, unsigned min_complete, unsigned flags, sigset_t *sig) { - return syscall(__NR_io_uring_enter, fd, to_submit, min_complete, flags, sig, + return syscall(__NR_io_uring_enter, fd, to_submit, min_complete, flags, sig, _NSIG / 8); } \ No newline at end of file diff --git a/transport-native-io_uring/src/main/c/syscall.h b/transport-native-io_uring/src/main/c/syscall.h index c3562b0824..8fcf48920e 100644 --- a/transport-native-io_uring/src/main/c/syscall.h +++ b/transport-native-io_uring/src/main/c/syscall.h @@ -24,7 +24,5 @@ extern int sys_io_uring_setup(unsigned entries, struct io_uring_params *p); extern int sys_io_uring_enter(int fd, unsigned to_submit, unsigned min_complete, unsigned flags, sigset_t *sig); -extern int sys_io_uring_register(int fd, unsigned int opcode, const void *arg, - unsigned int nr_args); #endif \ No newline at end of file diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/AbstractIOUringChannel.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/AbstractIOUringChannel.java index 3057a1d751..8edc0204c6 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/AbstractIOUringChannel.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/AbstractIOUringChannel.java @@ -151,7 +151,7 @@ abstract class AbstractIOUringChannel extends AbstractChannel implements UnixCha // Channel/ChannelHandlerContext.read() was called @Override - protected void doBeginRead() throws Exception { + protected void doBeginRead() { final AbstractUringUnsafe unsafe = (AbstractUringUnsafe) unsafe(); if (!uringInReadyPending) { uringInReadyPending = true; diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCompletionQueue.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCompletionQueue.java index 9f8ab935f8..aeafd1cb43 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCompletionQueue.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCompletionQueue.java @@ -17,7 +17,7 @@ package io.netty.channel.uring; import io.netty.util.internal.PlatformDependent; -public class IOUringCompletionQueue { +final class IOUringCompletionQueue { //these offsets are used to access specific properties //CQE (https://github.com/axboe/liburing/blob/master/src/include/liburing/io_uring.h#L162) @@ -42,7 +42,7 @@ public class IOUringCompletionQueue { private final long ringAddress; private final int ringFd; - public IOUringCompletionQueue(long kHeadAddress, long kTailAddress, long kringMaskAddress, long kringEntries, + IOUringCompletionQueue(long kHeadAddress, long kTailAddress, long kringMaskAddress, long kringEntries, long kOverflowAddress, long completionQueueArrayAddress, int ringSize, long ringAddress, int ringFd) { this.kHeadAddress = kHeadAddress; this.kTailAddress = kTailAddress; diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCqe.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCqe.java index 3598cd38d1..7e84d956f4 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCqe.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringCqe.java @@ -15,7 +15,7 @@ */ package io.netty.channel.uring; -class IOUringCqe { +final class IOUringCqe { private final long eventId; private final int res; private final long flags; diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringEventLoop.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringEventLoop.java index 1e0ab5bec7..36914c556c 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringEventLoop.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringEventLoop.java @@ -25,14 +25,14 @@ import java.util.concurrent.Executor; import static io.netty.channel.unix.Errors.*; -class IOUringEventLoop extends SingleThreadEventLoop { +final class IOUringEventLoop extends SingleThreadEventLoop { // events should be unique to identify which event type that was private long eventIdCounter; private final LongObjectHashMap events = new LongObjectHashMap(); private RingBuffer ringBuffer; - protected IOUringEventLoop(final EventLoopGroup parent, final Executor executor, final boolean addTaskWakesUp) { + IOUringEventLoop(final EventLoopGroup parent, final Executor executor, final boolean addTaskWakesUp) { super(parent, executor, addTaskWakesUp); ringBuffer = Native.createRingBuffer(32); } diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerChannelConfig.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerChannelConfig.java index 1b4bbbeb31..86d35557d8 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerChannelConfig.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerChannelConfig.java @@ -32,8 +32,7 @@ import static io.netty.channel.ChannelOption.*; import static io.netty.util.internal.ObjectUtil.*; public class IOUringServerChannelConfig extends IOUringChannelConfig implements ServerSocketChannelConfig { - private volatile int backlog = NetUtil.SOMAXCONN; - private volatile int pendingFastOpenRequestsThreshold; + private volatile int backlog = NetUtil.SOMAXCONN; IOUringServerChannelConfig(AbstractIOUringServerChannel channel) { super(channel); diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerSocketChannel.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerSocketChannel.java index e513a3a64f..544ce46bfb 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerSocketChannel.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringServerSocketChannel.java @@ -23,7 +23,7 @@ import io.netty.channel.unix.Socket; import java.net.InetSocketAddress; import java.net.SocketAddress; -public class IOUringServerSocketChannel extends AbstractIOUringServerChannel implements ServerSocketChannel { +public final class IOUringServerSocketChannel extends AbstractIOUringServerChannel implements ServerSocketChannel { private final IOUringServerSocketChannelConfig config; public IOUringServerSocketChannel() { diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSocketChannel.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSocketChannel.java index d71808a17e..2ed93ab02f 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSocketChannel.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSocketChannel.java @@ -32,7 +32,7 @@ import io.netty.channel.unix.FileDescriptor; import java.net.InetSocketAddress; import java.net.SocketAddress; -public class IOUringSocketChannel extends AbstractIOUringChannel implements SocketChannel { +public final class IOUringSocketChannel extends AbstractIOUringChannel implements SocketChannel { private final IOUringSocketChannelConfig config; IOUringSocketChannel(final Channel parent, final LinuxSocket fd) { diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSubmissionQueue.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSubmissionQueue.java index b9c122739e..6962fa9e95 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSubmissionQueue.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/IOUringSubmissionQueue.java @@ -17,7 +17,7 @@ package io.netty.channel.uring; import io.netty.util.internal.PlatformDependent; -public class IOUringSubmissionQueue { +final class IOUringSubmissionQueue { private static final int SQE_SIZE = 64; private static final int INT_SIZE = Integer.BYTES; //no 32 Bit support? @@ -53,7 +53,7 @@ public class IOUringSubmissionQueue { private final long ringAddress; private final int ringFd; - public IOUringSubmissionQueue(long kHeadAddress, long kTailAddress, long kRingMaskAddress, long kRingEntriesAddress, + IOUringSubmissionQueue(long kHeadAddress, long kTailAddress, long kRingMaskAddress, long kRingEntriesAddress, long fFlagsAdress, long kDroppedAddress, long arrayAddress, long submissionQueueArrayAddress, int ringSize, long ringAddress, int ringFd) { diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java index a46262526a..0ef045505d 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java @@ -17,10 +17,10 @@ package io.netty.channel.uring; import io.netty.channel.unix.Socket; -public class LinuxSocket extends Socket { +final class LinuxSocket extends Socket { private final int fd; - public LinuxSocket(final int fd) { + LinuxSocket(final int fd) { super(fd); this.fd = fd; } diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/Native.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/Native.java index 37cf61f930..536ca795eb 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/Native.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/Native.java @@ -15,19 +15,14 @@ */ package io.netty.channel.uring; -import io.netty.channel.unix.FileDescriptor; import io.netty.channel.unix.Socket; import io.netty.util.internal.NativeLibraryLoader; import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.SystemPropertyUtil; import io.netty.util.internal.ThrowableUtil; -import io.netty.util.internal.logging.InternalLogger; -import io.netty.util.internal.logging.InternalLoggerFactory; - -import java.io.IOException; import java.util.Locale; -public final class Native { +final class Native { private static final int DEFAULT_RING_SIZE = SystemPropertyUtil.getInt("io.netty.uring.ringSize", 32); static { @@ -50,7 +45,7 @@ public final class Native { public static native int ioUringEnter(int ringFd, int toSubmit, int minComplete, int flags); // for testing(it is only temporary) - public static native long createFile(); + public static native int createFile(); private Native() { // utility diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java index 3d266698d8..b92b4b1500 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java @@ -16,7 +16,7 @@ package io.netty.channel.uring; -class RingBuffer { +final class RingBuffer { private final IOUringSubmissionQueue ioUringSubmissionQueue; private final IOUringCompletionQueue ioUringCompletionQueue; diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/package-info.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/package-info.java index 6abe7880ae..27c07e41a6 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/package-info.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/package-info.java @@ -14,6 +14,7 @@ * under the License. */ /** - * io_uring + * io_uring is a high I/O performance scalable interface for fully + * asynchronous Linux syscalls io_uring doc */ package io.netty.channel.uring; diff --git a/transport-native-io_uring/src/test/java/io/netty/channel/uring/NativeTest.java b/transport-native-io_uring/src/test/java/io/netty/channel/uring/NativeTest.java index b9da652418..76d24ac136 100644 --- a/transport-native-io_uring/src/test/java/io/netty/channel/uring/NativeTest.java +++ b/transport-native-io_uring/src/test/java/io/netty/channel/uring/NativeTest.java @@ -15,16 +15,10 @@ */ package io.netty.channel.uring; -import io.netty.channel.unix.Socket; import org.junit.Test; - -import java.io.FileInputStream; - -import java.io.File; - +import java.nio.charset.Charset; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.UnpooledByteBufAllocator; -import io.netty.buffer.UnpooledUnsafeDirectByteBuf; import static org.junit.Assert.*; import io.netty.buffer.ByteBuf; @@ -37,8 +31,7 @@ public class NativeTest { ByteBufAllocator allocator = new UnpooledByteBufAllocator(true); ByteBuf writeEventByteBuf = allocator.directBuffer(100); String inputString = "Hello World!"; - byte[] byteArrray = inputString.getBytes(); - writeEventByteBuf.writeBytes(byteArrray); + writeEventByteBuf.writeCharSequence(inputString, Charset.forName("UTF-8")); int fd = (int) Native.createFile(); @@ -73,7 +66,7 @@ public class NativeTest { byte[] dataRead = new byte[inputString.length()]; readEventByteBuf.readBytes(dataRead); - assertEquals(inputString, new String(dataRead)); + assertArrayEquals(inputString.getBytes(), dataRead); readEventByteBuf.release(); } } diff --git a/transport-native-unix-common/src/main/java/io/netty/channel/unix/FileDescriptor.java b/transport-native-unix-common/src/main/java/io/netty/channel/unix/FileDescriptor.java index 4c1c6ff0f8..a1dd9738ea 100644 --- a/transport-native-unix-common/src/main/java/io/netty/channel/unix/FileDescriptor.java +++ b/transport-native-unix-common/src/main/java/io/netty/channel/unix/FileDescriptor.java @@ -201,6 +201,7 @@ public class FileDescriptor { } static boolean isClosed(int state) { + System.out.println("State: " + state); return (state & STATE_CLOSED_MASK) != 0; }