chia7712 commented on a change in pull request #10234:
URL: https://github.com/apache/kafka/pull/10234#discussion_r586270002
##########
File path:
clients/src/main/java/org/apache/kafka/common/requests/LeaderAndIsrRequest.java
##########
@@ -145,24 +145,21 @@ public LeaderAndIsrResponse getErrorResponse(int
throttleTimeMs, Throwable e) {
.setErrorCode(error.code()));
}
responseData.setPartitionErrors(partitions);
- return new LeaderAndIsrResponse(responseData, version());
- }
-
- List<LeaderAndIsrTopicError> topics = new
ArrayList<>(data.topicStates().size());
- Map<String, Uuid> topicIds = topicIds();
- for (LeaderAndIsrTopicState topicState : data.topicStates()) {
- LeaderAndIsrTopicError topicError = new LeaderAndIsrTopicError();
- topicError.setTopicId(topicIds.get(topicState.topicName()));
- List<LeaderAndIsrPartitionError> partitions = new
ArrayList<>(topicState.partitionStates().size());
- for (LeaderAndIsrPartitionState partition :
topicState.partitionStates()) {
- partitions.add(new LeaderAndIsrPartitionError()
+ } else {
+ for (LeaderAndIsrTopicState topicState : data.topicStates()) {
+ List<LeaderAndIsrPartitionError> partitions = new ArrayList<>(
+ topicState.partitionStates().size());
+ for (LeaderAndIsrPartitionState partition :
topicState.partitionStates()) {
+ partitions.add(new LeaderAndIsrPartitionError()
.setPartitionIndex(partition.partitionIndex())
Review comment:
Could you add comments to explain why we don't need to set topic name
here? Otherwise, It looks like a bug to me :(
##########
File path: core/src/main/scala/kafka/server/ReplicaManager.scala
##########
@@ -1441,38 +1441,29 @@ class ReplicaManager(val config: KafkaConfig,
replicaFetcherManager.shutdownIdleFetcherThreads()
replicaAlterLogDirsManager.shutdownIdleFetcherThreads()
onLeadershipChange(partitionsBecomeLeader, partitionsBecomeFollower)
- if (leaderAndIsrRequest.version() < 5) {
- val responsePartitions = responseMap.iterator.map { case (tp,
error) =>
- new LeaderAndIsrPartitionError()
+
+ val data = new
LeaderAndIsrResponseData().setErrorCode(Errors.NONE.code)
+ if (leaderAndIsrRequest.version < 5) {
+ responseMap.forKeyValue { (tp, error) =>
+ data.partitionErrors.add(new LeaderAndIsrPartitionError()
.setTopicName(tp.topic)
.setPartitionIndex(tp.partition)
- .setErrorCode(error.code)
- }.toBuffer
- new LeaderAndIsrResponse(new LeaderAndIsrResponseData()
- .setErrorCode(Errors.NONE.code)
- .setPartitionErrors(responsePartitions.asJava),
leaderAndIsrRequest.version())
+ .setErrorCode(error.code))
+ }
} else {
- val topics = new mutable.HashMap[String,
List[LeaderAndIsrPartitionError]]
- responseMap.asJava.forEach { case (tp, error) =>
- if (!topics.contains(tp.topic)) {
- topics.put(tp.topic, List(new LeaderAndIsrPartitionError()
-
.setPartitionIndex(tp.partition)
-
.setErrorCode(error.code)))
- } else {
- topics.put(tp.topic, new LeaderAndIsrPartitionError()
- .setPartitionIndex(tp.partition)
- .setErrorCode(error.code)::topics(tp.topic))
+ responseMap.forKeyValue { (tp, error) =>
+ val topicId = topicIds.get(tp.topic)
+ var topic = data.topics.find(topicId)
+ if (topic == null) {
+ topic = new LeaderAndIsrTopicError().setTopicId(topicId)
+ data.topics.add(topic)
}
+ topic.partitionErrors.add(new LeaderAndIsrPartitionError()
+ .setPartitionIndex(tp.partition)
Review comment:
ditto
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]