diff --git a/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala index 03bff2b110..897932cad9 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/DeployerSpec.scala @@ -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) diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index b22218d6a3..285f760aaf 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -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) diff --git a/akka-actor/src/main/scala/akka/actor/Deployer.scala b/akka-actor/src/main/scala/akka/actor/Deployer.scala index 0d52e9bec6..70e0b151b9 100644 --- a/akka-actor/src/main/scala/akka/actor/Deployer.scala +++ b/akka-actor/src/main/scala/akka/actor/Deployer.scala @@ -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) diff --git a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala index a4d9a8d0c6..7f0564b4d0 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala @@ -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 } diff --git a/akka-remote/src/test/scala/akka/remote/RemoteDeployerSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteDeployerSpec.scala index 57d240e8d8..7cf1c917d5 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteDeployerSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteDeployerSpec.scala @@ -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(