First step in refactoring of cluster internals to actors, see #2311

* Move clustering code to ClusterCore actor
* More will be done, comitting this for early review
This commit is contained in:
Patrik Nordwall 2012-07-04 11:37:56 +02:00
parent 1ccb9fe7ec
commit c708d2ad8a
11 changed files with 820 additions and 870 deletions

View file

@ -50,6 +50,7 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
// 3 deputy nodes (addresses index 1, 2, 3)
override def seedNodes = addresses.slice(1, 4)
/* FIXME This way of mocking is not possible any more...
override def selectRandomNode(addresses: IndexedSeq[Address]): Option[Address] = {
if (addresses.isEmpty) None
else Some(addresses.toSeq(deterministicRandom.getAndIncrement % addresses.size))
@ -71,24 +72,29 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
else _gossipToDeputyProbablity
}
*/
}
def memberStatus(address: Address): Option[MemberStatus] =
cluster.latestGossip.members.collectFirst { case m if m.address == address m.status }
before {
/* FIXME
cluster._gossipToDeputyProbablity = 0.0
*/
addresses foreach failureDetector.remove
deterministicRandom.set(0)
}
/* FIXME ignored due to actor refactoring, must be done in other way
"A Cluster" must {
"use the address of the remote transport" in {
"use the address of the remote transport" ignore {
cluster.selfAddress must be(selfAddress)
}
"initially become singleton cluster when joining itself and reach convergence" in {
"initially become singleton cluster when joining itself and reach convergence" ignore {
cluster.isSingletonCluster must be(false) // auto-join = off
cluster.join(selfAddress)
awaitCond(cluster.isSingletonCluster)
@ -96,11 +102,13 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
cluster.latestGossip.members.map(_.address) must be(Set(selfAddress))
memberStatus(selfAddress) must be(Some(MemberStatus.Joining))
cluster.convergence.isDefined must be(true)
/* FIXME
cluster.leaderActions()
*/
memberStatus(selfAddress) must be(Some(MemberStatus.Up))
}
"accept a joining node" in {
"accept a joining node" ignore {
cluster.joining(addresses(1))
cluster.latestGossip.members.map(_.address) must be(Set(selfAddress, addresses(1)))
memberStatus(addresses(1)) must be(Some(MemberStatus.Joining))
@ -108,7 +116,7 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
expectMsg(GossipTo(addresses(1)))
}
"accept a few more joining nodes" in {
"accept a few more joining nodes" ignore {
for (a addresses.drop(2)) {
cluster.joining(a)
memberStatus(a) must be(Some(MemberStatus.Joining))
@ -117,12 +125,12 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
cluster.latestGossip.members.map(_.address) must be(addresses.toSet)
}
"order members by host and port" in {
"order members by host and port" ignore {
// note the importance of using toSeq before map, otherwise it will not preserve the order
cluster.latestGossip.members.toSeq.map(_.address) must be(addresses.toSeq)
}
"gossip to random live node" in {
"gossip to random live node" ignore {
cluster.gossip()
cluster.gossip()
cluster.gossip()
@ -136,7 +144,7 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
expectNoMsg(1 second)
}
"use certain probability for gossiping to deputy node depending on the number of unreachable and live nodes" in {
"use certain probability for gossiping to deputy node depending on the number of unreachable and live nodes" ignore {
cluster._gossipToDeputyProbablity = -1.0 // use real impl
cluster.gossipToDeputyProbablity(10, 1, 2) must be < (cluster.gossipToDeputyProbablity(9, 1, 2))
cluster.gossipToDeputyProbablity(10, 1, 2) must be < (cluster.gossipToDeputyProbablity(10, 2, 2))
@ -150,7 +158,7 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
cluster.gossipToDeputyProbablity(3, 7, 4) must be(1.0 plusOrMinus (0.0001))
}
"gossip to duputy node" in {
"gossip to duputy node" ignore {
cluster._gossipToDeputyProbablity = 1.0 // always
// we have configured 3 deputy nodes (seedNodes)
@ -170,7 +178,7 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
}
"gossip to random deputy node if number of live nodes is less than number of deputy nodes" in {
"gossip to random deputy node if number of live nodes is less than number of deputy nodes" ignore {
cluster._gossipToDeputyProbablity = -1.0 // real impl
// 0 and 2 still alive
val dead = Set(addresses(1), addresses(3), addresses(4), addresses(5))
@ -190,4 +198,5 @@ class ClusterSpec extends AkkaSpec(ClusterSpec.config) with BeforeAndAfter {
}
}
*/
}