Search in sources :

Example 1 with OffsetForLeaderTopicResult

use of org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult in project kafka by apache.

the class OffsetsForLeaderEpochRequest method getErrorResponse.

@Override
public AbstractResponse getErrorResponse(int throttleTimeMs, Throwable e) {
    Errors error = Errors.forException(e);
    OffsetForLeaderEpochResponseData responseData = new OffsetForLeaderEpochResponseData();
    data.topics().forEach(topic -> {
        OffsetForLeaderTopicResult topicData = new OffsetForLeaderTopicResult().setTopic(topic.topic());
        topic.partitions().forEach(partition -> topicData.partitions().add(new EpochEndOffset().setPartition(partition.partition()).setErrorCode(error.code()).setLeaderEpoch(UNDEFINED_EPOCH).setEndOffset(UNDEFINED_EPOCH_OFFSET)));
        responseData.topics().add(topicData);
    });
    return new OffsetsForLeaderEpochResponse(responseData);
}
Also used : Errors(org.apache.kafka.common.protocol.Errors) EpochEndOffset(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.EpochEndOffset) OffsetForLeaderTopicResult(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult) OffsetForLeaderEpochResponseData(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData)

Example 2 with OffsetForLeaderTopicResult

use of org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult in project kafka by apache.

the class OffsetsForLeaderEpochClient method handleResponse.

@Override
protected OffsetForEpochResult handleResponse(Node node, Map<TopicPartition, SubscriptionState.FetchPosition> requestData, OffsetsForLeaderEpochResponse response) {
    Set<TopicPartition> partitionsToRetry = new HashSet<>(requestData.keySet());
    Set<String> unauthorizedTopics = new HashSet<>();
    Map<TopicPartition, EpochEndOffset> endOffsets = new HashMap<>();
    for (OffsetForLeaderTopicResult topic : response.data().topics()) {
        for (EpochEndOffset partition : topic.partitions()) {
            TopicPartition topicPartition = new TopicPartition(topic.topic(), partition.partition());
            if (!requestData.containsKey(topicPartition)) {
                logger().warn("Received unrequested topic or partition {} from response, ignoring.", topicPartition);
                continue;
            }
            Errors error = Errors.forCode(partition.errorCode());
            switch(error) {
                case NONE:
                    logger().debug("Handling OffsetsForLeaderEpoch response for {}. Got offset {} for epoch {}.", topicPartition, partition.endOffset(), partition.leaderEpoch());
                    endOffsets.put(topicPartition, partition);
                    partitionsToRetry.remove(topicPartition);
                    break;
                case NOT_LEADER_OR_FOLLOWER:
                case REPLICA_NOT_AVAILABLE:
                case KAFKA_STORAGE_ERROR:
                case OFFSET_NOT_AVAILABLE:
                case LEADER_NOT_AVAILABLE:
                case FENCED_LEADER_EPOCH:
                case UNKNOWN_LEADER_EPOCH:
                    logger().debug("Attempt to fetch offsets for partition {} failed due to {}, retrying.", topicPartition, error);
                    break;
                case UNKNOWN_TOPIC_OR_PARTITION:
                    logger().warn("Received unknown topic or partition error in OffsetsForLeaderEpoch request for partition {}.", topicPartition);
                    break;
                case TOPIC_AUTHORIZATION_FAILED:
                    unauthorizedTopics.add(topicPartition.topic());
                    partitionsToRetry.remove(topicPartition);
                    break;
                default:
                    logger().warn("Attempt to fetch offsets for partition {} failed due to: {}, retrying.", topicPartition, error.message());
            }
        }
    }
    if (!unauthorizedTopics.isEmpty())
        throw new TopicAuthorizationException(unauthorizedTopics);
    else
        return new OffsetForEpochResult(endOffsets, partitionsToRetry);
}
Also used : Errors(org.apache.kafka.common.protocol.Errors) EpochEndOffset(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.EpochEndOffset) HashMap(java.util.HashMap) TopicPartition(org.apache.kafka.common.TopicPartition) OffsetForLeaderTopicResult(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult) TopicAuthorizationException(org.apache.kafka.common.errors.TopicAuthorizationException) HashSet(java.util.HashSet)

Example 3 with OffsetForLeaderTopicResult

use of org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult in project kafka by apache.

the class RequestResponseTest method createLeaderEpochResponse.

