Search in sources :

Example 11 with Send

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

the class SendBuilderTest method testWriteByteBufferRespectsPosition.

@Test
public void testWriteByteBufferRespectsPosition() {
    byte[] data = Utils.utf8("yolo");
    assertEquals(4, data.length);
    ByteBuffer buffer = ByteBuffer.wrap(data);
    SendBuilder builder = new SendBuilder(0);
    buffer.limit(2);
    builder.writeByteBuffer(buffer);
    assertEquals(0, buffer.position());
    buffer.position(2);
    buffer.limit(4);
    builder.writeByteBuffer(buffer);
    assertEquals(2, buffer.position());
    Send send = builder.build();
    ByteBuffer readBuffer = TestUtils.toBuffer(send);
    assertEquals("yolo", getString(readBuffer, 4));
}
Also used : ByteBuffer(java.nio.ByteBuffer) Send(org.apache.kafka.common.network.Send) Test(org.junit.jupiter.api.Test)

Example 12 with Send

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

the class RequestContextTest method testSerdeUnsupportedApiVersionRequest.

@Test
public void testSerdeUnsupportedApiVersionRequest() throws Exception {
    int correlationId = 23423;
    RequestHeader header = new RequestHeader(ApiKeys.API_VERSIONS, Short.MAX_VALUE, "", correlationId);
    RequestContext context = new RequestContext(header, "0", InetAddress.getLocalHost(), KafkaPrincipal.ANONYMOUS, new ListenerName("ssl"), SecurityProtocol.SASL_SSL, ClientInformation.EMPTY, false);
    assertEquals(0, context.apiVersion());
    // Write some garbage to the request buffer. This should be ignored since we will treat
    // the unknown version type as v0 which has an empty request body.
    ByteBuffer requestBuffer = ByteBuffer.allocate(8);
    requestBuffer.putInt(3709234);
    requestBuffer.putInt(29034);
    requestBuffer.flip();
    RequestAndSize requestAndSize = context.parseRequest(requestBuffer);
    assertTrue(requestAndSize.request instanceof ApiVersionsRequest);
    ApiVersionsRequest request = (ApiVersionsRequest) requestAndSize.request;
    assertTrue(request.hasUnsupportedRequestVersion());
    Send send = context.buildResponseSend(new ApiVersionsResponse(new ApiVersionsResponseData().setThrottleTimeMs(0).setErrorCode(Errors.UNSUPPORTED_VERSION.code()).setApiKeys(new ApiVersionCollection())));
    ByteBufferChannel channel = new ByteBufferChannel(256);
    send.writeTo(channel);
    ByteBuffer responseBuffer = channel.buffer();
    responseBuffer.flip();
    // strip off the size
    responseBuffer.getInt();
    ResponseHeader responseHeader = ResponseHeader.parse(responseBuffer, ApiKeys.API_VERSIONS.responseHeaderVersion(header.apiVersion()));
    assertEquals(correlationId, responseHeader.correlationId());
    ApiVersionsResponse response = (ApiVersionsResponse) AbstractResponse.parseResponse(ApiKeys.API_VERSIONS, responseBuffer, (short) 0);
    assertEquals(Errors.UNSUPPORTED_VERSION.code(), response.data().errorCode());
    assertTrue(response.data().apiKeys().isEmpty());
}
Also used : ApiVersionCollection(org.apache.kafka.common.message.ApiVersionsResponseData.ApiVersionCollection) ListenerName(org.apache.kafka.common.network.ListenerName) ByteBuffer(java.nio.ByteBuffer) Send(org.apache.kafka.common.network.Send) ApiVersionsResponseData(org.apache.kafka.common.message.ApiVersionsResponseData) Test(org.junit.jupiter.api.Test)

Example 13 with Send

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

the class RequestResponseTest method verifyFetchResponseFullWrite.

private void verifyFetchResponseFullWrite(short version, FetchResponse fetchResponse) throws Exception {
    int correlationId = 15;
    short responseHeaderVersion = FETCH.responseHeaderVersion(version);
    Send send = fetchResponse.toSend(new ResponseHeader(correlationId, responseHeaderVersion), version);
    ByteBufferChannel channel = new ByteBufferChannel(send.size());
    send.writeTo(channel);
    channel.close();
    ByteBuffer buf = channel.buffer();
    // read the size
    int size = buf.getInt();
    assertTrue(size > 0);
    // read the header
    ResponseHeader responseHeader = ResponseHeader.parse(channel.buffer(), responseHeaderVersion);
    assertEquals(correlationId, responseHeader.correlationId());
    assertEquals(fetchResponse.serialize(version), buf);
    FetchResponseData deserialized = new FetchResponseData(new ByteBufferAccessor(buf), version);
    ObjectSerializationCache serializationCache = new ObjectSerializationCache();
    assertEquals(size, responseHeader.size(serializationCache) + deserialized.size(serializationCache, version));
}
Also used : ObjectSerializationCache(org.apache.kafka.common.protocol.ObjectSerializationCache) FetchResponseData(org.apache.kafka.common.message.FetchResponseData) ByteBufferAccessor(org.apache.kafka.common.protocol.ByteBufferAccessor) ByteBuffer(java.nio.ByteBuffer) UpdateMetadataEndpoint(org.apache.kafka.common.message.UpdateMetadataRequestData.UpdateMetadataEndpoint) Send(org.apache.kafka.common.network.Send)

Example 14 with Send

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

the class FetchResponseBenchmark method testSerializeFetchResponse.

@Benchmark
public int testSerializeFetchResponse() throws IOException {
    Send send = fetchResponse.toSend(header, ApiKeys.FETCH.latestVersion());
    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 15 with Send

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

the class FetchRequestBenchmark method testSerializeFetchRequestForReplica.

@Benchmark
public int testSerializeFetchRequestForReplica() throws IOException {
    Send send = replicaRequest.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)

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