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);
}
}
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());
}
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);
}
}
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());
}
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));
}
Aggregations