KAFKA-830 partition replica assignment map in the controller should be a Set; reviewed by Jun Rao and Swapnil Ghike
Project: http://git-wip-us.apache.org/repos/asf/kafka/repo Commit: http://git-wip-us.apache.org/repos/asf/kafka/commit/c5e354d3 Tree: http://git-wip-us.apache.org/repos/asf/kafka/tree/c5e354d3 Diff: http://git-wip-us.apache.org/repos/asf/kafka/diff/c5e354d3 Branch: refs/heads/trunk Commit: c5e354d3ab8ee4f9d18da6c084d4abfb00911b7c Parents: 26c50fa Author: Neha Narkhede <[email protected]> Authored: Wed Mar 27 13:29:18 2013 -0700 Committer: Neha Narkhede <[email protected]> Committed: Wed Mar 27 13:29:18 2013 -0700 ---------------------------------------------------------------------- core/src/main/scala/kafka/controller/ReplicaStateMachine.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kafka/blob/c5e354d3/core/src/main/scala/kafka/controller/ReplicaStateMachine.scala ---------------------------------------------------------------------- diff --git a/core/src/main/scala/kafka/controller/ReplicaStateMachine.scala b/core/src/main/scala/kafka/controller/ReplicaStateMachine.scala index 5146f12..199640b 100644 --- a/core/src/main/scala/kafka/controller/ReplicaStateMachine.scala +++ b/core/src/main/scala/kafka/controller/ReplicaStateMachine.scala @@ -138,7 +138,8 @@ class ReplicaStateMachine(controller: KafkaController) extends Logging { case NewReplica => // add this replica to the assigned replicas list for its partition val currentAssignedReplicas = controllerContext.partitionReplicaAssignment(topicAndPartition) - controllerContext.partitionReplicaAssignment.put(topicAndPartition, currentAssignedReplicas :+ replicaId) + if(!currentAssignedReplicas.contains(replicaId)) + controllerContext.partitionReplicaAssignment.put(topicAndPartition, currentAssignedReplicas :+ replicaId) stateChangeLogger.trace("Controller %d epoch %d changed state of replica %d for partition %s to OnlineReplica" .format(controllerId, controller.epoch, replicaId, topicAndPartition)) case _ =>
