Search in sources :

Example 1 with Voter

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());
}
Also used : LeaderChangeMessage(org.apache.kafka.common.message.LeaderChangeMessage) ObjectSerializationCache(org.apache.kafka.common.protocol.ObjectSerializationCache) Voter(org.apache.kafka.common.message.LeaderChangeMessage.Voter) ByteBufferAccessor(org.apache.kafka.common.protocol.ByteBufferAccessor) ByteBuffer(java.nio.ByteBuffer)

Example 2 with Voter

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()));
}
Also used : LeaderChangeMessage(org.apache.kafka.common.message.LeaderChangeMessage) Voter(org.apache.kafka.common.message.LeaderChangeMessage.Voter)

Example 3 with Voter

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();
}
Also used : LeaderChangeMessage(org.apache.kafka.common.message.LeaderChangeMessage) Voter(org.apache.kafka.common.message.LeaderChangeMessage.Voter)

Example 4 with Voter

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());
}
Also used : LeaderChangeMessage(org.apache.kafka.common.message.LeaderChangeMessage) Voter(org.apache.kafka.common.message.LeaderChangeMessage.Voter) ByteBuffer(java.nio.ByteBuffer) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 5 with Voter

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()));
    }
}
Also used : Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) Arrays(java.util.Arrays) MAGIC_VALUE_V2(org.apache.kafka.common.record.RecordBatch.MAGIC_VALUE_V2) MAGIC_VALUE_V1(org.apache.kafka.common.record.RecordBatch.MAGIC_VALUE_V1) BiFunction(java.util.function.BiFunction) EnumSource(org.junit.jupiter.params.provider.EnumSource) Random(java.util.Random) ExtensionContext(org.junit.jupiter.api.extension.ExtensionContext) MAGIC_VALUE_V0(org.apache.kafka.common.record.RecordBatch.MAGIC_VALUE_V0) Supplier(java.util.function.Supplier) ByteBuffer(java.nio.ByteBuffer) ArrayList(java.util.ArrayList) OptionalLong(java.util.OptionalLong) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) BufferSupplier(org.apache.kafka.common.utils.BufferSupplier) Arrays.asList(java.util.Arrays.asList) ArgumentsProvider(org.junit.jupiter.params.provider.ArgumentsProvider) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) LeaderChangeMessage(org.apache.kafka.common.message.LeaderChangeMessage) Utils(org.apache.kafka.common.utils.Utils) Time(org.apache.kafka.common.utils.Time) TestUtils(org.apache.kafka.test.TestUtils) Utils.utf8(org.apache.kafka.common.utils.Utils.utf8) Voter(org.apache.kafka.common.message.LeaderChangeMessage.Voter) Arguments(org.junit.jupiter.params.provider.Arguments) Collectors(java.util.stream.Collectors) CloseableIterator(org.apache.kafka.common.utils.CloseableIterator) Test(org.junit.jupiter.api.Test) UnsupportedCompressionTypeException(org.apache.kafka.common.errors.UnsupportedCompressionTypeException) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) List(java.util.List) Stream(java.util.stream.Stream) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) ByteBufferOutputStream(org.apache.kafka.common.utils.ByteBufferOutputStream) ArgumentsSource(org.junit.jupiter.params.provider.ArgumentsSource) Collections(java.util.Collections) ByteBuffer(java.nio.ByteBuffer) LeaderChangeMessage(org.apache.kafka.common.message.LeaderChangeMessage) Voter(org.apache.kafka.common.message.LeaderChangeMessage.Voter) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) ArgumentsSource(org.junit.jupiter.params.provider.ArgumentsSource)

Aggregations

LeaderChangeMessage (org.apache.kafka.common.message.LeaderChangeMessage)5 Voter (org.apache.kafka.common.message.LeaderChangeMessage.Voter)5 ByteBuffer (java.nio.ByteBuffer)3 Test (org.junit.jupiter.api.Test)2 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)2 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Arrays.asList (java.util.Arrays.asList)1 Collections (java.util.Collections)1 List (java.util.List)1 OptionalLong (java.util.OptionalLong)1 Random (java.util.Random)1 BiFunction (java.util.function.BiFunction)1 Supplier (java.util.function.Supplier)1 Collectors (java.util.stream.Collectors)1 Stream (java.util.stream.Stream)1 UnsupportedCompressionTypeException (org.apache.kafka.common.errors.UnsupportedCompressionTypeException)1 ByteBufferAccessor (org.apache.kafka.common.protocol.ByteBufferAccessor)1 ObjectSerializationCache (org.apache.kafka.common.protocol.ObjectSerializationCache)1 MAGIC_VALUE_V0 (org.apache.kafka.common.record.RecordBatch.MAGIC_VALUE_V0)1