Home / Class/ RingBuffer Class — netty Architecture

RingBuffer Class — netty Architecture

Architecture documentation for the RingBuffer class in RingBuffer.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  116af965_145c_bf54_06b4_e3e1905a65e4["RingBuffer"]
  dd4eb691_bbc3_bc2b_1ef4_4b7b794e6d63["RingBuffer.java"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|defined in| dd4eb691_bbc3_bc2b_1ef4_4b7b794e6d63
  0c594705_37c3_e617_8ff3_b4bded516297["RingBuffer()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| 0c594705_37c3_e617_8ff3_b4bded516297
  e1de2f3b_db8e_326e_9e50_9869c1ee5b81["enable()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| e1de2f3b_db8e_326e_9e50_9869c1ee5b81
  f038049e_6758_d06f_9e8b_6f4a27e63c10["fd()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| f038049e_6758_d06f_9e8b_6f4a27e63c10
  d303d2ba_054d_1497_466c_6b5b3b91ba09["features()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| d303d2ba_054d_1497_466c_6b5b3b91ba09
  a809e2ff_1535_c528_68a7_963078208cee["SubmissionQueue()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| a809e2ff_1535_c528_68a7_963078208cee
  aa758ef6_c4a4_28ed_ce13_5902ea421687["CompletionQueue()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| aa758ef6_c4a4_28ed_ce13_5902ea421687
  1a16d931_23c3_4bff_2b9d_8834856d2e5a["close()"]
  116af965_145c_bf54_06b4_e3e1905a65e4 -->|method| 1a16d931_23c3_4bff_2b9d_8834856d2e5a

Relationship Graph

Source Code

transport-classes-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java lines 19–77

final class RingBuffer {
    private final SubmissionQueue ioUringSubmissionQueue;
    private final CompletionQueue ioUringCompletionQueue;
    private final int features;
    private boolean closed;

    RingBuffer(SubmissionQueue ioUringSubmissionQueue,
               CompletionQueue ioUringCompletionQueue, int features) {
        this.ioUringSubmissionQueue = ioUringSubmissionQueue;
        this.ioUringCompletionQueue = ioUringCompletionQueue;
        this.features = features;
    }

    /**
     * Enable ring. This method must be called from the same method that will call {@link SubmissionQueue#submit()} and
     * {@link SubmissionQueue#submitAndWait()}.
     */
    void enable() {
        // We create our ring in disabled mode and so need to enable it first.
        Native.ioUringRegisterEnableRings(fd());
        // Now also register the ring filedescriptor itself. This needs to happen in the same thread
        // that will also call the io_uring_enter(...)
        ioUringSubmissionQueue.tryRegisterRingFd();
    }

    int fd() {
        return ioUringCompletionQueue.ringFd;
    }

    int features() {
        return features;
    }

    SubmissionQueue ioUringSubmissionQueue() {
        return this.ioUringSubmissionQueue;
    }

    CompletionQueue ioUringCompletionQueue() {
        return this.ioUringCompletionQueue;
    }

    void close() {
        if (closed) {
            return;
        }
        closed = true;
        ioUringSubmissionQueue.close();
        ioUringCompletionQueue.close();
        Native.ioUringExit(
                ioUringSubmissionQueue.submissionQueueArrayAddress(),
                ioUringSubmissionQueue.ringEntries,
                ioUringSubmissionQueue.ringAddress,
                ioUringSubmissionQueue.ringSize,
                ioUringCompletionQueue.ringAddress,
                ioUringCompletionQueue.ringSize,
                ioUringSubmissionQueue.ringFd,
                ioUringSubmissionQueue.enterRingFd);
    }
}

Frequently Asked Questions

What is the RingBuffer class?
RingBuffer is a class in the netty codebase, defined in transport-classes-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java.
Where is RingBuffer defined?
RingBuffer is defined in transport-classes-io_uring/src/main/java/io/netty/channel/uring/RingBuffer.java at line 19.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free