Home / Class/ IoUringBufferRingTest Class — netty Architecture

IoUringBufferRingTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  d2c51010_6ec0_7e8f_47d3_2646c5769913["IoUringBufferRingTest"]
  2c43b1a8_767c_ec30_587e_efa9a1ca3aea["IoUringBufferRingTest.java"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|defined in| 2c43b1a8_767c_ec30_587e_efa9a1ca3aea
  fd132d50_4688_6de2_32dd_8cc1987fa8f4["loadJNI()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| fd132d50_4688_6de2_32dd_8cc1987fa8f4
  c788d603_3b21_63e3_6c6d_bbc6fb839f95["testRegister()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| c788d603_3b21_63e3_6c6d_bbc6fb839f95
  af73385f_80ca_e32a_d08a_f18c6d2e391c["ByteBuf()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| af73385f_80ca_e32a_d08a_f18c6d2e391c
  f8d5e14e_90bc_29e8_1896_4012995c3743["testProviderBufferRead()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| f8d5e14e_90bc_29e8_1896_4012995c3743
  b33cd587_3ec4_dac6_7ee2_bd6de83bf125["recvsendBundleEnabled()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| b33cd587_3ec4_dac6_7ee2_bd6de83bf125
  369bda88_bf7f_5238_bc6c_456af4f76039["testProviderBufferReadWithRecvsendBundle()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| 369bda88_bf7f_5238_bc6c_456af4f76039
  b32f1401_36aa_7bfe_a47f_20c524820ad0["testCloseEventLoopGroupWhileConnected()"]
  d2c51010_6ec0_7e8f_47d3_2646c5769913 -->|method| b32f1401_36aa_7bfe_a47f_20c524820ad0

Relationship Graph

Source Code

transport-native-io_uring/src/test/java/io/netty/channel/uring/IoUringBufferRingTest.java lines 47–300

public class IoUringBufferRingTest {
    @BeforeAll
    public static void loadJNI() {
        assumeTrue(IoUring.isAvailable());
        assumeTrue(IoUring.isRegisterBufferRingSupported());
    }

    @Test
    public void testRegister() {
        // using cqeSize on purpose NOT a power of 2
        RingBuffer ringBuffer = Native.createRingBuffer(8, 15, 0);
        try {
            int ringFd = ringBuffer.fd();
            long ioUringBufRingAddr = Native.ioUringRegisterBufRing(ringFd, 4, (short) 1, 0);
            assumeTrue(
                    ioUringBufRingAddr > 0,
                    "ioUringSetupBufRing result must great than 0, but now result is " + ioUringBufRingAddr);
            int freeRes = Native.ioUringUnRegisterBufRing(ringFd, ioUringBufRingAddr, 4, (short) 1);
            assertEquals(
                    0,
                    freeRes,
                    "ioUringFreeBufRing result must be 0, but now result is " + freeRes
            );
            // let io_uring to "fix" it
            assertEquals(16, ringBuffer.ioUringCompletionQueue().ringCapacity);
        } finally {
            ringBuffer.close();
        }
    }

    private static ByteBuf unwrapLeakAware(ByteBuf buf) {
        // If its a sub-type of WrappedByteBuf we know its because it was wrapped for leak-detection.
        if (buf instanceof WrappedByteBuf) {
            return buf.unwrap();
        }
        return buf;
    }

    @ParameterizedTest
    @ValueSource(booleans = {true, false})
    public void testProviderBufferRead(boolean incremental) throws InterruptedException {
        if (incremental) {
            assumeTrue(IoUring.isRegisterBufferRingIncSupported());
        }
        final BlockingQueue<ByteBuf> bufferSyncer = new LinkedBlockingQueue<>();
        IoUringIoHandlerConfig ioUringIoHandlerConfiguration = new IoUringIoHandlerConfig();
        IoUringBufferRingConfig bufferRingConfig =
                IoUringBufferRingConfig.builder()
                        .bufferGroupId((short) 1)
                        .bufferRingSize((short) 2)
                        .batchSize(2).incremental(incremental)
                        .allocator(new IoUringFixedBufferRingAllocator(1024))
                        .batchAllocation(false)
                        .build();

        IoUringBufferRingConfig bufferRingConfig1 =
                IoUringBufferRingConfig.builder()
                        .bufferGroupId((short) 2)
                        .bufferRingSize((short) 16)
                        .batchSize(8)
                        .incremental(incremental)
                        .allocator(new IoUringFixedBufferRingAllocator(1024))
                        .batchAllocation(true)
                        .build();
        ioUringIoHandlerConfiguration.setBufferRingConfig(bufferRingConfig, bufferRingConfig1);

        MultiThreadIoEventLoopGroup group = new MultiThreadIoEventLoopGroup(1,
                IoUringIoHandler.newFactory(ioUringIoHandlerConfiguration)
        );
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap.channel(IoUringServerSocketChannel.class);

        String randomString = UUID.randomUUID().toString();
        int randomStringLength = randomString.length();

        ArrayBlockingQueue<IoUringBufferRingExhaustedEvent> eventSyncer = new ArrayBlockingQueue<>(1);

        Channel serverChannel = serverBootstrap.group(group)
                .childHandler(new ChannelInboundHandlerAdapter() {
                    @Override
                    public void channelRead(ChannelHandlerContext ctx, Object msg) {

Frequently Asked Questions

What is the IoUringBufferRingTest class?
IoUringBufferRingTest is a class in the netty codebase, defined in transport-native-io_uring/src/test/java/io/netty/channel/uring/IoUringBufferRingTest.java.
Where is IoUringBufferRingTest defined?
IoUringBufferRingTest is defined in transport-native-io_uring/src/test/java/io/netty/channel/uring/IoUringBufferRingTest.java at line 47.

Analyze Your Own Codebase

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

Try Supermodel Free