use of org.apache.cassandra.net.Message.Header in project cassandra by apache.
the class InboundMessageHandler method processFirstFrameOfLargeMessage.
/*
* Handling of multi-frame large messages
*/
protected boolean processFirstFrameOfLargeMessage(IntactFrame frame, Limit endpointReserve, Limit globalReserve) throws IOException {
ShareableBytes bytes = frame.contents;
ByteBuffer buf = bytes.get();
long currentTimeNanos = approxTime.now();
Header header = serializer.extractHeader(buf, peer, currentTimeNanos, version);
int size = serializer.inferMessageSize(buf, buf.position(), buf.limit(), version);
boolean expired = approxTime.isAfter(currentTimeNanos, header.expiresAtNanos);
if (!expired && !acquireCapacity(endpointReserve, globalReserve, size, currentTimeNanos, header.expiresAtNanos))
return false;
callbacks.onHeaderArrived(size, header, currentTimeNanos - header.createdAtNanos, NANOSECONDS);
receivedBytes += buf.remaining();
largeMessage = new LargeMessage(size, header, expired);
largeMessage.supply(frame);
return true;
}
use of org.apache.cassandra.net.Message.Header in project cassandra by apache.
the class InboundMessageHandler method processOneContainedMessage.
protected boolean processOneContainedMessage(ShareableBytes bytes, Limit endpointReserve, Limit globalReserve) throws IOException {
ByteBuffer buf = bytes.get();
long currentTimeNanos = approxTime.now();
Header header = serializer.extractHeader(buf, peer, currentTimeNanos, version);
long timeElapsed = currentTimeNanos - header.createdAtNanos;
int size = serializer.inferMessageSize(buf, buf.position(), buf.limit(), version);
if (approxTime.isAfter(currentTimeNanos, header.expiresAtNanos)) {
callbacks.onHeaderArrived(size, header, timeElapsed, NANOSECONDS);
callbacks.onArrivedExpired(size, header, false, timeElapsed, NANOSECONDS);
receivedCount++;
receivedBytes += size;
bytes.skipBytes(size);
return true;
}
if (!acquireCapacity(endpointReserve, globalReserve, size, currentTimeNanos, header.expiresAtNanos))
return false;
callbacks.onHeaderArrived(size, header, timeElapsed, NANOSECONDS);
callbacks.onArrived(size, header, timeElapsed, NANOSECONDS);
receivedCount++;
receivedBytes += size;
if (size <= largeThreshold)
processSmallMessage(bytes, size, header);
else
processLargeMessage(bytes, size, header);
return true;
}
use of org.apache.cassandra.net.Message.Header in project cassandra by apache.
the class InboundMessageHandler method dispatch.
/**
* Submit a {@link ProcessMessage} task to the appropriate {@link Stage} for the {@link Verb}.
*/
private void dispatch(ProcessMessage task) {
Header header = task.header();
TraceState state = Tracing.instance.initializeFromMessage(header);
if (state != null)
state.trace("{} message received from {}", header.verb, header.from);
callbacks.onDispatched(task.size(), header);
header.verb.stage.execute(ExecutorLocals.create(state), task);
}
Aggregations