use of org.apache.kafka.common.message.LeaderChangeMessage.Voter in project kafka by apache.
the class ControlRecordUtilsTest method testDeserializeRecord.
private void testDeserializeRecord(ControlRecordType controlRecordType) {
final int leaderId = 1;
final int voterId = 2;
LeaderChangeMessage data = new LeaderChangeMessage().setLeaderId(leaderId).setVoters(Collections.singletonList(new Voter().setVoterId(voterId)));
ByteBuffer valueBuffer = ByteBuffer.allocate(256);
data.write(new ByteBufferAccessor(valueBuffer), new ObjectSerializationCache(), data.highestSupportedVersion());
valueBuffer.flip();
byte[] keyData = new byte[] { 0, 0, 0, (byte) controlRecordType.type };
DefaultRecord record = new DefaultRecord(256, (byte) 0, 0, 0L, 0, ByteBuffer.wrap(keyData), valueBuffer, null);
LeaderChangeMessage deserializedData = ControlRecordUtils.deserializeLeaderChangeMessage(record);
assertEquals(leaderId, deserializedData.leaderId());
assertEquals(Collections.singletonList(new Voter().setVoterId(voterId)), deserializedData.voters());
}
use of org.apache.kafka.common.message.LeaderChangeMessage.Voter in project kafka by apache.
the class RaftClientTestContext method verifyLeaderChangeMessage.
static void verifyLeaderChangeMessage(int leaderId, List<Integer> voters, List<Integer> grantingVoters, ByteBuffer recordKey, ByteBuffer recordValue) {
assertEquals(ControlRecordType.LEADER_CHANGE, ControlRecordType.parse(recordKey));
LeaderChangeMessage leaderChangeMessage = ControlRecordUtils.deserializeLeaderChangeMessage(recordValue);
assertEquals(leaderId, leaderChangeMessage.leaderId());
assertEquals(voters.stream().map(voterId -> new Voter().setVoterId(voterId)).collect(Collectors.toList()), leaderChangeMessage.voters());
assertEquals(grantingVoters.stream().map(voterId -> new Voter().setVoterId(voterId)).collect(Collectors.toSet()), new HashSet<>(leaderChangeMessage.grantingVoters()));
}
use of org.apache.kafka.common.message.LeaderChangeMessage.Voter in project kafka by apache.
the class LeaderState method appendLeaderChangeMessage.
public void appendLeaderChangeMessage(long currentTimeMs) {
List<Voter> voters = convertToVoters(voterStates.keySet());
List<Voter> grantingVoters = convertToVoters(this.grantingVoters());
LeaderChangeMessage leaderChangeMessage = new LeaderChangeMessage().setVersion(ControlRecordUtils.LEADER_CHANGE_SCHEMA_HIGHEST_VERSION).setLeaderId(this.election().leaderId()).setVoters(voters).setGrantingVoters(grantingVoters);
accumulator.appendLeaderChangeMessage(leaderChangeMessage, currentTimeMs);
accumulator.forceDrain();
}
use of org.apache.kafka.common.message.LeaderChangeMessage.Voter in project kafka by apache.
the class MemoryRecordsTest method testBuildLeaderChangeMessage.
@Test
public void testBuildLeaderChangeMessage() {
final int leaderId = 5;
final int leaderEpoch = 20;
final int voterId = 6;
long initialOffset = 983L;
LeaderChangeMessage leaderChangeMessage = new LeaderChangeMessage().setLeaderId(leaderId).setVoters(Collections.singletonList(new Voter().setVoterId(voterId)));
ByteBuffer buffer = ByteBuffer.allocate(256);
MemoryRecords records = MemoryRecords.withLeaderChangeMessage(initialOffset, System.currentTimeMillis(), leaderEpoch, buffer, leaderChangeMessage);
List<MutableRecordBatch> batches = TestUtils.toList(records.batches());
assertEquals(1, batches.size());
RecordBatch batch = batches.get(0);
assertTrue(batch.isControlBatch());
assertEquals(initialOffset, batch.baseOffset());
assertEquals(leaderEpoch, batch.partitionLeaderEpoch());
assertTrue(batch.isValid());
List<Record> createdRecords = TestUtils.toList(batch);
assertEquals(1, createdRecords.size());
Record record = createdRecords.get(0);
record.ensureValid();
assertEquals(ControlRecordType.LEADER_CHANGE, ControlRecordType.parse(record.key()));
LeaderChangeMessage deserializedMessage = ControlRecordUtils.deserializeLeaderChangeMessage(record);
assertEquals(leaderId, deserializedMessage.leaderId());
assertEquals(1, deserializedMessage.voters().size());
assertEquals(voterId, deserializedMessage.voters().get(0).voterId());
}
use of org.apache.kafka.common.message.LeaderChangeMessage.Voter in project kafka by apache.
the class MemoryRecordsBuilderTest method testWriteLeaderChangeControlBatch.
@ParameterizedTest
@ArgumentsSource(MemoryRecordsBuilderArgumentsProvider.class)
public void testWriteLeaderChangeControlBatch(Args args) {
ByteBuffer buffer = allocateBuffer(128, args);
final int leaderId = 1;
final int leaderEpoch = 5;
final List<Integer> voters = Arrays.asList(2, 3);
Supplier<MemoryRecordsBuilder> supplier = () -> new MemoryRecordsBuilder(buffer, args.magic, args.compressionType, TimestampType.CREATE_TIME, 0L, 0L, RecordBatch.NO_PRODUCER_ID, RecordBatch.NO_PRODUCER_EPOCH, RecordBatch.NO_SEQUENCE, false, true, leaderEpoch, buffer.capacity());
if (args.magic < MAGIC_VALUE_V2) {
assertThrows(IllegalArgumentException.class, supplier::get);
} else {
MemoryRecordsBuilder builder = supplier.get();
builder.appendLeaderChangeMessage(RecordBatch.NO_TIMESTAMP, new LeaderChangeMessage().setLeaderId(leaderId).setVoters(voters.stream().map(voterId -> new Voter().setVoterId(voterId)).collect(Collectors.toList())));
MemoryRecords built = builder.build();
List<Record> records = TestUtils.toList(built.records());
assertEquals(1, records.size());
LeaderChangeMessage leaderChangeMessage = ControlRecordUtils.deserializeLeaderChangeMessage(records.get(0));
assertEquals(leaderId, leaderChangeMessage.leaderId());
assertEquals(voters, leaderChangeMessage.voters().stream().map(Voter::voterId).collect(Collectors.toList()));
}
}
Aggregations