private OffsetsForLeaderEpochResponse createLeaderEpochResponse() {
    OffsetForLeaderEpochResponseData data = new OffsetForLeaderEpochResponseData();
    data.topics().add(new OffsetForLeaderTopicResult().setTopic("topic1").setPartitions(asList(new EpochEndOffset().setPartition(0).setErrorCode(Errors.NONE.code()).setLeaderEpoch(1).setEndOffset(0), new EpochEndOffset().setPartition(1).setErrorCode(Errors.NONE.code()).setLeaderEpoch(1).setEndOffset(1))));
    data.topics().add(new OffsetForLeaderTopicResult().setTopic("topic2").setPartitions(singletonList(new EpochEndOffset().setPartition(2).setErrorCode(Errors.NONE.code()).setLeaderEpoch(1).setEndOffset(1))));
    return new OffsetsForLeaderEpochResponse(data);
}
Also used : EpochEndOffset(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.EpochEndOffset) OffsetForLeaderTopicResult(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult) OffsetForLeaderEpochResponseData(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData)

Example 4 with OffsetForLeaderTopicResult

use of org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult in project kafka by apache.

the class OffsetForLeaderEpochClientTest method prepareOffsetForLeaderEpochResponse.

private static OffsetsForLeaderEpochResponse prepareOffsetForLeaderEpochResponse(TopicPartition tp, Errors error, int leaderEpoch, long endOffset) {
    OffsetForLeaderEpochResponseData data = new OffsetForLeaderEpochResponseData();
    OffsetForLeaderTopicResult topic = new OffsetForLeaderTopicResult().setTopic(tp.topic());
    data.topics().add(topic);
    topic.partitions().add(new EpochEndOffset().setPartition(tp.partition()).setErrorCode(error.code()).setLeaderEpoch(leaderEpoch).setEndOffset(endOffset));
    return new OffsetsForLeaderEpochResponse(data);
}
Also used : EpochEndOffset(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.EpochEndOffset) OffsetForLeaderTopicResult(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult) OffsetForLeaderEpochResponseData(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData) OffsetsForLeaderEpochResponse(org.apache.kafka.common.requests.OffsetsForLeaderEpochResponse)

Example 5 with OffsetForLeaderTopicResult

use of org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult in project kafka by apache.

the class FetcherTest method prepareOffsetsForLeaderEpochResponse.

private OffsetsForLeaderEpochResponse prepareOffsetsForLeaderEpochResponse(TopicPartition topicPartition, Errors error, int leaderEpoch, long endOffset) {
    OffsetForLeaderEpochResponseData data = new OffsetForLeaderEpochResponseData();
    data.topics().add(new OffsetForLeaderTopicResult().setTopic(topicPartition.topic()).setPartitions(Collections.singletonList(new EpochEndOffset().setPartition(topicPartition.partition()).setErrorCode(error.code()).setLeaderEpoch(leaderEpoch).setEndOffset(endOffset))));
    return new OffsetsForLeaderEpochResponse(data);
}
Also used : EpochEndOffset(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.EpochEndOffset) OffsetForLeaderTopicResult(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult) OffsetForLeaderEpochResponseData(org.apache.kafka.common.message.OffsetForLeaderEpochResponseData) OffsetsForLeaderEpochResponse(org.apache.kafka.common.requests.OffsetsForLeaderEpochResponse)

Aggregations

EpochEndOffset (org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.EpochEndOffset)6 OffsetForLeaderTopicResult (org.apache.kafka.common.message.OffsetForLeaderEpochResponseData.OffsetForLeaderTopicResult)6 OffsetForLeaderEpochResponseData (org.apache.kafka.common.message.OffsetForLeaderEpochResponseData)5 OffsetsForLeaderEpochResponse (org.apache.kafka.common.requests.OffsetsForLeaderEpochResponse)3 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 Errors (org.apache.kafka.common.protocol.Errors)2 DataOutputStream (java.io.DataOutputStream)1 Field (java.lang.reflect.Field)1 ByteBuffer (java.nio.ByteBuffer)1 StandardCharsets (java.nio.charset.StandardCharsets)1 Duration (java.time.Duration)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Arrays.asList (java.util.Arrays.asList)1 Collections (java.util.Collections)1 Collections.emptyList (java.util.Collections.emptyList)1 Collections.emptyMap (java.util.Collections.emptyMap)1 Collections.singleton (java.util.Collections.singleton)1 Collections.singletonList (java.util.Collections.singletonList)1