Search in sources :

Example 1 with MetadataResponseBrokerCollection

use of org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection in project kafka by apache.

the class MetadataTest method buildBrokerCollection.

private MetadataResponseBrokerCollection buildBrokerCollection(List<Node> nodes) {
    MetadataResponseBrokerCollection brokers = new MetadataResponseBrokerCollection();
    for (Node node : nodes) {
        MetadataResponseData.MetadataResponseBroker broker = new MetadataResponseData.MetadataResponseBroker().setNodeId(node.id()).setHost(node.host()).setPort(node.port()).setRack(node.rack());
        brokers.add(broker);
    }
    return brokers;
}
Also used : MetadataResponseBrokerCollection(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection) Node(org.apache.kafka.common.Node) MetadataResponseData(org.apache.kafka.common.message.MetadataResponseData)

Example 2 with MetadataResponseBrokerCollection

use of org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection in project kafka by apache.

the class MetadataTest method testIgnoreLeaderEpochInOlderMetadataResponse.

/**
 * Prior to Kafka version 2.4 (which coincides with Metadata version 9), the broker does not propagate leader epoch
 * information accurately while a reassignment is in progress, so we cannot rely on it. This is explained in more
 * detail in MetadataResponse's constructor.
 */
@Test
public void testIgnoreLeaderEpochInOlderMetadataResponse() {
    TopicPartition tp = new TopicPartition("topic", 0);
    MetadataResponsePartition partitionMetadata = new MetadataResponsePartition().setPartitionIndex(tp.partition()).setLeaderId(5).setLeaderEpoch(10).setReplicaNodes(Arrays.asList(1, 2, 3)).setIsrNodes(Arrays.asList(1, 2, 3)).setOfflineReplicas(Collections.emptyList()).setErrorCode(Errors.NONE.code());
    MetadataResponseTopic topicMetadata = new MetadataResponseTopic().setName(tp.topic()).setErrorCode(Errors.NONE.code()).setPartitions(Collections.singletonList(partitionMetadata)).setIsInternal(false);
    MetadataResponseTopicCollection topics = new MetadataResponseTopicCollection();
    topics.add(topicMetadata);
    MetadataResponseData data = new MetadataResponseData().setClusterId("clusterId").setControllerId(0).setTopics(topics).setBrokers(new MetadataResponseBrokerCollection());
    for (short version = ApiKeys.METADATA.oldestVersion(); version < 9; version++) {
        ByteBuffer buffer = MessageUtil.toByteBuffer(data, version);
        MetadataResponse response = MetadataResponse.parse(buffer, version);
        assertFalse(response.hasReliableLeaderEpochs());
        metadata.updateWithCurrentRequestVersion(response, false, 100);
        assertTrue(metadata.partitionMetadataIfCurrent(tp).isPresent());
        MetadataResponse.PartitionMetadata responseMetadata = this.metadata.partitionMetadataIfCurrent(tp).get();
        assertEquals(Optional.empty(), responseMetadata.leaderEpoch);
    }
    for (short version = 9; version <= ApiKeys.METADATA.latestVersion(); version++) {
        ByteBuffer buffer = MessageUtil.toByteBuffer(data, version);
        MetadataResponse response = MetadataResponse.parse(buffer, version);
        assertTrue(response.hasReliableLeaderEpochs());
        metadata.updateWithCurrentRequestVersion(response, false, 100);
        assertTrue(metadata.partitionMetadataIfCurrent(tp).isPresent());
        MetadataResponse.PartitionMetadata responseMetadata = metadata.partitionMetadataIfCurrent(tp).get();
        assertEquals(Optional.of(10), responseMetadata.leaderEpoch);
    }
}
Also used : MetadataResponseTopic(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseTopic) MetadataResponsePartition(org.apache.kafka.common.message.MetadataResponseData.MetadataResponsePartition) MetadataResponseBrokerCollection(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection) MetadataResponseTopicCollection(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseTopicCollection) TopicPartition(org.apache.kafka.common.TopicPartition) MetadataResponseData(org.apache.kafka.common.message.MetadataResponseData) MetadataResponse(org.apache.kafka.common.requests.MetadataResponse) ByteBuffer(java.nio.ByteBuffer) Test(org.junit.jupiter.api.Test)

