org.apache.kafka.common.TopicPartitionInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jena-fmod-kafka Show documentation
Show all versions of jena-fmod-kafka Show documentation
Apache Jena Fuseki server Kafka connector
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.kafka.common;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* A class containing leadership, replicas and ISR information for a topic partition.
*/
public class TopicPartitionInfo {
private final int partition;
private final Node leader;
private final List replicas;
private final List isr;
private final List elr;
private final List lastKnownElr;
/**
* Create an instance of this class with the provided parameters.
*
* @param partition the partition id
* @param leader the leader of the partition or {@link Node#noNode()} if there is none.
* @param replicas the replicas of the partition in the same order as the replica assignment (the preferred replica
* is the head of the list)
* @param isr the in-sync replicas
* @param elr the eligible leader replicas
* @param lastKnownElr the last known eligible leader replicas.
*/
public TopicPartitionInfo(
int partition,
Node leader,
List replicas,
List isr,
List elr,
List lastKnownElr
) {
this.partition = partition;
this.leader = leader;
this.replicas = Collections.unmodifiableList(replicas);
this.isr = Collections.unmodifiableList(isr);
this.elr = Collections.unmodifiableList(elr);
this.lastKnownElr = Collections.unmodifiableList(lastKnownElr);
}
public TopicPartitionInfo(int partition, Node leader, List replicas, List isr) {
this.partition = partition;
this.leader = leader;
this.replicas = Collections.unmodifiableList(replicas);
this.isr = Collections.unmodifiableList(isr);
this.elr = null;
this.lastKnownElr = null;
}
/**
* Return the partition id.
*/
public int partition() {
return partition;
}
/**
* Return the leader of the partition or null if there is none.
*/
public Node leader() {
return leader;
}
/**
* Return the replicas of the partition in the same order as the replica assignment. The preferred replica is the
* head of the list.
*
* Brokers with version lower than 0.11.0.0 return the replicas in unspecified order due to a bug.
*/
public List replicas() {
return replicas;
}
/**
* Return the in-sync replicas of the partition. Note that the ordering of the result is unspecified.
*/
public List isr() {
return isr;
}
/**
* Return the eligible leader replicas of the partition. Note that the ordering of the result is unspecified.
*/
public List elr() {
return elr;
}
/**
* Return the last known eligible leader replicas of the partition. Note that the ordering of the result is unspecified.
*/
public List lastKnownElr() {
return lastKnownElr;
}
public String toString() {
String elrString = elr != null ? elr.stream().map(Node::toString).collect(Collectors.joining(", ")) : "N/A";
String lastKnownElrString = lastKnownElr != null ? lastKnownElr.stream().map(Node::toString).collect(Collectors.joining(", ")) : "N/A";
return "(partition=" + partition + ", leader=" + leader + ", replicas=" +
replicas.stream().map(Node::toString).collect(Collectors.joining(", ")) + ", isr=" + isr.stream().map(Node::toString).collect(Collectors.joining(", ")) +
", elr=" + elrString + ", lastKnownElr=" + lastKnownElrString + ")";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TopicPartitionInfo that = (TopicPartitionInfo) o;
return partition == that.partition &&
Objects.equals(leader, that.leader) &&
Objects.equals(replicas, that.replicas) &&
Objects.equals(isr, that.isr) &&
Objects.equals(elr, that.elr) &&
Objects.equals(lastKnownElr, that.lastKnownElr);
}
@Override
public int hashCode() {
int result = partition;
result = 31 * result + (leader != null ? leader.hashCode() : 0);
result = 31 * result + (replicas != null ? replicas.hashCode() : 0);
result = 31 * result + (isr != null ? isr.hashCode() : 0);
result = 31 * result + (elr != null ? elr.hashCode() : 0);
result = 31 * result + (lastKnownElr != null ? lastKnownElr.hashCode() : 0);
return result;
}
}