Search in sources :

Example 6 with Send

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

the class EnvelopeRequestTest method testToSend.

@Test
public void testToSend() throws IOException {
    for (short version : ApiKeys.ENVELOPE.allVersions()) {
        ByteBuffer requestData = ByteBuffer.wrap("foobar".getBytes());
        RequestHeader header = new RequestHeader(ApiKeys.ENVELOPE, version, "clientId", 15);
        EnvelopeRequest request = new EnvelopeRequest.Builder(requestData, "principal".getBytes(), InetAddress.getLocalHost().getAddress()).build(version);
        Send send = request.toSend(header);
        ByteBuffer buffer = TestUtils.toBuffer(send);
        assertEquals(send.size() - 4, buffer.getInt());
        assertEquals(header, RequestHeader.parse(buffer));
        EnvelopeRequestData parsedRequestData = new EnvelopeRequestData();
        parsedRequestData.read(new ByteBufferAccessor(buffer), version);
        assertEquals(request.data(), parsedRequestData);
    }
}
Also used : ByteBufferAccessor(org.apache.kafka.common.protocol.ByteBufferAccessor) ByteBuffer(java.nio.ByteBuffer) EnvelopeRequestData(org.apache.kafka.common.message.EnvelopeRequestData) Send(org.apache.kafka.common.network.Send) Test(org.junit.jupiter.api.Test)

Example 7 with Send

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

the class MultiRecordsSendTest method testSendsFreedAfterWriting.

@Test
public void testSendsFreedAfterWriting() throws IOException {
    int numChunks = 4;
    int chunkSize = 32;
    int totalSize = numChunks * chunkSize;
    Queue<Send> sends = new LinkedList<>();
    ByteBuffer[] chunks = new ByteBuffer[numChunks];
    for (int i = 0; i < numChunks; i++) {
        ByteBuffer buffer = ByteBuffer.wrap(TestUtils.randomBytes(chunkSize));
        chunks[i] = buffer;
        sends.add(new ByteBufferSend(buffer));
    }
    MultiRecordsSend send = new MultiRecordsSend(sends);
    assertEquals(totalSize, send.size());
    for (int i = 0; i < numChunks; i++) {
        assertEquals(numChunks - i, send.numResidentSends());
        NonOverflowingByteBufferChannel out = new NonOverflowingByteBufferChannel(chunkSize);
        send.writeTo(out);
        out.close();
        assertEquals(chunks[i], out.buffer());
    }
    assertEquals(0, send.numResidentSends());
    assertTrue(send.completed());
}
Also used : ByteBufferSend(org.apache.kafka.common.network.ByteBufferSend) ByteBuffer(java.nio.ByteBuffer) LinkedList(java.util.LinkedList) Send(org.apache.kafka.common.network.Send) ByteBufferSend(org.apache.kafka.common.network.ByteBufferSend) Test(org.junit.jupiter.api.Test)

Example 8 with Send

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

the class EnvelopeResponseTest method testToSend.

@Test
public void testToSend() {
    for (short version : ApiKeys.ENVELOPE.allVersions()) {
        ByteBuffer responseData = ByteBuffer.wrap("foobar".getBytes());
        EnvelopeResponse response = new EnvelopeResponse(responseData, Errors.NONE);
        short headerVersion = ApiKeys.ENVELOPE.responseHeaderVersion(version);
        ResponseHeader header = new ResponseHeader(15, headerVersion);
        Send send = response.toSend(header, version);
        ByteBuffer buffer = TestUtils.toBuffer(send);
        assertEquals(send.size() - 4, buffer.getInt());
        assertEquals(header, ResponseHeader.parse(buffer, headerVersion));
        EnvelopeResponseData parsedResponseData = new EnvelopeResponseData();
        parsedResponseData.read(new ByteBufferAccessor(buffer), version);
        assertEquals(response.data(), parsedResponseData);
    }
}
Also used : EnvelopeResponseData(org.apache.kafka.common.message.EnvelopeResponseData) ByteBufferAccessor(org.apache.kafka.common.protocol.ByteBufferAccessor) ByteBuffer(java.nio.ByteBuffer) Send(org.apache.kafka.common.network.Send) Test(org.junit.jupiter.api.Test)

Example 9 with Send

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

the class SendBuilderTest method testZeroCopyByteBuffer.

@Test
public void testZeroCopyByteBuffer() {
    byte[] data = Utils.utf8("foo");
    ByteBuffer zeroCopyBuffer = ByteBuffer.wrap(data);
    SendBuilder builder = new SendBuilder(8);
    builder.writeInt(5);
    builder.writeByteBuffer(zeroCopyBuffer);
    builder.writeInt(15);
    Send send = builder.build();
    // Overwrite the original buffer in order to prove the data was not copied
    byte[] overwrittenData = Utils.utf8("bar");
    assertEquals(data.length, overwrittenData.length);
    zeroCopyBuffer.rewind();
    zeroCopyBuffer.put(overwrittenData);
    zeroCopyBuffer.rewind();
    ByteBuffer buffer = TestUtils.toBuffer(send);
    assertEquals(8 + data.length, buffer.remaining());
    assertEquals(5, buffer.getInt());
    assertEquals("bar", getString(buffer, data.length));
    assertEquals(15, buffer.getInt());
}
Also used : ByteBuffer(java.nio.ByteBuffer) Send(org.apache.kafka.common.network.Send) Test(org.junit.jupiter.api.Test)

Example 10 with Send

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

the class NetworkClient method doSend.

private void doSend(ClientRequest clientRequest, boolean isInternalRequest, long now, AbstractRequest request) {
    String destination = clientRequest.destination();
    RequestHeader header = clientRequest.makeHeader(request.version());
    if (log.isDebugEnabled()) {
        log.debug("Sending {} request with header {} and timeout {} to node {}: {}", clientRequest.apiKey(), header, clientRequest.requestTimeoutMs(), destination, request);
    }
    Send send = request.toSend(header);
    InFlightRequest inFlightRequest = new InFlightRequest(clientRequest, header, isInternalRequest, request, send, now);
    this.inFlightRequests.add(inFlightRequest);
    selector.send(new NetworkSend(clientRequest.destination(), send));
}
Also used : RequestHeader(org.apache.kafka.common.requests.RequestHeader) NetworkSend(org.apache.kafka.common.network.NetworkSend) Send(org.apache.kafka.common.network.Send) NetworkSend(org.apache.kafka.common.network.NetworkSend)

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