IoUringRecvByteAllocatorHandle Class — netty Architecture
Architecture documentation for the IoUringRecvByteAllocatorHandle class in IoUringRecvByteAllocatorHandle.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 08bc4bb1_910f_9781_5d98_c8b2613fc409["IoUringRecvByteAllocatorHandle"] 3551ff99_4655_1b53_3343_da4a8de038f7["IoUringRecvByteAllocatorHandle.java"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|defined in| 3551ff99_4655_1b53_3343_da4a8de038f7 22cc9e99_e658_3e13_cf32_756d5a32796e["IoUringRecvByteAllocatorHandle()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| 22cc9e99_e658_3e13_cf32_756d5a32796e e4deb5eb_e7cb_113d_45a1_1c1c237483d5["reset()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| e4deb5eb_e7cb_113d_45a1_1c1c237483d5 db8b2aec_e226_afb9_e617_2734eca7c69c["rdHupReceived()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| db8b2aec_e226_afb9_e617_2734eca7c69c 5af9f408_e743_385d_2c09_af8c2811c0ee["ByteBuf()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| 5af9f408_e743_385d_2c09_af8c2811c0ee e5a5a1c4_23bc_5576_5e82_5af7c93bf319["continueReading()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| e5a5a1c4_23bc_5576_5e82_5af7c93bf319 8d0fb07c_5ac9_70c6_4745_6526d9985fe6["isFirstRead()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| 8d0fb07c_5ac9_70c6_4745_6526d9985fe6 1ba24467_3632_1952_37b8_55cbd05d0fd2["readComplete()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| 1ba24467_3632_1952_37b8_55cbd05d0fd2 879ed61f_9390_7cf8_4e7d_83f82c6e6090["isReadComplete()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| 879ed61f_9390_7cf8_4e7d_83f82c6e6090 261310b6_3157_883d_45e6_15537eead636["lastBytesRead()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| 261310b6_3157_883d_45e6_15537eead636 fe79522f_66c6_ff0b_d796_3691156e3e93["incMessagesRead()"] 08bc4bb1_910f_9781_5d98_c8b2613fc409 -->|method| fe79522f_66c6_ff0b_d796_3691156e3e93
Relationship Graph
Source Code
transport-classes-io_uring/src/main/java/io/netty/channel/uring/IoUringRecvByteAllocatorHandle.java lines 25–98
final class IoUringRecvByteAllocatorHandle extends RecvByteBufAllocator.DelegatingHandle
implements RecvByteBufAllocator.ExtendedHandle {
private final PreferredDirectByteBufAllocator preferredDirectByteBufAllocator =
new PreferredDirectByteBufAllocator();
// We need to continue reading as long as we received something when using io_uring. Otherwise
// we will not be able to batch things in an efficient way.
private final UncheckedBooleanSupplier defaultSupplier = () -> lastBytesRead() > 0;
IoUringRecvByteAllocatorHandle(RecvByteBufAllocator.ExtendedHandle handle) {
super(handle);
}
private boolean firstRead;
private boolean rdHupReceived;
private boolean readComplete;
@Override
public void reset(ChannelConfig config) {
super.reset(config);
readComplete = false;
firstRead = true;
}
void rdHupReceived() {
this.rdHupReceived = true;
}
@Override
public ByteBuf allocate(ByteBufAllocator alloc) {
// We need to ensure we always allocate a direct ByteBuf as we can only use a direct buffer to read via JNI.
preferredDirectByteBufAllocator.updateAllocator(alloc);
return delegate().allocate(preferredDirectByteBufAllocator);
}
@Override
public boolean continueReading() {
// Ensure we use the our own supplier that will take care of reading data until there is nothing left.
return continueReading(defaultSupplier);
}
@Override
public boolean continueReading(UncheckedBooleanSupplier maybeMoreDataSupplier) {
// If we received an POLLRDHUP we need to continue draining the input until there is nothing left.
return ((RecvByteBufAllocator.ExtendedHandle) delegate()).continueReading(maybeMoreDataSupplier)
|| rdHupReceived;
}
public boolean isFirstRead() {
return firstRead;
}
@Override
public void readComplete() {
super.readComplete();
readComplete = true;
}
boolean isReadComplete() {
return readComplete;
}
@Override
public void lastBytesRead(int bytes) {
firstRead = false;
super.lastBytesRead(bytes);
}
@Override
public void incMessagesRead(int numMessages) {
firstRead = false;
super.incMessagesRead(numMessages);
}
}
Defined In
Source
Frequently Asked Questions
What is the IoUringRecvByteAllocatorHandle class?
IoUringRecvByteAllocatorHandle is a class in the netty codebase, defined in transport-classes-io_uring/src/main/java/io/netty/channel/uring/IoUringRecvByteAllocatorHandle.java.
Where is IoUringRecvByteAllocatorHandle defined?
IoUringRecvByteAllocatorHandle is defined in transport-classes-io_uring/src/main/java/io/netty/channel/uring/IoUringRecvByteAllocatorHandle.java at line 25.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free