1. Makes sure to check if 'akka.enabled-modules=["cluster"]' is set before checking if the akka-cluster.jar is on the classpath, allowing non-cluster deployment even with the JAR on the classpath
2. Fixed bug with duplicate entries in replica set for an actor address 3. Turned on clustering for all Multi JVM tests Signed-off-by: Jonas Bonér <jonas@jonasboner.com>
This commit is contained in:
parent
f2dd6bddb3
commit
4a179d14bb
37 changed files with 52 additions and 30 deletions
|
|
@ -150,7 +150,7 @@ object DeploymentConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def isHomeNode(home: Home): Boolean = nodeNameFor(home) == Config.nodeName
|
def isHomeNode(home: Home): Boolean = nodeNameFor(home) == Config.nodename
|
||||||
|
|
||||||
def replicaValueFor(replicas: Replicas): Int = replicas match {
|
def replicaValueFor(replicas: Replicas): Int = replicas match {
|
||||||
case Replicate(replicas) ⇒ replicas
|
case Replicate(replicas) ⇒ replicas
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ class SupervisorException private[akka] (message: String, cause: Throwable = nul
|
||||||
* ..
|
* ..
|
||||||
* ))
|
* ))
|
||||||
* </pre>
|
* </pre>
|
||||||
|
*
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
object Supervisor {
|
object Supervisor {
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,8 @@ object Config {
|
||||||
|
|
||||||
val TIME_UNIT = config.getString("akka.time-unit", "seconds")
|
val TIME_UNIT = config.getString("akka.time-unit", "seconds")
|
||||||
|
|
||||||
|
val isClusterEnabled = config.getList("akka.enabled-modules").exists(_ == "cluster")
|
||||||
|
|
||||||
lazy val nodename = System.getProperty("akka.cluster.nodename") match {
|
lazy val nodename = System.getProperty("akka.cluster.nodename") match {
|
||||||
case null | "" ⇒ new UUID().toString
|
case null | "" ⇒ new UUID().toString
|
||||||
case value ⇒ value
|
case value ⇒ value
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,12 @@ object ReflectiveAccess {
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
object ClusterModule {
|
object ClusterModule {
|
||||||
lazy val isEnabled = clusterInstance.isDefined
|
lazy val isEnabled = Config.isClusterEnabled && clusterInstance.isDefined
|
||||||
|
|
||||||
def ensureEnabled() {
|
def ensureEnabled() {
|
||||||
if (!isEnabled) {
|
if (!isEnabled) {
|
||||||
val e = new ModuleNotAvailableException(
|
val e = new ModuleNotAvailableException(
|
||||||
"Can't load the cluster module, make sure that akka-cluster.jar is on the classpath")
|
"Can't load the cluster module, make sure it is enabled in the config ('akka.enabled-modules = [\"cluster\"])' and that akka-cluster.jar is on the classpath")
|
||||||
EventHandler.debug(this, e.toString)
|
EventHandler.debug(this, e.toString)
|
||||||
throw e
|
throw e
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1273,10 +1273,10 @@ class DefaultClusterNode private[akka] (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a random set with node names of size 'replicationFactor'.
|
* Returns a random set with node names of size 'replicationFactor'.
|
||||||
* Default replicationFactor is 0, which returns the empty Vector.
|
* Default replicationFactor is 0, which returns the empty Set.
|
||||||
*/
|
*/
|
||||||
private def nodesForReplicationFactor(replicationFactor: Int = 0, actorAddress: Option[String] = None): Vector[String] = {
|
private def nodesForReplicationFactor(replicationFactor: Int = 0, actorAddress: Option[String] = None): Set[String] = {
|
||||||
var replicaNames = Vector.empty[String]
|
var replicaNames = Set.empty[String]
|
||||||
val nrOfClusterNodes = nodeConnections.size
|
val nrOfClusterNodes = nodeConnections.size
|
||||||
|
|
||||||
if (replicationFactor < 1) return replicaNames
|
if (replicationFactor < 1) return replicaNames
|
||||||
|
|
@ -1288,7 +1288,7 @@ class DefaultClusterNode private[akka] (
|
||||||
if (actorAddress.isDefined) { // use 'preferred-nodes' in deployment config for the actor
|
if (actorAddress.isDefined) { // use 'preferred-nodes' in deployment config for the actor
|
||||||
Deployer.deploymentFor(actorAddress.get) match {
|
Deployer.deploymentFor(actorAddress.get) match {
|
||||||
case Deploy(_, _, _, Clustered(nodes, _, _)) ⇒
|
case Deploy(_, _, _, Clustered(nodes, _, _)) ⇒
|
||||||
nodes map (node ⇒ Deployer.nodeNameFor(node)) take replicationFactor
|
nodes map (node ⇒ DeploymentConfig.nodeNameFor(node)) take replicationFactor
|
||||||
case _ ⇒
|
case _ ⇒
|
||||||
throw new ClusterException("Actor [" + actorAddress.get + "] is not configured as clustered")
|
throw new ClusterException("Actor [" + actorAddress.get + "] is not configured as clustered")
|
||||||
}
|
}
|
||||||
|
|
@ -1298,7 +1298,7 @@ class DefaultClusterNode private[akka] (
|
||||||
nodeName ← preferredNodes
|
nodeName ← preferredNodes
|
||||||
key ← nodeConnections.keys
|
key ← nodeConnections.keys
|
||||||
if key == nodeName
|
if key == nodeName
|
||||||
} replicaNames = replicaNames :+ nodeName
|
} replicaNames = replicaNames + nodeName
|
||||||
|
|
||||||
val nrOfCurrentReplicaNames = replicaNames.size
|
val nrOfCurrentReplicaNames = replicaNames.size
|
||||||
|
|
||||||
|
|
@ -1308,7 +1308,7 @@ class DefaultClusterNode private[akka] (
|
||||||
else {
|
else {
|
||||||
val random = new java.util.Random(System.currentTimeMillis)
|
val random = new java.util.Random(System.currentTimeMillis)
|
||||||
while (replicaNames.size < replicationFactor) {
|
while (replicaNames.size < replicationFactor) {
|
||||||
replicaNames = replicaNames :+ membershipNodes(random.nextInt(nrOfClusterNodes))
|
replicaNames = replicaNames + membershipNodes(random.nextInt(nrOfClusterNodes))
|
||||||
}
|
}
|
||||||
replicaNames
|
replicaNames
|
||||||
}
|
}
|
||||||
|
|
@ -1321,9 +1321,9 @@ class DefaultClusterNode private[akka] (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a random set with replica connections of size 'replicationFactor'.
|
* Returns a random set with replica connections of size 'replicationFactor'.
|
||||||
* Default replicationFactor is 0, which returns the empty Vector.
|
* Default replicationFactor is 0, which returns the empty Set.
|
||||||
*/
|
*/
|
||||||
private def nodeConnectionsForReplicationFactor(replicationFactor: Int = 0, actorAddress: Option[String] = None): Vector[ActorRef] = {
|
private def nodeConnectionsForReplicationFactor(replicationFactor: Int = 0, actorAddress: Option[String] = None): Set[ActorRef] = {
|
||||||
for {
|
for {
|
||||||
node ← nodesForReplicationFactor(replicationFactor, actorAddress)
|
node ← nodesForReplicationFactor(replicationFactor, actorAddress)
|
||||||
connectionOption ← nodeConnections.get(node)
|
connectionOption ← nodeConnections.get(node)
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["host:node1"]
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["host:node1"]
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1","node:node2"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 2
|
akka.actor.deployment.service-hello.clustered.replicas = 2
|
||||||
akka.actor.deployment.service-hello.clustered.stateless = on
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1","node:node2"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 2
|
akka.actor.deployment.service-hello.clustered.replicas = 2
|
||||||
akka.actor.deployment.service-hello.clustered.stateless = on
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 3
|
akka.actor.deployment.service-hello.clustered.replicas = 3
|
||||||
akka.actor.deployment.service-hello.clustered.stateless = on
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 3
|
akka.actor.deployment.service-hello.clustered.replicas = 3
|
||||||
akka.actor.deployment.service-hello.clustered.stateless = on
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 3
|
akka.actor.deployment.service-hello.clustered.replicas = 3
|
||||||
akka.actor.deployment.service-hello.clustered.stateless = on
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
|
akka.enabled-modules = ["cluster"]
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1
|
akka.actor.deployment.service-hello.clustered.replicas = 1
|
||||||
|
|
@ -4,7 +4,7 @@ object SomeNode extends ClusterNodeWithConf{
|
||||||
def config() = "
|
def config() = "
|
||||||
akka.event-handler-level = "DEBUG"
|
akka.event-handler-level = "DEBUG"
|
||||||
akka.actor.deployment.service-hello.router = "round-robin"
|
akka.actor.deployment.service-hello.router = "round-robin"
|
||||||
akka.actor.deployment.service-hello.clustered.home = "node:node1"
|
akka.actor.deployment.service-hello.clustered.preferred-nodes = ["node:node1"]
|
||||||
akka.actor.deployment.service-hello.clustered.replicas = 1"
|
akka.actor.deployment.service-hello.clustered.replicas = 1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue