Search in sources :

Example 21 with Send

use of org.apache.kafka.common.network.Send in project kafka by apache.

the class SaslClientAuthenticator method sendSaslClientToken.

/**
 * Sends a SASL client token to server if required. This may be an initial token to start
 * SASL token exchange or response to a challenge from the server.
 * @return true if a token was sent to the server
 */
private boolean sendSaslClientToken(byte[] serverToken, boolean isInitial) throws IOException {
    if (!saslClient.isComplete()) {
        byte[] saslToken = createSaslToken(serverToken, isInitial);
        if (saslToken != null) {
            ByteBuffer tokenBuf = ByteBuffer.wrap(saslToken);
            Send send;
            if (saslAuthenticateVersion == DISABLE_KAFKA_SASL_AUTHENTICATE_HEADER) {
                send = ByteBufferSend.sizePrefixed(tokenBuf);
            } else {
                SaslAuthenticateRequestData data = new SaslAuthenticateRequestData().setAuthBytes(tokenBuf.array());
                SaslAuthenticateRequest request = new SaslAuthenticateRequest.Builder(data).build(saslAuthenticateVersion);
                send = request.toSend(nextRequestHeader(ApiKeys.SASL_AUTHENTICATE, saslAuthenticateVersion));
            }
            send(send);
            return true;
        }
    }
    return false;
}
Also used : SaslAuthenticateRequestData(org.apache.kafka.common.message.SaslAuthenticateRequestData) SaslAuthenticateRequest(org.apache.kafka.common.requests.SaslAuthenticateRequest) ByteBuffer(java.nio.ByteBuffer) Send(org.apache.kafka.common.network.Send) ByteBufferSend(org.apache.kafka.common.network.ByteBufferSend)

Example 22 with Send

use of org.apache.kafka.common.network.Send in project kafka by apache.

the class FetchRequestBenchmark method testSerializeFetchRequestForConsumer.

@Benchmark
public int testSerializeFetchRequestForConsumer() throws IOException {
    Send send = consumerRequest.toSend(header);
    ByteBufferChannel channel = new ByteBufferChannel(send.size());
    send.writeTo(channel);
    return channel.buffer().limit();
}
Also used : ByteBufferChannel(org.apache.kafka.common.requests.ByteBufferChannel) Send(org.apache.kafka.common.network.Send) Benchmark(org.openjdk.jmh.annotations.Benchmark)

Example 23 with Send

use of org.apache.kafka.common.network.Send in project kafka by apache.

the class SendBuilderTest method testZeroCopyRecords.

@Test
public void testZeroCopyRecords() {
    ByteBuffer buffer = ByteBuffer.allocate(128);
    MemoryRecords records = createRecords(buffer, "foo");
    SendBuilder builder = new SendBuilder(8);
    builder.writeInt(5);
    builder.writeRecords(records);
    builder.writeInt(15);
    Send send = builder.build();
    // Overwrite the original buffer in order to prove the data was not copied
    buffer.rewind();
    MemoryRecords overwrittenRecords = createRecords(buffer, "bar");
    ByteBuffer readBuffer = TestUtils.toBuffer(send);
    assertEquals(5, readBuffer.getInt());
    assertEquals(overwrittenRecords, getRecords(readBuffer, records.sizeInBytes()));
    assertEquals(15, readBuffer.getInt());
}
Also used : ByteBuffer(java.nio.ByteBuffer) MemoryRecords(org.apache.kafka.common.record.MemoryRecords) UnalignedMemoryRecords(org.apache.kafka.common.record.UnalignedMemoryRecords) Send(org.apache.kafka.common.network.Send) Test(org.junit.jupiter.api.Test)

Example 24 with Send

use of org.apache.kafka.common.network.Send in project kafka by apache.

the class SendBuilderTest method testZeroCopyUnalignedRecords.

@Test
public void testZeroCopyUnalignedRecords() {
    ByteBuffer buffer = ByteBuffer.allocate(128);
    MemoryRecords records = createRecords(buffer, "foo");
    ByteBuffer buffer1 = records.buffer().duplicate();
    buffer1.limit(buffer1.limit() / 2);
    ByteBuffer buffer2 = records.buffer().duplicate();
    buffer2.position(buffer2.limit() / 2);
    UnalignedMemoryRecords records1 = new UnalignedMemoryRecords(buffer1);
    UnalignedMemoryRecords records2 = new UnalignedMemoryRecords(buffer2);
    SendBuilder builder = new SendBuilder(8);
    builder.writeInt(5);
    builder.writeRecords(records1);
    builder.writeRecords(records2);
    builder.writeInt(15);
    Send send = builder.build();
    // Overwrite the original buffer in order to prove the data was not copied
    buffer.rewind();
    MemoryRecords overwrittenRecords = createRecords(buffer, "bar");
    ByteBuffer readBuffer = TestUtils.toBuffer(send);
    assertEquals(5, readBuffer.getInt());
    assertEquals(overwrittenRecords, getRecords(readBuffer, records.sizeInBytes()));
    assertEquals(15, readBuffer.getInt());
}
Also used : UnalignedMemoryRecords(org.apache.kafka.common.record.UnalignedMemoryRecords) ByteBuffer(java.nio.ByteBuffer) MemoryRecords(org.apache.kafka.common.record.MemoryRecords) UnalignedMemoryRecords(org.apache.kafka.common.record.UnalignedMemoryRecords) Send(org.apache.kafka.common.network.Send) Test(org.junit.jupiter.api.Test)

Aggregations

Send (org.apache.kafka.common.network.Send)24 ByteBuffer (java.nio.ByteBuffer)16 Test (org.junit.jupiter.api.Test)8 Struct (org.apache.kafka.common.protocol.types.Struct)5 ByteBufferSend (org.apache.kafka.common.network.ByteBufferSend)4 NetworkSend (org.apache.kafka.common.network.NetworkSend)4 ByteBufferAccessor (org.apache.kafka.common.protocol.ByteBufferAccessor)3 ByteBufferChannel (org.apache.kafka.common.requests.ByteBufferChannel)3 RequestHeader (org.apache.kafka.common.requests.RequestHeader)3 Benchmark (org.openjdk.jmh.annotations.Benchmark)3 ListenerName (org.apache.kafka.common.network.ListenerName)2 MultiSend (org.apache.kafka.common.network.MultiSend)2 MemoryRecords (org.apache.kafka.common.record.MemoryRecords)2 UnalignedMemoryRecords (org.apache.kafka.common.record.UnalignedMemoryRecords)2 Test (org.junit.Test)2 ArrayDeque (java.util.ArrayDeque)1 ArrayList (java.util.ArrayList)1 LinkedList (java.util.LinkedList)1 ApiVersionsResponseData (org.apache.kafka.common.message.ApiVersionsResponseData)1 ApiVersionCollection (org.apache.kafka.common.message.ApiVersionsResponseData.ApiVersionCollection)1