diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala index 259f487358..d55882205c 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala @@ -100,11 +100,12 @@ class Member(val address: Address, val status: MemberStatus) extends ClusterMess object Member { import MemberStatus._ + /** + * Sort Address by host and port + */ implicit val addressOrdering: Ordering[Address] = Ordering.fromLessThan[Address] { (a, b) ⇒ - if (a.protocol != b.protocol) a.protocol.compareTo(b.protocol) < 0 - else if (a.system != b.system) a.system.compareTo(b.system) < 0 - else if (a.host.getOrElse("") != b.host.getOrElse("")) a.host.getOrElse("").compareTo(b.host.getOrElse("")) < 0 - else if (a.port.getOrElse(0) != b.port.getOrElse(0)) a.port.getOrElse(0) < b.port.getOrElse(0) + if (a.host != b.host) a.host.getOrElse("").compareTo(b.host.getOrElse("")) < 0 + else if (a.port != b.port) a.port.getOrElse(0) < b.port.getOrElse(0) else false } diff --git a/akka-cluster/src/test/scala/akka/cluster/MemberSpec.scala b/akka-cluster/src/test/scala/akka/cluster/MemberSpec.scala index ba1037b8bc..050407577e 100644 --- a/akka-cluster/src/test/scala/akka/cluster/MemberSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/MemberSpec.scala @@ -16,14 +16,14 @@ class MemberSpec extends WordSpec with MustMatchers { "be sorted by address correctly" in { import Member.ordering + // sorting should be done on host and port, only val m1 = Member(Address("akka", "sys1", "host1", 9000), MemberStatus.Up) val m2 = Member(Address("akka", "sys1", "host1", 10000), MemberStatus.Up) - val m3 = Member(Address("cluster", "sys1", "host1", 10000), MemberStatus.Up) - val m4 = Member(Address("cluster", "sys1", "host2", 10000), MemberStatus.Up) - val m5 = Member(Address("cluster", "sys2", "host2", 10000), MemberStatus.Up) - val m6 = Member(Address("cluster", "sys2", "host3", 8000), MemberStatus.Up) + val m3 = Member(Address("cluster", "sys2", "host2", 8000), MemberStatus.Up) + val m4 = Member(Address("cluster", "sys2", "host2", 9000), MemberStatus.Up) + val m5 = Member(Address("cluster", "sys1", "host2", 10000), MemberStatus.Up) - val expected = IndexedSeq(m1, m2, m3, m4, m5, m6) + val expected = IndexedSeq(m1, m2, m3, m4, m5) val shuffled = Random.shuffle(expected) shuffled.sorted must be(expected) }