@Override public String toString() { int aggSize = -1; ByteBuffer agg = aggregate; if (agg != null) aggSize = agg.position(); return String.format("%s@%x[queueSize=%d,aggregateSize=%d,terminated=%s]", getClass().getSimpleName(), hashCode(), getQueueSize(), aggSize, terminated); }
@Override public void onCompleteFailure(Throwable failure) { releaseAggregate(); Throwable closed; synchronized (this) { closed = terminated; if (closed == null) terminated = failure; entries.addAll(queue); queue.clear(); } for (FrameEntry entry : entries) { notifyCallbackFailure(entry.callback, failure); entry.release(); } entries.clear(); }
private void succeedEntries() { for (FrameEntry entry : entries) { notifyCallbackSuccess(entry.callback); entry.release(); if (entry.frame.getOpCode() == OpCode.CLOSE) { terminate(new ClosedChannelException(), true); endPoint.shutdownOutput(); } } entries.clear(); }
releaseAggregate(); return Action.IDLE; LOG.debug("{} auto flushing", this); return flush(); return currentBatchMode == BatchMode.OFF ? flush() : batch();
public void enqueue(Frame frame, WriteCallback callback, BatchMode batchMode) { FrameEntry entry = new FrameEntry(frame, callback, batchMode); Throwable closed; synchronized (this) { closed = terminated; if (closed == null) { byte opCode = frame.getOpCode(); if (opCode == OpCode.PING || opCode == OpCode.PONG) queue.offerFirst(entry); else queue.offerLast(entry); } } if (closed == null) iterate(); else notifyCallbackFailure(callback, closed); }
releaseAggregate(); succeedEntries(); return Action.IDLE;
@Override public void succeeded() { succeedEntries(); super.succeeded(); }
/** * Frame from API, User, or Internal implementation destined for network. */ @Override public void outgoingFrame(Frame frame, WriteCallback callback, BatchMode batchMode) { if (LOG.isDebugEnabled()) { LOG.debug("outgoingFrame({}, {})",frame,callback); } flusher.enqueue(frame,callback,batchMode); }
void terminate(Throwable cause, boolean close) { Throwable reason; synchronized (this) { closed = close; reason = terminated; if (reason == null) terminated = cause; } if (LOG.isDebugEnabled()) LOG.debug("{} {}", reason == null ? "Terminating" : "Terminated", this); if (reason == null && !close) iterate(); }
@Override public void onCompleteFailure(Throwable failure) { super.onCompleteFailure(failure); notifyError(failure); if (ioState.wasAbnormalClose()) { LOG.ignore(failure); return; } if (LOG.isDebugEnabled()) LOG.debug("Write flush failure", failure); ioState.onWriteFailure(failure); disconnect(); } }