Example 3 with MetadataResponseBrokerCollection

use of org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection in project kafka by apache.

the class MetadataTest method testStaleMetadata.

@Test
public void testStaleMetadata() {
    TopicPartition tp = new TopicPartition("topic", 0);
    MetadataResponsePartition partitionMetadata = new MetadataResponsePartition().setPartitionIndex(tp.partition()).setLeaderId(1).setLeaderEpoch(10).setReplicaNodes(Arrays.asList(1, 2, 3)).setIsrNodes(Arrays.asList(1, 2, 3)).setOfflineReplicas(Collections.emptyList()).setErrorCode(Errors.NONE.code());
    MetadataResponseTopic topicMetadata = new MetadataResponseTopic().setName(tp.topic()).setErrorCode(Errors.NONE.code()).setPartitions(Collections.singletonList(partitionMetadata)).setIsInternal(false);
    MetadataResponseTopicCollection topics = new MetadataResponseTopicCollection();
    topics.add(topicMetadata);
    MetadataResponseData data = new MetadataResponseData().setClusterId("clusterId").setControllerId(0).setTopics(topics).setBrokers(new MetadataResponseBrokerCollection());
    metadata.updateWithCurrentRequestVersion(new MetadataResponse(data, ApiKeys.METADATA.latestVersion()), false, 100);
    // Older epoch with changed ISR should be ignored
    partitionMetadata.setPartitionIndex(tp.partition()).setLeaderId(1).setLeaderEpoch(9).setReplicaNodes(Arrays.asList(1, 2, 3)).setIsrNodes(Arrays.asList(1, 2)).setOfflineReplicas(Collections.emptyList()).setErrorCode(Errors.NONE.code());
    metadata.updateWithCurrentRequestVersion(new MetadataResponse(data, ApiKeys.METADATA.latestVersion()), false, 101);
    assertEquals(Optional.of(10), metadata.lastSeenLeaderEpoch(tp));
    assertTrue(metadata.partitionMetadataIfCurrent(tp).isPresent());
    MetadataResponse.PartitionMetadata responseMetadata = this.metadata.partitionMetadataIfCurrent(tp).get();
    assertEquals(Arrays.asList(1, 2, 3), responseMetadata.inSyncReplicaIds);
    assertEquals(Optional.of(10), responseMetadata.leaderEpoch);
}
Also used : MetadataResponseTopic(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseTopic) MetadataResponsePartition(org.apache.kafka.common.message.MetadataResponseData.MetadataResponsePartition) MetadataResponseBrokerCollection(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection) MetadataResponseTopicCollection(org.apache.kafka.common.message.MetadataResponseData.MetadataResponseTopicCollection) TopicPartition(org.apache.kafka.common.TopicPartition) MetadataResponseData(org.apache.kafka.common.message.MetadataResponseData) MetadataResponse(org.apache.kafka.common.requests.MetadataResponse) Test(org.junit.jupiter.api.Test)

Aggregations

MetadataResponseData (org.apache.kafka.common.message.MetadataResponseData)3 MetadataResponseBrokerCollection (org.apache.kafka.common.message.MetadataResponseData.MetadataResponseBrokerCollection)3 TopicPartition (org.apache.kafka.common.TopicPartition)2 MetadataResponsePartition (org.apache.kafka.common.message.MetadataResponseData.MetadataResponsePartition)2 MetadataResponseTopic (org.apache.kafka.common.message.MetadataResponseData.MetadataResponseTopic)2 MetadataResponseTopicCollection (org.apache.kafka.common.message.MetadataResponseData.MetadataResponseTopicCollection)2 MetadataResponse (org.apache.kafka.common.requests.MetadataResponse)2 Test (org.junit.jupiter.api.Test)2 ByteBuffer (java.nio.ByteBuffer)1 Node (org.apache.kafka.common.Node)1