Fixed typos in Cluster API.

Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
This commit is contained in:
Jonas Bonér 2011-08-31 11:59:30 +02:00
parent c8d738f534
commit 8a55fc93d4
3 changed files with 238 additions and 235 deletions

View file

@ -83,7 +83,7 @@ trait ClusterNodeMBean {
def getMemberNodes: Array[String]
def getNodeAddres(): NodeAddress
def getNodeAddress(): NodeAddress
def getLeaderLockName: String
@ -111,7 +111,7 @@ trait ClusterNodeMBean {
def getConfigElementKeys: Array[String]
def getMemberShipPathFor(node: String): String
def getMembershipPathFor(node: String): String
def getConfigurationPathFor(key: String): String
@ -121,6 +121,7 @@ trait ClusterNodeMBean {
def getNodeToUuidsPathFor(node: String): String
// FIXME All MBean methods that take a UUID are useless, change to String
def getNodeToUuidsPathFor(node: String, uuid: UUID): String
def getActorAddressRegistryPathFor(actorAddress: String): String
@ -1280,6 +1281,7 @@ class DefaultClusterNode private[akka] (
/**
* Update the list of connections to other nodes in the cluster.
* Tail recursive, using lockless optimimistic concurrency.
*
* @returns a Map with the remote socket addresses to of disconnected node connections
*/
@ -1348,8 +1350,9 @@ class DefaultClusterNode private[akka] (
zkClient.createEphemeral(membershipNodePath, remoteServerAddress)
} catch {
case e: ZkNodeExistsException
e.printStackTrace
val error = new ClusterException(
"Can't join the cluster. The node name [" + nodeAddress.nodeName + "] is already in by another node")
"Can't join the cluster. The node name [" + nodeAddress.nodeName + "] is already in use by another node.")
EventHandler.error(error, this, error.toString)
throw error
}
@ -1532,7 +1535,7 @@ class DefaultClusterNode private[akka] (
override def resign() = self.resign()
override def getNodeAddres = self.nodeAddress
override def getNodeAddress = self.nodeAddress
override def getRemoteServerHostname = self.hostname
@ -1572,7 +1575,7 @@ class DefaultClusterNode private[akka] (
override def getConfigElementKeys = self.getConfigElementKeys.toArray
override def getMemberShipPathFor(node: String) = self.membershipPathFor(node)
override def getMembershipPathFor(node: String) = self.membershipPathFor(node)
override def getConfigurationPathFor(key: String) = self.configurationPathFor(key)

View file

@ -1,158 +1,158 @@
/**
* Copyright (C) 2009-2011 Typesafe Inc. <http://www.typesafe.com>
*/
// /**
// * Copyright (C) 2009-2011 Typesafe Inc. <http://www.typesafe.com>
// */
package akka.cluster.routing.roundrobin.replicationfactor_3
// package akka.cluster.routing.roundrobin.replicationfactor_3
import org.scalatest.WordSpec
import org.scalatest.matchers.MustMatchers
import org.scalatest.BeforeAndAfterAll
// import org.scalatest.WordSpec
// import org.scalatest.matchers.MustMatchers
// import org.scalatest.BeforeAndAfterAll
import akka.cluster._
import akka.actor._
import akka.actor.Actor._
import akka.util.duration._
import akka.util.{ Duration, Timer }
import akka.config.Config
import akka.cluster.LocalCluster._
import Cluster._
// import akka.cluster._
// import akka.actor._
// import akka.actor.Actor._
// import akka.util.duration._
// import akka.util.{ Duration, Timer }
// import akka.config.Config
// import akka.cluster.LocalCluster._
// import Cluster._
/**
* When a MultiJvmNode is started, will it automatically be part of the cluster (so will it automatically be eligible
* for running actors, or will it be just a 'client' talking to the cluster.
*/
object RoundRobin3ReplicasMultiJvmSpec {
val NrOfNodes = 3
// /**
// * When a MultiJvmNode is started, will it automatically be part of the cluster (so will it automatically be eligible
// * for running actors, or will it be just a 'client' talking to the cluster.
// */
// object RoundRobin3ReplicasMultiJvmSpec {
// val NrOfNodes = 3
class HelloWorld extends Actor with Serializable {
def receive = {
case "Hello"
self.reply("World from node [" + Config.nodename + "]")
}
}
}
// class HelloWorld extends Actor with Serializable {
// def receive = {
// case "Hello"
// self.reply("World from node [" + Config.nodename + "]")
// }
// }
// }
/**
* What is the purpose of this node? Is this just a node for the cluster to make use of?
*/
class RoundRobin3ReplicasMultiJvmNode1 extends MasterClusterTestNode {
import RoundRobin3ReplicasMultiJvmSpec._
// /**
// * What is the purpose of this node? Is this just a node for the cluster to make use of?
// */
// class RoundRobin3ReplicasMultiJvmNode1 extends MasterClusterTestNode {
// import RoundRobin3ReplicasMultiJvmSpec._
val testNodes = NrOfNodes
// val testNodes = NrOfNodes
"Round Robin: A cluster" must {
// "Round Robin: A cluster" must {
"create clustered actor, get a 'local' actor on 'home' node and a 'ref' to actor on remote node" in {
// "create clustered actor, get a 'local' actor on 'home' node and a 'ref' to actor on remote node" in {
//wait till node 1 has started.
barrier("start-node1", NrOfNodes) {
Cluster.node.boot()
}
// //wait till node 1 has started.
// barrier("start-node1", NrOfNodes) {
// Cluster.node.boot()
// }
//wait till ndoe 2 has started.
barrier("start-node2", NrOfNodes).await()
// //wait till ndoe 2 has started.
// barrier("start-node2", NrOfNodes).await()
//wait till node 3 has started.
barrier("start-node3", NrOfNodes).await()
// //wait till node 3 has started.
// barrier("start-node3", NrOfNodes).await()
//wait till an actor reference on node 2 has become available.
barrier("get-ref-to-actor-on-node2", NrOfNodes) {
val timer = Timer(30.seconds, true)
while (timer.isTicking && !node.isInUseOnNode("service-hello")) {}
}
// //wait till an actor reference on node 2 has become available.
// barrier("get-ref-to-actor-on-node2", NrOfNodes) {
// val timer = Timer(30.seconds, true)
// while (timer.isTicking && !node.isInUseOnNode("service-hello")) {}
// }
//wait till the node 2 has send a message to the replica's.
barrier("send-message-from-node2-to-replicas", NrOfNodes).await()
// //wait till the node 2 has send a message to the replica's.
// barrier("send-message-from-node2-to-replicas", NrOfNodes).await()
node.shutdown()
}
}
}
// node.shutdown()
// }
// }
// }
class RoundRobin3ReplicasMultiJvmNode2 extends ClusterTestNode {
import RoundRobin3ReplicasMultiJvmSpec._
import Cluster._
// class RoundRobin3ReplicasMultiJvmNode2 extends ClusterTestNode {
// import RoundRobin3ReplicasMultiJvmSpec._
// import Cluster._
"Round Robin: A cluster" must {
// "Round Robin: A cluster" must {
"create clustered actor, get a 'local' actor on 'home' node and a 'ref' to actor on remote node" in {
// "create clustered actor, get a 'local' actor on 'home' node and a 'ref' to actor on remote node" in {
//wait till node 1 has started.
barrier("start-node1", NrOfNodes).await()
// //wait till node 1 has started.
// barrier("start-node1", NrOfNodes).await()
//wait till node 2 has started.
barrier("start-node2", NrOfNodes) {
Cluster.node.start()
}
// //wait till node 2 has started.
// barrier("start-node2", NrOfNodes) {
// Cluster.node.start()
// }
//wait till node 3 has started.
barrier("start-node3", NrOfNodes).await()
// //wait till node 3 has started.
// barrier("start-node3", NrOfNodes).await()
//check if the actorRef is the expected remoteActorRef.
var hello: ActorRef = null
barrier("get-ref-to-actor-on-node2", NrOfNodes) {
hello = Actor.actorOf[HelloWorld]("service-hello")
hello must not equal (null)
hello.address must equal("service-hello")
hello.isInstanceOf[ClusterActorRef] must be(true)
}
// //check if the actorRef is the expected remoteActorRef.
// var hello: ActorRef = null
// barrier("get-ref-to-actor-on-node2", NrOfNodes) {
// hello = Actor.actorOf[HelloWorld]("service-hello")
// hello must not equal (null)
// hello.address must equal("service-hello")
// hello.isInstanceOf[ClusterActorRef] must be(true)
// }
barrier("send-message-from-node2-to-replicas", NrOfNodes) {
//todo: is there a reason to check for null again since it already has been done in the previous block.
hello must not equal (null)
// barrier("send-message-from-node2-to-replicas", NrOfNodes) {
// //todo: is there a reason to check for null again since it already has been done in the previous block.
// hello must not equal (null)
val replies = collection.mutable.Map.empty[String, Int]
def count(reply: String) = {
if (replies.get(reply).isEmpty) replies.put(reply, 1)
else replies.put(reply, replies(reply) + 1)
}
// val replies = collection.mutable.Map.empty[String, Int]
// def count(reply: String) = {
// if (replies.get(reply).isEmpty) replies.put(reply, 1)
// else replies.put(reply, replies(reply) + 1)
// }
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node1")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node2")))
// count((hello ? "Hello").as[String].getOrElse(fail("Should have recieved reply from node3")))
replies("World from node [node1]") must equal(4)
replies("World from node [node2]") must equal(4)
replies("World from node [node3]") must equal(4)
}
// replies("World from node [node1]") must equal(4)
// replies("World from node [node2]") must equal(4)
// replies("World from node [node3]") must equal(4)
// }
node.shutdown()
}
}
}
// node.shutdown()
// }
// }
// }
class RoundRobin3ReplicasMultiJvmNode3 extends ClusterTestNode {
import RoundRobin3ReplicasMultiJvmSpec._
import Cluster._
// class RoundRobin3ReplicasMultiJvmNode3 extends ClusterTestNode {
// import RoundRobin3ReplicasMultiJvmSpec._
// import Cluster._
"Round Robin: A cluster" must {
// "Round Robin: A cluster" must {
"create clustered actor, get a 'local' actor on 'home' node and a 'ref' to actor on remote node" in {
barrier("start-node1", NrOfNodes).await()
// "create clustered actor, get a 'local' actor on 'home' node and a 'ref' to actor on remote node" in {
// barrier("start-node1", NrOfNodes).await()
barrier("start-node2", NrOfNodes).await()
// barrier("start-node2", NrOfNodes).await()
barrier("start-node3", NrOfNodes) {
Cluster.node.start()
}
// barrier("start-node3", NrOfNodes) {
// Cluster.node.start()
// }
barrier("get-ref-to-actor-on-node2", NrOfNodes) {
val timer = Timer(30.seconds, true)
while (timer.isTicking && !node.isInUseOnNode("service-hello")) {}
}
// barrier("get-ref-to-actor-on-node2", NrOfNodes) {
// val timer = Timer(30.seconds, true)
// while (timer.isTicking && !node.isInUseOnNode("service-hello")) {}
// }
barrier("send-message-from-node2-to-replicas", NrOfNodes).await()
// barrier("send-message-from-node2-to-replicas", NrOfNodes).await()
node.shutdown()
}
}
}
// node.shutdown()
// }
// }
// }

View file

@ -1,132 +1,132 @@
package akka.cluster.storage
// package akka.cluster.storage
import org.scalatest.matchers.MustMatchers
import akka.actor.Actor
import org.scalatest.{ BeforeAndAfterEach, BeforeAndAfterAll, WordSpec }
import org.I0Itec.zkclient.ZkServer
//import zookeeper.AkkaZkClient
import akka.cluster.storage.StorageTestUtils._
import java.io.File
import java.util.concurrent.atomic.AtomicLong
// import org.scalatest.matchers.MustMatchers
// import akka.actor.Actor
// import org.scalatest.{ BeforeAndAfterEach, BeforeAndAfterAll, WordSpec }
// import org.I0Itec.zkclient.ZkServer
// //import zookeeper.AkkaZkClient
// import akka.cluster.storage.StorageTestUtils._
// import java.io.File
// import java.util.concurrent.atomic.AtomicLong
class ZooKeeperStorageSpec extends WordSpec with MustMatchers with BeforeAndAfterAll with BeforeAndAfterEach {
val dataPath = "_akka_cluster/data"
val logPath = "_akka_cluster/log"
var zkServer: ZkServer = _
//var zkClient: AkkaZkClient = _
val idGenerator = new AtomicLong
// class ZooKeeperStorageSpec extends WordSpec with MustMatchers with BeforeAndAfterAll with BeforeAndAfterEach {
// val dataPath = "_akka_cluster/data"
// val logPath = "_akka_cluster/log"
// var zkServer: ZkServer = _
// //var zkClient: AkkaZkClient = _
// val idGenerator = new AtomicLong
def generateKey: String = {
"foo" + idGenerator.incrementAndGet()
}
// def generateKey: String = {
// "foo" + idGenerator.incrementAndGet()
// }
override def beforeAll() {
/*new File(dataPath).delete()
new File(logPath).delete()
// override def beforeAll() {
// /*new File(dataPath).delete()
// new File(logPath).delete()
try {
zkServer = Cluster.startLocalCluster(dataPath, logPath)
Thread.sleep(5000)
Actor.cluster.start()
zkClient = Cluster.newZkClient()
} catch {
case e e.printStackTrace()
}*/
}
// try {
// zkServer = Cluster.startLocalCluster(dataPath, logPath)
// Thread.sleep(5000)
// Actor.cluster.start()
// zkClient = Cluster.newZkClient()
// } catch {
// case e e.printStackTrace()
// }*/
// }
override def afterAll() {
/*zkClient.close()
Actor.cluster.shutdown()
ClusterDeployer.shutdown()
Cluster.shutdownLocalCluster()
Actor.registry.local.shutdownAll() */
}
// override def afterAll() {
// /*zkClient.close()
// Actor.cluster.shutdown()
// ClusterDeployer.shutdown()
// Cluster.shutdownLocalCluster()
// Actor.registry.local.shutdownAll() */
// }
/*
"unversioned load" must {
"throw MissingDataException if non existing key" in {
val storage = new ZooKeeperStorage(zkClient)
// /*
// "unversioned load" must {
// "throw MissingDataException if non existing key" in {
// val storage = new ZooKeeperStorage(zkClient)
try {
storage.load(generateKey)
fail()
} catch {
case e: MissingDataException
}
}
// try {
// storage.load(generateKey)
// fail()
// } catch {
// case e: MissingDataException
// }
// }
"return VersionedData if key existing" in {
val storage = new ZooKeeperStorage(zkClient)
val key = generateKey
val value = "somevalue".getBytes
storage.insert(key, value)
// "return VersionedData if key existing" in {
// val storage = new ZooKeeperStorage(zkClient)
// val key = generateKey
// val value = "somevalue".getBytes
// storage.insert(key, value)
val result = storage.load(key)
//todo: strange that the implicit store is not found
assertContent(key, value, result.version)(storage)
}
} */
// val result = storage.load(key)
// //todo: strange that the implicit store is not found
// assertContent(key, value, result.version)(storage)
// }
// } */
/*"overwrite" must {
// /*"overwrite" must {
"throw MissingDataException when there doesn't exist an entry to overwrite" in {
val storage = new ZooKeeperStorage(zkClient)
val key = generateKey
val value = "value".getBytes
// "throw MissingDataException when there doesn't exist an entry to overwrite" in {
// val storage = new ZooKeeperStorage(zkClient)
// val key = generateKey
// val value = "value".getBytes
try {
storage.overwrite(key, value)
fail()
} catch {
case e: MissingDataException
}
// try {
// storage.overwrite(key, value)
// fail()
// } catch {
// case e: MissingDataException
// }
assert(!storage.exists(key))
}
// assert(!storage.exists(key))
// }
"overwrite if there is an existing value" in {
val storage = new ZooKeeperStorage(zkClient)
val key = generateKey
val oldValue = "oldvalue".getBytes
// "overwrite if there is an existing value" in {
// val storage = new ZooKeeperStorage(zkClient)
// val key = generateKey
// val oldValue = "oldvalue".getBytes
storage.insert(key, oldValue)
val newValue = "newValue".getBytes
// storage.insert(key, oldValue)
// val newValue = "newValue".getBytes
val result = storage.overwrite(key, newValue)
//assertContent(key, newValue, result.version)(storage)
}
}
// val result = storage.overwrite(key, newValue)
// //assertContent(key, newValue, result.version)(storage)
// }
// }
"insert" must {
// "insert" must {
"place a new value when non previously existed" in {
val storage = new ZooKeeperStorage(zkClient)
val key = generateKey
val oldValue = "oldvalue".getBytes
storage.insert(key, oldValue)
// "place a new value when non previously existed" in {
// val storage = new ZooKeeperStorage(zkClient)
// val key = generateKey
// val oldValue = "oldvalue".getBytes
// storage.insert(key, oldValue)
val result = storage.load(key)
assertContent(key, oldValue)(storage)
assert(InMemoryStorage.InitialVersion == result.version)
}
// val result = storage.load(key)
// assertContent(key, oldValue)(storage)
// assert(InMemoryStorage.InitialVersion == result.version)
// }
"throw DataExistsException when there already exists an entry with the same key" in {
val storage = new ZooKeeperStorage(zkClient)
val key = generateKey
val oldValue = "oldvalue".getBytes
// "throw DataExistsException when there already exists an entry with the same key" in {
// val storage = new ZooKeeperStorage(zkClient)
// val key = generateKey
// val oldValue = "oldvalue".getBytes
val initialVersion = storage.insert(key, oldValue)
val newValue = "newValue".getBytes
// val initialVersion = storage.insert(key, oldValue)
// val newValue = "newValue".getBytes
try {
storage.insert(key, newValue)
fail()
} catch {
case e: DataExistsException
}
// try {
// storage.insert(key, newValue)
// fail()
// } catch {
// case e: DataExistsException
// }
assertContent(key, oldValue, initialVersion)(storage)
}
} */
// assertContent(key, oldValue, initialVersion)(storage)
// }
// } */
}
// }