diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index b0b4c3d939..fcb0a6ddc9 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -146,6 +146,11 @@ trait ActorRefProvider { * attempt is made to verify actual reachability). */ def getExternalAddressFor(addr: Address): Option[Address] + + /** + * Obtain the external address of the default transport. + */ + def getDefaultAddress: Address } /** @@ -597,4 +602,6 @@ class LocalActorRefProvider( } def getExternalAddressFor(addr: Address): Option[Address] = if (addr == rootPath.address) Some(addr) else None + + def getDefaultAddress: Address = rootPath.address } diff --git a/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala b/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala index 0214c6736e..e88195f577 100644 --- a/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala +++ b/akka-actor/src/main/scala/akka/routing/ConsistentHashingRouter.scala @@ -237,7 +237,7 @@ trait ConsistentHashingLike { this: RouterConfig ⇒ } val log = Logging(routeeProvider.context.system, routeeProvider.context.self) - val selfAddress = routeeProvider.context.system.asInstanceOf[ExtendedActorSystem].provider.rootPath.address + val selfAddress = routeeProvider.context.system.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress val vnodes = if (virtualNodesFactor == 0) routeeProvider.context.system.settings.DefaultVirtualNodesFactor else virtualNodesFactor diff --git a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala index 48fca0af08..d7800e8d96 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala @@ -32,9 +32,7 @@ class RemoteActorRefProvider( private var _log = local.log def log: LoggingAdapter = _log - @volatile - private var _rootPath = local.rootPath - override def rootPath: ActorPath = _rootPath + override def rootPath: ActorPath = local.rootPath override def deadLetters: InternalActorRef = local.deadLetters // these are only available after init() @@ -63,7 +61,7 @@ class RemoteActorRefProvider( def init(system: ActorSystemImpl): Unit = { local.init(system) - _remoteDaemon = new RemoteSystemDaemon(system, local.rootPath / "remote", rootGuardian, log, untrustedMode = remoteSettings.UntrustedMode) + _remoteDaemon = new RemoteSystemDaemon(system, rootPath / "remote", rootGuardian, log, untrustedMode = remoteSettings.UntrustedMode) local.registerExtraNames(Map(("remote", remoteDaemon))) _serialization = SerializationExtension(system) @@ -84,8 +82,6 @@ class RemoteActorRefProvider( // this enables reception of remote requests _transport.start() - _rootPath = RootActorPath(local.rootPath.address.copy(host = transport.address.host, port = transport.address.port)) - val remoteClientLifeCycleHandler = system.systemActorOf(Props(new Actor { def receive = { case RemoteClientError(cause, remote, address) ⇒ remote.shutdownClientConnection(address) @@ -201,8 +197,10 @@ class RemoteActorRefProvider( } } + def getDefaultAddress: Address = transport.address + private def isSelfAddress(address: Address): Boolean = - address == local.rootPath.address || address == rootPath.address || address == transport.address + address == rootPath.address || address == transport.address }