/** * Releases memory space in the queue and notifies registered * {@link QueueMonitor}s about the update. * * @param amount * @return the new memory (in bytes) consumed by the queue. */ public int releaseSpaceAndNotify(final int amount) { final int space = releaseSpace(amount); doNotify(); return space; }
/** * Aggregates records in a queue to be written as one chunk. */ protected AsyncWriteQueueRecord aggregate( final TaskQueue<AsyncWriteQueueRecord> connectionQueue) { return connectionQueue.poll(); } }
private int reserveWriteQueueSpace(final int spaceToReserve) { return outputQueue.reserveSpace(spaceToReserve); }
private static AsyncWriteQueueRecord checkAndGetNextRecord( final TaskQueue<AsyncWriteQueueRecord> writeTaskQueue) { final AsyncWriteQueueRecord nextRecord = writeTaskQueue.getQueue().poll(); if (nextRecord == null) { return null; } else if (!canBeAggregated(nextRecord)) { writeTaskQueue.setCurrentElement(nextRecord); return null; } return nextRecord; }
/** * Closes the output sink by adding last DataFrame with the FIN flag to a queue. * If the output sink is already closed - method does nothing. */ @Override public synchronized void close() { if (!isClosed()) { isLastFrameQueued = true; if (outputQueue.isEmpty()) { writeEmptyFin(); return; } outputQueue.reserveSpace(ZERO_QUEUE_RECORD_SIZE); outputQueue.offer(TERMINATING_QUEUE_RECORD); if (outputQueue.size() == ZERO_QUEUE_RECORD_SIZE && outputQueue.remove(TERMINATING_QUEUE_RECORD)) { writeEmptyFin(); } } }
queueRecord.getCurrentResult(); final boolean isCurrent = (connectionQueue.reserveSpace(1) == 1); (connectionQueue.releaseSpaceAndNotify(1) == 0); connectionQueue.setCurrentElement(queueRecord); connectionQueue.offer(queueRecord); if (!connection.isOpen() && connectionQueue.remove(queueRecord)) { onReadFailure(connection, queueRecord, new EOFException("Connection is closed"));
@Override public void notifyWritePossible(final Connection<SocketAddress> connection, final WriteHandler writeHandler) { ((NIOConnection) connection).getAsyncWriteQueue() .notifyWritePossible(writeHandler); }
/** * {@inheritDoc} */ @Override public void onClose(final Connection connection) { final NIOConnection nioConnection = (NIOConnection) connection; final TaskQueue<AsyncWriteQueueRecord> writeQueue = nioConnection.getAsyncWriteQueue(); writeQueue.onClose(nioConnection.getCloseReason().getCause()); }
/** * {@inheritDoc} */ @Override public final boolean isReady(final Connection connection) { final TaskQueue connectionQueue = ((NIOConnection) connection).getAsyncReadQueue(); return connectionQueue != null && !connectionQueue.isEmpty(); }
protected void addRecord(Connection connection, Buffer buffer, CompletionHandler completionHandler, Interceptor<ReadResult> interceptor) { final AsyncReadQueueRecord record = AsyncReadQueueRecord.create( connection, buffer, completionHandler, interceptor); ((TCPNIOConnection) connection).getAsyncReadQueue().offer(record); }
private void releaseWriteQueueSpace(final int justSentBytes, final boolean isAtomic, final boolean isEndOfChunk) { if (isEndOfChunk) { outputQueue.releaseSpace(isAtomic ? ZERO_QUEUE_RECORD_SIZE : justSentBytes); } else if (!isAtomic) { outputQueue.releaseSpace(justSentBytes); } }
/** * Closes the output sink by adding last DataFrame with the FIN flag to a queue. * If the output sink is already closed - method does nothing. */ @Override public synchronized void close() { if (!isClosed()) { isLastFrameQueued = true; if (outputQueue.isEmpty()) { writeEmptyFin(); return; } outputQueue.reserveSpace(ZERO_QUEUE_RECORD_SIZE); outputQueue.offer(TERMINATING_QUEUE_RECORD); if (outputQueue.size() == ZERO_QUEUE_RECORD_SIZE && outputQueue.remove(TERMINATING_QUEUE_RECORD)) { writeEmptyFin(); } } }
queueRecord.getCurrentResult(); final boolean isCurrent = (connectionQueue.reserveSpace(1) == 1); (connectionQueue.releaseSpaceAndNotify(1) == 0); connectionQueue.setCurrentElement(queueRecord); connectionQueue.offer(queueRecord); if (!connection.isOpen() && connectionQueue.remove(queueRecord)) { onReadFailure(connection, queueRecord, new EOFException("Connection is closed"));
private static AsyncWriteQueueRecord checkAndGetNextRecord( final TaskQueue<AsyncWriteQueueRecord> writeTaskQueue) { final AsyncWriteQueueRecord nextRecord = writeTaskQueue.getQueue().poll(); if (nextRecord == null) { return null; } else if (!canBeAggregated(nextRecord)) { writeTaskQueue.setCurrentElement(nextRecord); return null; } return nextRecord; }
@Override public void notifyWritePossible(final Connection<SocketAddress> connection, final WriteHandler writeHandler) { ((NIOConnection) connection).getAsyncWriteQueue() .notifyWritePossible(writeHandler); }
/** * {@inheritDoc} */ @Override public void onClose(final Connection connection) { final NIOConnection nioConnection = (NIOConnection) connection; final TaskQueue<AsyncWriteQueueRecord> writeQueue = nioConnection.getAsyncWriteQueue(); writeQueue.onClose(nioConnection.getCloseReason().getCause()); }
/** * {@inheritDoc} */ @Override public final boolean isReady(final Connection connection) { final TaskQueue connectionQueue = ((NIOConnection) connection).getAsyncReadQueue(); return connectionQueue != null && !connectionQueue.isEmpty(); }
protected void addRecord(Connection connection, Buffer buffer, CompletionHandler completionHandler, Interceptor<ReadResult> interceptor) { final AsyncReadQueueRecord record = AsyncReadQueueRecord.create( connection, buffer, completionHandler, interceptor); ((TCPNIOConnection) connection).getAsyncReadQueue().offer(record); }
private void releaseWriteQueueSpace(final int justSentBytes, final boolean isAtomic, final boolean isEndOfChunk) { if (isEndOfChunk) { outputQueue.releaseSpace(isAtomic ? ZERO_QUEUE_RECORD_SIZE : justSentBytes); } else if (!isAtomic) { outputQueue.releaseSpace(justSentBytes); } }
/** * Closes the output sink by adding last DataFrame with the FIN flag to a queue. * If the output sink is already closed - method does nothing. */ @Override public synchronized void close() { if (!isClosed()) { isLastFrameQueued = true; if (outputQueue.isEmpty()) { writeEmptyFin(); return; } outputQueue.reserveSpace(ZERO_QUEUE_RECORD_SIZE); outputQueue.offer(TERMINATING_QUEUE_RECORD); if (outputQueue.size() == ZERO_QUEUE_RECORD_SIZE && outputQueue.remove(TERMINATING_QUEUE_RECORD)) { writeEmptyFin(); } } }