Rename + operator of VectorClock and Versioned to :+

* + is kind of reserved for string concatination
This commit is contained in:
Patrik Nordwall 2012-06-12 16:15:05 +02:00
parent de1ad30217
commit 92cab53b1e
3 changed files with 95 additions and 95 deletions

View file

@ -195,9 +195,9 @@ case class Gossip(
/** /**
* Increments the version for this 'Node'. * Increments the version for this 'Node'.
*/ */
def +(node: VectorClock.Node): Gossip = copy(version = version + node) def :+(node: VectorClock.Node): Gossip = copy(version = version :+ node)
def +(member: Member): Gossip = { def :+(member: Member): Gossip = {
if (members contains member) this if (members contains member) this
else this copy (members = members + member) else this copy (members = members + member)
} }
@ -424,7 +424,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
private val state = { private val state = {
val member = Member(selfAddress, MemberStatus.Joining) val member = Member(selfAddress, MemberStatus.Joining)
val versionedGossip = Gossip(members = Gossip.emptyMembers + member) + vclockNode // add me as member and update my vector clock val versionedGossip = Gossip(members = Gossip.emptyMembers + member) :+ vclockNode // add me as member and update my vector clock
val seenVersionedGossip = versionedGossip seen selfAddress val seenVersionedGossip = versionedGossip seen selfAddress
new AtomicReference[State](State(seenVersionedGossip)) new AtomicReference[State](State(seenVersionedGossip))
} }
@ -658,7 +658,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
val newMembers = localMembers + Member(node, MemberStatus.Joining) // add joining node as Joining val newMembers = localMembers + Member(node, MemberStatus.Joining) // add joining node as Joining
val newGossip = localGossip copy (overview = newOverview, members = newMembers) val newGossip = localGossip copy (overview = newOverview, members = newMembers)
val versionedGossip = newGossip + vclockNode val versionedGossip = newGossip :+ vclockNode
val seenVersionedGossip = versionedGossip seen selfAddress val seenVersionedGossip = versionedGossip seen selfAddress
val newState = localState copy (latestGossip = seenVersionedGossip) val newState = localState copy (latestGossip = seenVersionedGossip)
@ -686,7 +686,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
val newMembers = localMembers + Member(address, MemberStatus.Leaving) // mark node as LEAVING val newMembers = localMembers + Member(address, MemberStatus.Leaving) // mark node as LEAVING
val newGossip = localGossip copy (members = newMembers) val newGossip = localGossip copy (members = newMembers)
val versionedGossip = newGossip + vclockNode val versionedGossip = newGossip :+ vclockNode
val seenVersionedGossip = versionedGossip seen selfAddress val seenVersionedGossip = versionedGossip seen selfAddress
val newState = localState copy (latestGossip = seenVersionedGossip) val newState = localState copy (latestGossip = seenVersionedGossip)
@ -772,7 +772,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
val newOverview = localOverview copy (seen = newSeen, unreachable = newUnreachablePlusNewlyDownedMembers) // update gossip overview val newOverview = localOverview copy (seen = newSeen, unreachable = newUnreachablePlusNewlyDownedMembers) // update gossip overview
val newGossip = localGossip copy (overview = newOverview, members = newMembers) // update gossip val newGossip = localGossip copy (overview = newOverview, members = newMembers) // update gossip
val versionedGossip = newGossip + vclockNode val versionedGossip = newGossip :+ vclockNode
val newState = localState copy (latestGossip = versionedGossip seen selfAddress) val newState = localState copy (latestGossip = versionedGossip seen selfAddress)
if (!state.compareAndSet(localState, newState)) downing(address) // recur if we fail the update if (!state.compareAndSet(localState, newState)) downing(address) // recur if we fail the update
@ -793,7 +793,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
if (remoteGossip.version <> localGossip.version) { if (remoteGossip.version <> localGossip.version) {
// concurrent // concurrent
val mergedGossip = remoteGossip merge localGossip val mergedGossip = remoteGossip merge localGossip
val versionedMergedGossip = mergedGossip + vclockNode val versionedMergedGossip = mergedGossip :+ vclockNode
// FIXME change to debug log level, when failure detector is stable // FIXME change to debug log level, when failure detector is stable
log.info( log.info(
@ -855,7 +855,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
val newGossip = localGossip copy (members = newMembers) val newGossip = localGossip copy (members = newMembers)
// version my changes // version my changes
val versionedGossip = newGossip + vclockNode val versionedGossip = newGossip :+ vclockNode
val seenVersionedGossip = versionedGossip seen selfAddress val seenVersionedGossip = versionedGossip seen selfAddress
state copy (latestGossip = seenVersionedGossip) state copy (latestGossip = seenVersionedGossip)
@ -992,7 +992,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
val newGossip = localGossip copy (overview = newOverview, members = newMembers) val newGossip = localGossip copy (overview = newOverview, members = newMembers)
// updating vclock and 'seen' table // updating vclock and 'seen' table
val versionedGossip = newGossip + vclockNode val versionedGossip = newGossip :+ vclockNode
val seenVersionedGossip = versionedGossip seen selfAddress val seenVersionedGossip = versionedGossip seen selfAddress
val newState = localState copy (latestGossip = seenVersionedGossip) val newState = localState copy (latestGossip = seenVersionedGossip)
@ -1111,7 +1111,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
// ---------------------- // ----------------------
// 5. Updating the vclock version for the changes // 5. Updating the vclock version for the changes
// ---------------------- // ----------------------
val versionedGossip = newGossip + vclockNode val versionedGossip = newGossip :+ vclockNode
// ---------------------- // ----------------------
// 6. Updating the 'seen' table // 6. Updating the 'seen' table

View file

@ -19,7 +19,7 @@ class VectorClockException(message: String) extends AkkaException(message)
*/ */
trait Versioned[T] { trait Versioned[T] {
def version: VectorClock def version: VectorClock
def +(node: VectorClock.Node): T def :+(node: VectorClock.Node): T
} }
/** /**
@ -142,7 +142,7 @@ case class VectorClock(
/** /**
* Increment the version for the node passed as argument. Returns a new VectorClock. * Increment the version for the node passed as argument. Returns a new VectorClock.
*/ */
def +(node: Node): VectorClock = copy(versions = versions + (node -> Timestamp())) def :+(node: Node): VectorClock = copy(versions = versions + (node -> Timestamp()))
/** /**
* Returns true if <code>this</code> and <code>that</code> are concurrent else false. * Returns true if <code>this</code> and <code>that</code> are concurrent else false.

View file

@ -27,67 +27,67 @@ class VectorClockSpec extends AkkaSpec {
"pass misc comparison test 1" in { "pass misc comparison test 1" in {
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + Node("1") val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 + Node("2") val clock3_1 = clock2_1 :+ Node("2")
val clock4_1 = clock3_1 + Node("1") val clock4_1 = clock3_1 :+ Node("1")
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + Node("1") val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 + Node("2") val clock3_2 = clock2_2 :+ Node("2")
val clock4_2 = clock3_2 + Node("1") val clock4_2 = clock3_2 :+ Node("1")
clock4_1 <> clock4_2 must be(false) clock4_1 <> clock4_2 must be(false)
} }
"pass misc comparison test 2" in { "pass misc comparison test 2" in {
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + Node("1") val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 + Node("2") val clock3_1 = clock2_1 :+ Node("2")
val clock4_1 = clock3_1 + Node("1") val clock4_1 = clock3_1 :+ Node("1")
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + Node("1") val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 + Node("2") val clock3_2 = clock2_2 :+ Node("2")
val clock4_2 = clock3_2 + Node("1") val clock4_2 = clock3_2 :+ Node("1")
val clock5_2 = clock4_2 + Node("3") val clock5_2 = clock4_2 :+ Node("3")
clock4_1 < clock5_2 must be(true) clock4_1 < clock5_2 must be(true)
} }
"pass misc comparison test 3" in { "pass misc comparison test 3" in {
var clock1_1 = VectorClock() var clock1_1 = VectorClock()
val clock2_1 = clock1_1 + Node("1") val clock2_1 = clock1_1 :+ Node("1")
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + Node("2") val clock2_2 = clock1_2 :+ Node("2")
clock2_1 <> clock2_2 must be(true) clock2_1 <> clock2_2 must be(true)
} }
"pass misc comparison test 4" in { "pass misc comparison test 4" in {
val clock1_3 = VectorClock() val clock1_3 = VectorClock()
val clock2_3 = clock1_3 + Node("1") val clock2_3 = clock1_3 :+ Node("1")
val clock3_3 = clock2_3 + Node("2") val clock3_3 = clock2_3 :+ Node("2")
val clock4_3 = clock3_3 + Node("1") val clock4_3 = clock3_3 :+ Node("1")
val clock1_4 = VectorClock() val clock1_4 = VectorClock()
val clock2_4 = clock1_4 + Node("1") val clock2_4 = clock1_4 :+ Node("1")
val clock3_4 = clock2_4 + Node("1") val clock3_4 = clock2_4 :+ Node("1")
val clock4_4 = clock3_4 + Node("3") val clock4_4 = clock3_4 :+ Node("3")
clock4_3 <> clock4_4 must be(true) clock4_3 <> clock4_4 must be(true)
} }
"pass misc comparison test 5" in { "pass misc comparison test 5" in {
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + Node("2") val clock2_1 = clock1_1 :+ Node("2")
val clock3_1 = clock2_1 + Node("2") val clock3_1 = clock2_1 :+ Node("2")
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + Node("1") val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 + Node("2") val clock3_2 = clock2_2 :+ Node("2")
val clock4_2 = clock3_2 + Node("2") val clock4_2 = clock3_2 :+ Node("2")
val clock5_2 = clock4_2 + Node("3") val clock5_2 = clock4_2 :+ Node("3")
clock3_1 < clock5_2 must be(true) clock3_1 < clock5_2 must be(true)
clock5_2 > clock3_1 must be(true) clock5_2 > clock3_1 must be(true)
@ -95,12 +95,12 @@ class VectorClockSpec extends AkkaSpec {
"pass misc comparison test 6" in { "pass misc comparison test 6" in {
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + Node("1") val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 + Node("2") val clock3_1 = clock2_1 :+ Node("2")
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + Node("1") val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 + Node("1") val clock3_2 = clock2_2 :+ Node("1")
clock3_1 <> clock3_2 must be(true) clock3_1 <> clock3_2 must be(true)
clock3_2 <> clock3_1 must be(true) clock3_2 <> clock3_1 must be(true)
@ -108,14 +108,14 @@ class VectorClockSpec extends AkkaSpec {
"pass misc comparison test 7" in { "pass misc comparison test 7" in {
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + Node("1") val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 + Node("2") val clock3_1 = clock2_1 :+ Node("2")
val clock4_1 = clock3_1 + Node("2") val clock4_1 = clock3_1 :+ Node("2")
val clock5_1 = clock4_1 + Node("3") val clock5_1 = clock4_1 :+ Node("3")
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + Node("2") val clock2_2 = clock1_2 :+ Node("2")
val clock3_2 = clock2_2 + Node("2") val clock3_2 = clock2_2 :+ Node("2")
clock5_1 <> clock3_2 must be(true) clock5_1 <> clock3_2 must be(true)
clock3_2 <> clock5_1 must be(true) clock3_2 <> clock5_1 must be(true)
@ -127,14 +127,14 @@ class VectorClockSpec extends AkkaSpec {
val node3 = Node("3") val node3 = Node("3")
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + node1 val clock2_1 = clock1_1 :+ node1
val clock3_1 = clock2_1 + node2 val clock3_1 = clock2_1 :+ node2
val clock4_1 = clock3_1 + node2 val clock4_1 = clock3_1 :+ node2
val clock5_1 = clock4_1 + node3 val clock5_1 = clock4_1 :+ node3
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + node2 val clock2_2 = clock1_2 :+ node2
val clock3_2 = clock2_2 + node2 val clock3_2 = clock2_2 :+ node2
val merged1 = clock3_2 merge clock5_1 val merged1 = clock3_2 merge clock5_1
merged1.versions.size must be(3) merged1.versions.size must be(3)
@ -164,14 +164,14 @@ class VectorClockSpec extends AkkaSpec {
val node4 = Node("4") val node4 = Node("4")
val clock1_1 = VectorClock() val clock1_1 = VectorClock()
val clock2_1 = clock1_1 + node1 val clock2_1 = clock1_1 :+ node1
val clock3_1 = clock2_1 + node2 val clock3_1 = clock2_1 :+ node2
val clock4_1 = clock3_1 + node2 val clock4_1 = clock3_1 :+ node2
val clock5_1 = clock4_1 + node3 val clock5_1 = clock4_1 :+ node3
val clock1_2 = VectorClock() val clock1_2 = VectorClock()
val clock2_2 = clock1_2 + node4 val clock2_2 = clock1_2 :+ node4
val clock3_2 = clock2_2 + node4 val clock3_2 = clock2_2 :+ node4
val merged1 = clock3_2 merge clock5_1 val merged1 = clock3_2 merge clock5_1
merged1.versions.size must be(4) merged1.versions.size must be(4)
@ -204,8 +204,8 @@ class VectorClockSpec extends AkkaSpec {
val v1 = VectorClock() val v1 = VectorClock()
val v2 = VectorClock() val v2 = VectorClock()
val vv1 = v1 + node1 val vv1 = v1 :+ node1
val vv2 = v2 + node2 val vv2 = v2 :+ node2
(vv1 > v1) must equal(true) (vv1 > v1) must equal(true)
(vv2 > v2) must equal(true) (vv2 > v2) must equal(true)
@ -225,12 +225,12 @@ class VectorClockSpec extends AkkaSpec {
val a = VectorClock() val a = VectorClock()
val b = VectorClock() val b = VectorClock()
val a1 = a + node1 val a1 = a :+ node1
val b1 = b + node2 val b1 = b :+ node2
var a2 = a1 + node1 var a2 = a1 :+ node1
var c = a2.merge(b1) var c = a2.merge(b1)
var c1 = c + node3 var c1 = c :+ node3
(c1 > a2) must equal(true) (c1 > a2) must equal(true)
(c1 > b1) must equal(true) (c1 > b1) must equal(true)
@ -239,7 +239,7 @@ class VectorClockSpec extends AkkaSpec {
"An instance of Versioned" must { "An instance of Versioned" must {
class TestVersioned(val version: VectorClock = VectorClock()) extends Versioned[TestVersioned] { class TestVersioned(val version: VectorClock = VectorClock()) extends Versioned[TestVersioned] {
def +(node: Node): TestVersioned = new TestVersioned(version + node) def :+(node: Node): TestVersioned = new TestVersioned(version :+ node)
} }
import Versioned.latestVersionOf import Versioned.latestVersionOf
@ -251,67 +251,67 @@ class VectorClockSpec extends AkkaSpec {
"happen before an identical versioned with a single additional event" in { "happen before an identical versioned with a single additional event" in {
val versioned1_1 = new TestVersioned() val versioned1_1 = new TestVersioned()
val versioned2_1 = versioned1_1 + Node("1") val versioned2_1 = versioned1_1 :+ Node("1")
val versioned3_1 = versioned2_1 + Node("2") val versioned3_1 = versioned2_1 :+ Node("2")
val versioned4_1 = versioned3_1 + Node("1") val versioned4_1 = versioned3_1 :+ Node("1")
val versioned1_2 = new TestVersioned() val versioned1_2 = new TestVersioned()
val versioned2_2 = versioned1_2 + Node("1") val versioned2_2 = versioned1_2 :+ Node("1")
val versioned3_2 = versioned2_2 + Node("2") val versioned3_2 = versioned2_2 :+ Node("2")
val versioned4_2 = versioned3_2 + Node("1") val versioned4_2 = versioned3_2 :+ Node("1")
val versioned5_2 = versioned4_2 + Node("3") val versioned5_2 = versioned4_2 :+ Node("3")
latestVersionOf[TestVersioned](versioned4_1, versioned5_2) must be(versioned5_2) latestVersionOf[TestVersioned](versioned4_1, versioned5_2) must be(versioned5_2)
} }
"pass misc comparison test 1" in { "pass misc comparison test 1" in {
var versioned1_1 = new TestVersioned() var versioned1_1 = new TestVersioned()
val versioned2_1 = versioned1_1 + Node("1") val versioned2_1 = versioned1_1 :+ Node("1")
val versioned1_2 = new TestVersioned() val versioned1_2 = new TestVersioned()
val versioned2_2 = versioned1_2 + Node("2") val versioned2_2 = versioned1_2 :+ Node("2")
latestVersionOf[TestVersioned](versioned2_1, versioned2_2) must be(versioned2_2) latestVersionOf[TestVersioned](versioned2_1, versioned2_2) must be(versioned2_2)
} }
"pass misc comparison test 2" in { "pass misc comparison test 2" in {
val versioned1_3 = new TestVersioned() val versioned1_3 = new TestVersioned()
val versioned2_3 = versioned1_3 + Node("1") val versioned2_3 = versioned1_3 :+ Node("1")
val versioned3_3 = versioned2_3 + Node("2") val versioned3_3 = versioned2_3 :+ Node("2")
val versioned4_3 = versioned3_3 + Node("1") val versioned4_3 = versioned3_3 :+ Node("1")
val versioned1_4 = new TestVersioned() val versioned1_4 = new TestVersioned()
val versioned2_4 = versioned1_4 + Node("1") val versioned2_4 = versioned1_4 :+ Node("1")
val versioned3_4 = versioned2_4 + Node("1") val versioned3_4 = versioned2_4 :+ Node("1")
val versioned4_4 = versioned3_4 + Node("3") val versioned4_4 = versioned3_4 :+ Node("3")
latestVersionOf[TestVersioned](versioned4_3, versioned4_4) must be(versioned4_4) latestVersionOf[TestVersioned](versioned4_3, versioned4_4) must be(versioned4_4)
} }
"pass misc comparison test 3" in { "pass misc comparison test 3" in {
val versioned1_1 = new TestVersioned() val versioned1_1 = new TestVersioned()
val versioned2_1 = versioned1_1 + Node("2") val versioned2_1 = versioned1_1 :+ Node("2")
val versioned3_1 = versioned2_1 + Node("2") val versioned3_1 = versioned2_1 :+ Node("2")
val versioned1_2 = new TestVersioned() val versioned1_2 = new TestVersioned()
val versioned2_2 = versioned1_2 + Node("1") val versioned2_2 = versioned1_2 :+ Node("1")
val versioned3_2 = versioned2_2 + Node("2") val versioned3_2 = versioned2_2 :+ Node("2")
val versioned4_2 = versioned3_2 + Node("2") val versioned4_2 = versioned3_2 :+ Node("2")
val versioned5_2 = versioned4_2 + Node("3") val versioned5_2 = versioned4_2 :+ Node("3")
latestVersionOf[TestVersioned](versioned3_1, versioned5_2) must be(versioned5_2) latestVersionOf[TestVersioned](versioned3_1, versioned5_2) must be(versioned5_2)
} }
"pass misc comparison test 4" in { "pass misc comparison test 4" in {
val versioned1_1 = new TestVersioned() val versioned1_1 = new TestVersioned()
val versioned2_1 = versioned1_1 + Node("1") val versioned2_1 = versioned1_1 :+ Node("1")
val versioned3_1 = versioned2_1 + Node("2") val versioned3_1 = versioned2_1 :+ Node("2")
val versioned4_1 = versioned3_1 + Node("2") val versioned4_1 = versioned3_1 :+ Node("2")
val versioned5_1 = versioned4_1 + Node("3") val versioned5_1 = versioned4_1 :+ Node("3")
val versioned1_2 = new TestVersioned() val versioned1_2 = new TestVersioned()
val versioned2_2 = versioned1_2 + Node("2") val versioned2_2 = versioned1_2 :+ Node("2")
val versioned3_2 = versioned2_2 + Node("2") val versioned3_2 = versioned2_2 :+ Node("2")
latestVersionOf[TestVersioned](versioned5_1, versioned3_2) must be(versioned3_2) latestVersionOf[TestVersioned](versioned5_1, versioned3_2) must be(versioned3_2)
} }