Class IOUringEventLoop

java.lang.Object
java.util.concurrent.AbstractExecutorService
io.netty.util.concurrent.AbstractEventExecutor
io.netty.util.concurrent.AbstractScheduledEventExecutor
io.netty.util.concurrent.SingleThreadEventExecutor
io.netty.channel.SingleThreadEventLoop
io.netty.incubator.channel.uring.IOUringEventLoop
All Implemented Interfaces:
io.netty.channel.EventLoop, io.netty.channel.EventLoopGroup, io.netty.util.concurrent.EventExecutor, io.netty.util.concurrent.EventExecutorGroup, io.netty.util.concurrent.OrderedEventExecutor, io.netty.util.concurrent.ThreadAwareExecutor, Iterable<io.netty.util.concurrent.EventExecutor>, Executor, ExecutorService, ScheduledExecutorService

public final class IOUringEventLoop extends io.netty.channel.SingleThreadEventLoop
An EventLoop that uses IO_URING.
  • Nested Class Summary

    Nested classes/interfaces inherited from class io.netty.channel.SingleThreadEventLoop

    io.netty.channel.SingleThreadEventLoop.ChannelsReadOnlyIterator<T extends io.netty.channel.Channel>

    Nested classes/interfaces inherited from class io.netty.util.concurrent.SingleThreadEventExecutor

    io.netty.util.concurrent.SingleThreadEventExecutor.NonWakeupRunnable

    Nested classes/interfaces inherited from class io.netty.util.concurrent.AbstractEventExecutor

    io.netty.util.concurrent.AbstractEventExecutor.LazyRunnable
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final long
     
     
    private final io.netty.util.collection.IntObjectMap<AbstractIOUringChannel>
     
    private final io.netty.channel.unix.FileDescriptor
     
    private final long
     
    private final byte[]
     
    private final byte[]
     
    private static final io.netty.util.internal.logging.InternalLogger
     
    private final AtomicLong
     
    private static final long
     
    private boolean
     
    private long
     
    private short
    This is a "generation" counter that is passed to addTimeout.
    private final RingBuffer
     
    private final Runnable
     

    Fields inherited from class io.netty.channel.SingleThreadEventLoop

    DEFAULT_MAX_PENDING_TASKS
  • Constructor Summary

    Constructors
    Constructor
    Description
    IOUringEventLoop(IOUringEventLoopGroup parent, Executor executor, int ringSize, int iosqeAsyncThreshold, io.netty.util.concurrent.RejectedExecutionHandler rejectedExecutionHandler, io.netty.channel.EventLoopTaskQueueFactory queueFactory)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    (package private) void
     
    private void
     
    protected void
     
    private void
     
    (package private) RingBuffer
     
    private void
    handle(int fd, int res, int flags, byte op, short data)
     
    private void
     
    (package private) void
    Visible only for testing!
    private void
    handlePollAdd(AbstractIOUringChannel channel, int res, int pollMask)
     
    private void
    handleRead(AbstractIOUringChannel channel, int res, int data)
     
    private void
    handleWrite(AbstractIOUringChannel channel, int res, int data)
     
    (package private) byte[]
    byte[] that can be used as temporary storage to encode the ipv4 address
    (package private) byte[]
    byte[] that can be used as temporary storage to encode the ipv6 address
    protected Queue<Runnable>
    newTaskQueue(int maxPendingTasks)
     
    private static Queue<Runnable>
    newTaskQueue(io.netty.channel.EventLoopTaskQueueFactory queueFactory)
     
    private static Queue<Runnable>
    newTaskQueue0(int maxPendingTasks)
     
    (package private) void
     
    protected void
    run()
     
    void
    Submit the IO so the kernel can process it.
    protected void
    wakeup(boolean inEventLoop)
     

    Methods inherited from class io.netty.channel.SingleThreadEventLoop

    afterRunningAllTasks, executeAfterEventLoopIteration, hasTasks, next, parent, pendingTasks, register, register, register, registeredChannels, registeredChannelsIterator

    Methods inherited from class io.netty.util.concurrent.SingleThreadEventExecutor

    addShutdownHook, addTask, awaitTermination, canSuspend, canSuspend, confirmShutdown, deadlineNanos, delayNanos, execute, inEventLoop, interruptThread, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isShuttingDown, isSuspended, isTerminated, lazyExecute, newTaskQueue, peekTask, pollTask, pollTaskFrom, reject, reject, removeShutdownHook, removeTask, runAllTasks, runAllTasks, runAllTasksFrom, runScheduledAndExecutorTasks, shutdown, shutdownGracefully, takeTask, terminationFuture, threadProperties, trySuspend, updateLastExecutionTime, wakesUpForTask

    Methods inherited from class io.netty.util.concurrent.AbstractScheduledEventExecutor

    afterScheduledTaskSubmitted, beforeScheduledTaskSubmitted, cancelScheduledTasks, deadlineToDelayNanos, delayNanos, fetchFromScheduledTaskQueue, getCurrentTimeNanos, hasScheduledTasks, initialNanoTime, nanoTime, nextScheduledTaskDeadlineNanos, nextScheduledTaskNano, pollScheduledTask, pollScheduledTask, schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay, ticker, validateScheduled

    Methods inherited from class io.netty.util.concurrent.AbstractEventExecutor

    iterator, newTaskFor, newTaskFor, runTask, safeExecute, shutdownGracefully, shutdownNow, submit, submit, submit

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface io.netty.util.concurrent.EventExecutor

    inEventLoop, inEventLoop, isExecutorThread, isSuspended, newFailedFuture, newProgressivePromise, newPromise, newSucceededFuture, trySuspend

    Methods inherited from interface io.netty.util.concurrent.EventExecutorGroup

    isShuttingDown, iterator, schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay, shutdown, shutdownGracefully, shutdownGracefully, shutdownNow, submit, submit, submit, terminationFuture, ticker

    Methods inherited from interface java.util.concurrent.Executor

    execute

    Methods inherited from interface java.util.concurrent.ExecutorService

    awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • Field Details

    • logger

      private static final io.netty.util.internal.logging.InternalLogger logger
    • eventfdReadBuf

      private final long eventfdReadBuf
    • channels

      private final io.netty.util.collection.IntObjectMap<AbstractIOUringChannel> channels
    • ringBuffer

      private final RingBuffer ringBuffer
    • AWAKE

      private static final long AWAKE
      See Also:
    • NONE

      private static final long NONE
      See Also:
    • nextWakeupNanos

      private final AtomicLong nextWakeupNanos
    • eventfd

      private final io.netty.channel.unix.FileDescriptor eventfd
    • inet4AddressArray

      private final byte[] inet4AddressArray
    • inet6AddressArray

      private final byte[] inet6AddressArray
    • callback

      private final IOUringCompletionQueueCallback callback
    • submitIOTask

      private final Runnable submitIOTask
    • prevDeadlineNanos

      private long prevDeadlineNanos
    • prevTimeoutGeneration

      private short prevTimeoutGeneration
      This is a "generation" counter that is passed to addTimeout. It ensures that the expiry of a previous timeout doesn't make us think the current timeout has expired, which could lead to wrongly not removing the current timeout when it's adjusted again.
    • pendingWakeup

      private boolean pendingWakeup
  • Constructor Details

    • IOUringEventLoop

      IOUringEventLoop(IOUringEventLoopGroup parent, Executor executor, int ringSize, int iosqeAsyncThreshold, io.netty.util.concurrent.RejectedExecutionHandler rejectedExecutionHandler, io.netty.channel.EventLoopTaskQueueFactory queueFactory)
  • Method Details

    • submitIO

      public void submitIO()
      Submit the IO so the kernel can process it. This method can be called to "force" the submission (before it is submitted by netty itself).
    • newTaskQueue

      private static Queue<Runnable> newTaskQueue(io.netty.channel.EventLoopTaskQueueFactory queueFactory)
    • newTaskQueue

      protected Queue<Runnable> newTaskQueue(int maxPendingTasks)
      Overrides:
      newTaskQueue in class io.netty.util.concurrent.SingleThreadEventExecutor
    • newTaskQueue0

      private static Queue<Runnable> newTaskQueue0(int maxPendingTasks)
    • add

      void add(AbstractIOUringChannel ch)
    • remove

      void remove(AbstractIOUringChannel ch)
    • closeAll

      private void closeAll()
    • run

      protected void run()
      Specified by:
      run in class io.netty.util.concurrent.SingleThreadEventExecutor
    • handleLoopException

      void handleLoopException(Throwable t)
      Visible only for testing!
    • handle

      private void handle(int fd, int res, int flags, byte op, short data)
    • handleRead

      private void handleRead(AbstractIOUringChannel channel, int res, int data)
    • handleWrite

      private void handleWrite(AbstractIOUringChannel channel, int res, int data)
    • handlePollAdd

      private void handlePollAdd(AbstractIOUringChannel channel, int res, int pollMask)
    • addEventFdRead

      private void addEventFdRead(IOUringSubmissionQueue submissionQueue)
    • handleConnect

      private void handleConnect(AbstractIOUringChannel channel, int res)
    • cleanup

      protected void cleanup()
      Overrides:
      cleanup in class io.netty.util.concurrent.SingleThreadEventExecutor
    • getRingBuffer

      RingBuffer getRingBuffer()
    • wakeup

      protected void wakeup(boolean inEventLoop)
      Overrides:
      wakeup in class io.netty.util.concurrent.SingleThreadEventExecutor
    • inet4AddressArray

      byte[] inet4AddressArray()
      byte[] that can be used as temporary storage to encode the ipv4 address
    • inet6AddressArray

      byte[] inet6AddressArray()
      byte[] that can be used as temporary storage to encode the ipv6 address