Package io.netty.channel
Class ChannelOutboundBuffer
java.lang.Object
io.netty.channel.ChannelOutboundBuffer
(Transport implementors only) an internal data structure used by
AbstractChannel
to store its pending
outbound write requests.
All methods must be called by a transport implementation from an I/O thread, except the following ones:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static final class
static interface
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Channel
(package private) static final int
private Runnable
private int
private ChannelOutboundBuffer.Entry
private boolean
private static final InternalLogger
private static final FastThreadLocal
<ByteBuffer[]> private int
private long
private ChannelOutboundBuffer.Entry
private static final AtomicLongFieldUpdater
<ChannelOutboundBuffer> private long
private ChannelOutboundBuffer.Entry
private int
private static final AtomicIntegerFieldUpdater
<ChannelOutboundBuffer> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
addFlush()
Add a flush to thisChannelOutboundBuffer
.void
addMessage
(Object msg, int size, ChannelPromise promise) Add given message to thisChannelOutboundBuffer
.long
Get how many bytes can be written untilisWritable()
returnsfalse
.long
Get how many bytes must be drained from the underlying buffer untilisWritable()
returnstrue
.private void
private void
clearUserDefinedWritability
(int index) (package private) void
(package private) void
close
(ClosedChannelException cause) current()
Return the current message to write ornull
if nothing was flushed before and so is ready to be written.long
Return the current message flush progress.(package private) void
decrementPendingOutboundBytes
(long size) Decrement the pending bytes which will be written at some point.private void
decrementPendingOutboundBytes
(long size, boolean invokeLater, boolean notifyWritability) private static ByteBuffer[]
expandNioBufferArray
(ByteBuffer[] array, int neededSpace, int size) (package private) void
failFlushed
(Throwable cause, boolean notify) private void
fireChannelWritabilityChanged
(boolean invokeLater) void
CallChannelOutboundBuffer.MessageProcessor.processMessage(Object)
for each flushed message in thisChannelOutboundBuffer
untilChannelOutboundBuffer.MessageProcessor.processMessage(Object)
returnsfalse
or there are no more flushed messages to process.boolean
getUserDefinedWritability
(int index) Returnstrue
if and only if the user-defined writability flag at the specified index is set totrue
.(package private) void
incrementPendingOutboundBytes
(long size) Increment the pending bytes which will be written at some point.private void
incrementPendingOutboundBytes
(long size, boolean invokeLater) boolean
isEmpty()
private boolean
boolean
Returnstrue
if and only if the total number of pending bytes did not exceed the write watermark of theChannel
and no user-defined writability flag has been set tofalse
.int
Returns the number ofByteBuffer
that can be written out of theByteBuffer
array that was obtained vianioBuffers()
.Returns an array of direct NIO buffers if the currently pending messages are made ofByteBuf
only.nioBuffers
(int maxCount, long maxBytes) Returns an array of direct NIO buffers if the currently pending messages are made ofByteBuf
only.private static int
nioBuffers
(ChannelOutboundBuffer.Entry entry, ByteBuf buf, ByteBuffer[] nioBuffers, int nioBufferCount, int maxCount) long
Returns the number of bytes that can be written out of theByteBuffer
array that was obtained vianioBuffers()
.void
progress
(long amount) Notify theChannelPromise
of the current message about writing progress.void
recycle()
Deprecated.boolean
remove()
Will remove the current message, mark itsChannelPromise
as success and returntrue
.boolean
Will remove the current message, mark itsChannelPromise
as failure using the givenThrowable
and returntrue
.private boolean
void
removeBytes
(long writtenBytes) Removes the fully written entries and update the reader index of the partially written entry.private void
private static void
safeFail
(ChannelPromise promise, Throwable cause) private static void
safeSuccess
(ChannelPromise promise) private void
setUnwritable
(boolean invokeLater) private void
setUserDefinedWritability
(int index) void
setUserDefinedWritability
(int index, boolean writable) Sets a user-defined writability flag at the specified index.private void
setWritable
(boolean invokeLater) int
size()
Returns the number of flushed messages in thisChannelOutboundBuffer
.private static long
long
private static int
writabilityMask
(int index)
-
Field Details
-
CHANNEL_OUTBOUND_BUFFER_ENTRY_OVERHEAD
static final int CHANNEL_OUTBOUND_BUFFER_ENTRY_OVERHEAD -
logger
-
NIO_BUFFERS
-
channel
-
flushedEntry
-
unflushedEntry
-
tailEntry
-
flushed
private int flushed -
nioBufferCount
private int nioBufferCount -
nioBufferSize
private long nioBufferSize -
inFail
private boolean inFail -
TOTAL_PENDING_SIZE_UPDATER
-
totalPendingSize
private volatile long totalPendingSize -
UNWRITABLE_UPDATER
-
unwritable
private volatile int unwritable -
fireChannelWritabilityChangedTask
-
-
Constructor Details
-
ChannelOutboundBuffer
ChannelOutboundBuffer(AbstractChannel channel)
-
-
Method Details
-
addMessage
Add given message to thisChannelOutboundBuffer
. The givenChannelPromise
will be notified once the message was written. -
addFlush
public void addFlush()Add a flush to thisChannelOutboundBuffer
. This means all previous added messages are marked as flushed and so you will be able to handle them. -
incrementPendingOutboundBytes
void incrementPendingOutboundBytes(long size) Increment the pending bytes which will be written at some point. This method is thread-safe! -
incrementPendingOutboundBytes
private void incrementPendingOutboundBytes(long size, boolean invokeLater) -
decrementPendingOutboundBytes
void decrementPendingOutboundBytes(long size) Decrement the pending bytes which will be written at some point. This method is thread-safe! -
decrementPendingOutboundBytes
private void decrementPendingOutboundBytes(long size, boolean invokeLater, boolean notifyWritability) -
total
-
current
Return the current message to write ornull
if nothing was flushed before and so is ready to be written. -
currentProgress
public long currentProgress()Return the current message flush progress.- Returns:
0
if nothing was flushed before for the current message or there is no current message
-
progress
public void progress(long amount) Notify theChannelPromise
of the current message about writing progress. -
remove
public boolean remove()Will remove the current message, mark itsChannelPromise
as success and returntrue
. If no flushed message exists at the time this method is called it will returnfalse
to signal that no more messages are ready to be handled. -
remove
Will remove the current message, mark itsChannelPromise
as failure using the givenThrowable
and returntrue
. If no flushed message exists at the time this method is called it will returnfalse
to signal that no more messages are ready to be handled. -
remove0
-
removeEntry
-
removeBytes
public void removeBytes(long writtenBytes) Removes the fully written entries and update the reader index of the partially written entry. This operation assumes all messages in this buffer isByteBuf
. -
clearNioBuffers
private void clearNioBuffers() -
nioBuffers
Returns an array of direct NIO buffers if the currently pending messages are made ofByteBuf
only.nioBufferCount()
andnioBufferSize()
will return the number of NIO buffers in the returned array and the total number of readable bytes of the NIO buffers respectively.Note that the returned array is reused and thus should not escape
AbstractChannel.doWrite(ChannelOutboundBuffer)
. Refer toNioSocketChannel.doWrite(ChannelOutboundBuffer)
for an example. -
nioBuffers
Returns an array of direct NIO buffers if the currently pending messages are made ofByteBuf
only.nioBufferCount()
andnioBufferSize()
will return the number of NIO buffers in the returned array and the total number of readable bytes of the NIO buffers respectively.Note that the returned array is reused and thus should not escape
AbstractChannel.doWrite(ChannelOutboundBuffer)
. Refer toNioSocketChannel.doWrite(ChannelOutboundBuffer)
for an example.- Parameters:
maxCount
- The maximum amount of buffers that will be added to the return value.maxBytes
- A hint toward the maximum number of bytes to include as part of the return value. Note that this value maybe exceeded because we make a best effort to include at least 1ByteBuffer
in the return value to ensure write progress is made.
-
nioBuffers
private static int nioBuffers(ChannelOutboundBuffer.Entry entry, ByteBuf buf, ByteBuffer[] nioBuffers, int nioBufferCount, int maxCount) -
expandNioBufferArray
-
nioBufferCount
public int nioBufferCount()Returns the number ofByteBuffer
that can be written out of theByteBuffer
array that was obtained vianioBuffers()
. This method MUST be called afternioBuffers()
was called. -
nioBufferSize
public long nioBufferSize()Returns the number of bytes that can be written out of theByteBuffer
array that was obtained vianioBuffers()
. This method MUST be called afternioBuffers()
was called. -
isWritable
public boolean isWritable()Returnstrue
if and only if the total number of pending bytes did not exceed the write watermark of theChannel
and no user-defined writability flag has been set tofalse
. -
getUserDefinedWritability
public boolean getUserDefinedWritability(int index) Returnstrue
if and only if the user-defined writability flag at the specified index is set totrue
. -
setUserDefinedWritability
public void setUserDefinedWritability(int index, boolean writable) Sets a user-defined writability flag at the specified index. -
setUserDefinedWritability
private void setUserDefinedWritability(int index) -
clearUserDefinedWritability
private void clearUserDefinedWritability(int index) -
writabilityMask
private static int writabilityMask(int index) -
setWritable
private void setWritable(boolean invokeLater) -
setUnwritable
private void setUnwritable(boolean invokeLater) -
fireChannelWritabilityChanged
private void fireChannelWritabilityChanged(boolean invokeLater) -
size
public int size()Returns the number of flushed messages in thisChannelOutboundBuffer
. -
isEmpty
public boolean isEmpty() -
failFlushed
-
close
-
close
-
safeSuccess
-
safeFail
-
recycle
Deprecated. -
totalPendingWriteBytes
public long totalPendingWriteBytes() -
bytesBeforeUnwritable
public long bytesBeforeUnwritable()Get how many bytes can be written untilisWritable()
returnsfalse
. This quantity will always be non-negative. IfisWritable()
isfalse
then 0. -
bytesBeforeWritable
public long bytesBeforeWritable()Get how many bytes must be drained from the underlying buffer untilisWritable()
returnstrue
. This quantity will always be non-negative. IfisWritable()
istrue
then 0. -
forEachFlushedMessage
public void forEachFlushedMessage(ChannelOutboundBuffer.MessageProcessor processor) throws Exception CallChannelOutboundBuffer.MessageProcessor.processMessage(Object)
for each flushed message in thisChannelOutboundBuffer
untilChannelOutboundBuffer.MessageProcessor.processMessage(Object)
returnsfalse
or there are no more flushed messages to process.- Throws:
Exception
-
isFlushedEntry
-