Sort on host and port only. See #2133
This commit is contained in:
parent
34915063cd
commit
a2cd84e047
2 changed files with 10 additions and 9 deletions
|
|
@ -100,11 +100,12 @@ class Member(val address: Address, val status: MemberStatus) extends ClusterMess
|
||||||
object Member {
|
object Member {
|
||||||
import MemberStatus._
|
import MemberStatus._
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort Address by host and port
|
||||||
|
*/
|
||||||
implicit val addressOrdering: Ordering[Address] = Ordering.fromLessThan[Address] { (a, b) ⇒
|
implicit val addressOrdering: Ordering[Address] = Ordering.fromLessThan[Address] { (a, b) ⇒
|
||||||
if (a.protocol != b.protocol) a.protocol.compareTo(b.protocol) < 0
|
if (a.host != b.host) a.host.getOrElse("").compareTo(b.host.getOrElse("")) < 0
|
||||||
else if (a.system != b.system) a.system.compareTo(b.system) < 0
|
else if (a.port != b.port) a.port.getOrElse(0) < b.port.getOrElse(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)
|
|
||||||
else false
|
else false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@ class MemberSpec extends WordSpec with MustMatchers {
|
||||||
|
|
||||||
"be sorted by address correctly" in {
|
"be sorted by address correctly" in {
|
||||||
import Member.ordering
|
import Member.ordering
|
||||||
|
// sorting should be done on host and port, only
|
||||||
val m1 = Member(Address("akka", "sys1", "host1", 9000), MemberStatus.Up)
|
val m1 = Member(Address("akka", "sys1", "host1", 9000), MemberStatus.Up)
|
||||||
val m2 = Member(Address("akka", "sys1", "host1", 10000), MemberStatus.Up)
|
val m2 = Member(Address("akka", "sys1", "host1", 10000), MemberStatus.Up)
|
||||||
val m3 = Member(Address("cluster", "sys1", "host1", 10000), MemberStatus.Up)
|
val m3 = Member(Address("cluster", "sys2", "host2", 8000), MemberStatus.Up)
|
||||||
val m4 = Member(Address("cluster", "sys1", "host2", 10000), MemberStatus.Up)
|
val m4 = Member(Address("cluster", "sys2", "host2", 9000), MemberStatus.Up)
|
||||||
val m5 = Member(Address("cluster", "sys2", "host2", 10000), MemberStatus.Up)
|
val m5 = Member(Address("cluster", "sys1", "host2", 10000), MemberStatus.Up)
|
||||||
val m6 = Member(Address("cluster", "sys2", "host3", 8000), MemberStatus.Up)
|
|
||||||
|
|
||||||
val expected = IndexedSeq(m1, m2, m3, m4, m5, m6)
|
val expected = IndexedSeq(m1, m2, m3, m4, m5)
|
||||||
val shuffled = Random.shuffle(expected)
|
val shuffled = Random.shuffle(expected)
|
||||||
shuffled.sorted must be(expected)
|
shuffled.sorted must be(expected)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue