Skip to content

Commit

Permalink
Fix bug when handling the removal of a node
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Conrad committed Jun 1, 2010
1 parent 02ec167 commit 1d3b81e
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,8 @@ trait ZooKeeperClusterManagerComponent extends ClusterManagerComponent {
val members = zk.getChildren(MEMBERSHIP_NODE, true)
val available = zk.getChildren(AVAILABILITY_NODE, true)

currentNodes.clear

members.foreach { member =>
val id = member.toInt
currentNodes += (id -> Node(id, zk.getData("%s/%s".format(MEMBERSHIP_NODE, member), false, null), available.contains(member)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,40 @@ class ZooKeeperClusterManagerComponentSpec extends SpecificationWithJUnit with M
mockZooKeeper.getChildren(membershipNode, true) was called.twice
}

"handle the case that a node is removed" in {
val membership = new ArrayList[String]
membership.add("1")
membership.add("2")
membership.add("3")

val newMembership = new ArrayList[String]
newMembership.add("1")
newMembership.add("3")

val nodes = Array(Node(1, "localhost:31313", Set(1, 2), true),
Node(2, "localhost:31314", Set(2, 3), true), Node(3, "localhost:31315", Set(2, 3), false))

mockZooKeeper.getChildren(membershipNode, true) returns membership thenReturns newMembership
nodes.foreach { node =>
mockZooKeeper.getData("%s/%d".format(membershipNode, node.id), false, null) returns Node.nodeToByteArray(node)
}
mockZooKeeper.getChildren(availabilityNode, true) returns membership

clusterManager ! Connected

nodesReceived.size must eventually(be_==(3))
nodesReceived must containAll(nodes)
nodesReceived.foreach { _.available must beTrue }

clusterManager ! NodeChildrenChanged(membershipNode)

nodesChangedCount must eventually(be_==(1))
nodesReceived.size must be_==(2)
nodesReceived must containAll(List(nodes(0), nodes(2)))

mockZooKeeper.getChildren(membershipNode, true) was called.twice
}

"do nothing if not connected" in {
clusterManager ! NodeChildrenChanged(membershipNode)

Expand Down

0 comments on commit 1d3b81e

Please sign in to comment.