Removing the String-only lookup method and replaced it with Iterable, Iterator and ActorPath

This commit is contained in:
Viktor Klang 2012-04-26 23:59:18 +02:00
parent 4d0c6e17d9
commit 97e8e4880f
5 changed files with 10 additions and 8 deletions

View file

@ -55,7 +55,7 @@ class DeployerSpec extends AkkaSpec(DeployerSpec.deployerConf) {
"be able to parse 'akka.actor.deployment._' with all default values" in {
val service = "/service1"
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service)
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/"))
deployment must be('defined)
deployment must be(Some(
@ -68,7 +68,7 @@ class DeployerSpec extends AkkaSpec(DeployerSpec.deployerConf) {
"use None deployment for undefined service" in {
val service = "/undefined"
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service)
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/"))
deployment must be(None)
}
@ -113,7 +113,7 @@ class DeployerSpec extends AkkaSpec(DeployerSpec.deployerConf) {
}
def assertRouting(expected: RouterConfig, service: String) {
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service)
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/"))
deployment must be('defined)
deployment.get.path must be(service)
deployment.get.routerConfig.getClass must be(expected.getClass)

View file

@ -542,7 +542,7 @@ class LocalActorRefProvider(
props.routerConfig match {
case NoRouter new LocalActorRef(system, props, supervisor, path, systemService) // create a local actor
case router
val lookup = if (lookupDeploy) deployer.lookup(path.elements.drop(1).mkString("/", "/", "")) else None
val lookup = if (lookupDeploy) deployer.lookup(path) else None
val fromProps = Iterator(props.deploy.copy(routerConfig = props.deploy.routerConfig withFallback router))
val d = fromProps ++ deploy.iterator ++ lookup.iterator reduce ((a, b) b withFallback a)
new RoutedActorRef(system, props.withRouter(d.routerConfig), supervisor, path)

View file

@ -141,10 +141,12 @@ private[akka] class Deployer(val settings: ActorSystem.Settings, val dynamicAcce
case _ None
} foreach deploy
def lookup(path: String): Option[Deploy] = lookup(path.split("/").iterator)
def lookup(path: Iterable[String]): Option[Deploy] = deployments.get().find(path.iterator).deploy
def lookup(path: Iterator[String]): Option[Deploy] = deployments.get().find(path).deploy
def lookup(path: ActorPath): Option[Deploy] = deployments.get().find(Iterator.single("") ++ path.elements.drop(1).iterator).deploy
def deploy(d: Deploy): Unit = {
@tailrec def add(path: Array[String], d: Deploy, w: WildcardTree = deployments.get): Unit =
if (!deployments.compareAndSet(w, w.insert(path.iterator, d))) add(path, d)

View file

@ -140,7 +140,7 @@ class RemoteActorRefProvider(
p.headOption match {
case None None
case Some("remote") lookupRemotes(p.drop(2))
case Some("user") deployer.lookup(p.drop(1).mkString("/", "/", ""))
case Some("user") deployer.lookup(Iterator.single("") ++ p.drop(1).iterator)
case Some(_) None
}
}
@ -149,7 +149,7 @@ class RemoteActorRefProvider(
val lookup =
if (lookupDeploy)
elems.head match {
case "user" deployer.lookup(elems.drop(1).mkString("/", "/", ""))
case "user" deployer.lookup(Iterator.single("") ++ elems.drop(1).iterator)
case "remote" lookupRemotes(elems)
case _ None
}

View file

@ -34,7 +34,7 @@ class RemoteDeployerSpec extends AkkaSpec(RemoteDeployerSpec.deployerConf) {
"be able to parse 'akka.actor.deployment._' with specified remote nodes" in {
val service = "/user/service2"
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service)
val deployment = system.asInstanceOf[ActorSystemImpl].provider.deployer.lookup(service.split("/"))
deployment must be('defined)
deployment must be(Some(