Search in sources :

Example 1 with Header

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;
}
Also used : Header(org.apache.cassandra.net.Message.Header) ByteBuffer(java.nio.ByteBuffer)

Example 2 with Header

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;
}
Also used : Header(org.apache.cassandra.net.Message.Header) ByteBuffer(java.nio.ByteBuffer)

Example 3 with Header

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);
}
Also used : TraceState(org.apache.cassandra.tracing.TraceState) Header(org.apache.cassandra.net.Message.Header)

Aggregations

Header (org.apache.cassandra.net.Message.Header)3 ByteBuffer (java.nio.ByteBuffer)2 TraceState (org.apache.cassandra.tracing.TraceState)1