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