From 1e72fbfe8b0e12e5025ee5b5a9bcee02450d3417 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 2 Mar 2011 18:48:13 +0100 Subject: [PATCH] Potential fix for #672 --- akka-actor/src/main/scala/akka/actor/ActorRef.scala | 8 ++------ .../main/scala/akka/remoteinterface/RemoteInterface.scala | 4 ++-- akka-actor/src/main/scala/akka/util/Address.scala | 2 +- akka-actor/src/main/scala/akka/util/LockUtil.scala | 6 +++--- .../main/scala/akka/remote/netty/NettyRemoteSupport.scala | 8 ++++---- .../scala/akka/serialization/SerializationProtocol.scala | 4 ++-- .../src/main/scala/akka/actor/TypedActor.scala | 2 +- 7 files changed, 15 insertions(+), 19 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index 5f49bbdf52..e34099b96c 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -640,7 +640,7 @@ class LocalActorRef private[akka] ( initializeActorInstance if (isClientManaged_?) - Actor.remote.registerClientManagedActor(homeAddress.get.getHostName, homeAddress.get.getPort, uuid) + Actor.remote.registerClientManagedActor(homeAddress.get.getAddress.getHostAddress, homeAddress.get.getPort, uuid) checkReceiveTimeout //Schedule the initial Receive timeout } @@ -663,7 +663,7 @@ class LocalActorRef private[akka] ( Actor.registry.unregister(this) if (isRemotingEnabled) { if (isClientManaged_?) - Actor.remote.unregisterClientManagedActor(homeAddress.get.getHostName, homeAddress.get.getPort, uuid) + Actor.remote.unregisterClientManagedActor(homeAddress.get.getAddress.getHostAddress, homeAddress.get.getPort, uuid) Actor.remote.unregister(this) } setActorSelfFields(actorInstance.get,null) @@ -1133,8 +1133,6 @@ private[akka] case class RemoteActorRef private[akka] ( def start: ActorRef = synchronized { _status = ActorRefInternals.RUNNING - //if (clientManaged) - // Actor.remote.registerClientManagedActor(homeAddress.getHostName,homeAddress.getPort, uuid) this } @@ -1142,8 +1140,6 @@ private[akka] case class RemoteActorRef private[akka] ( if (_status == ActorRefInternals.RUNNING) { _status = ActorRefInternals.SHUTDOWN postMessageToMailbox(RemoteActorSystemMessage.Stop, None) - // if (clientManaged) - // Actor.remote.unregisterClientManagedActor(homeAddress.getHostName,homeAddress.getPort, uuid) } } diff --git a/akka-actor/src/main/scala/akka/remoteinterface/RemoteInterface.scala b/akka-actor/src/main/scala/akka/remoteinterface/RemoteInterface.scala index 35caeffca4..3b870731e7 100644 --- a/akka-actor/src/main/scala/akka/remoteinterface/RemoteInterface.scala +++ b/akka-actor/src/main/scala/akka/remoteinterface/RemoteInterface.scala @@ -245,7 +245,7 @@ trait RemoteServerModule extends RemoteModule { * Starts the server up */ def start(): RemoteServerModule = - start(ReflectiveAccess.Remote.configDefaultAddress.getHostName, + start(ReflectiveAccess.Remote.configDefaultAddress.getAddress.getHostAddress, ReflectiveAccess.Remote.configDefaultAddress.getPort, None) @@ -253,7 +253,7 @@ trait RemoteServerModule extends RemoteModule { * Starts the server up */ def start(loader: ClassLoader): RemoteServerModule = - start(ReflectiveAccess.Remote.configDefaultAddress.getHostName, + start(ReflectiveAccess.Remote.configDefaultAddress.getAddress.getHostAddress, ReflectiveAccess.Remote.configDefaultAddress.getPort, Option(loader)) diff --git a/akka-actor/src/main/scala/akka/util/Address.scala b/akka-actor/src/main/scala/akka/util/Address.scala index 4e1749c560..794039498c 100644 --- a/akka-actor/src/main/scala/akka/util/Address.scala +++ b/akka-actor/src/main/scala/akka/util/Address.scala @@ -9,7 +9,7 @@ object Address { def apply(hostname: String, port: Int) = new Address(hostname, port) def apply(inetAddress: InetSocketAddress): Address = inetAddress match { case null => null - case inet => new Address(inet.getHostName, inet.getPort) + case inet => new Address(inet.getAddress.getHostAddress, inet.getPort) } } diff --git a/akka-actor/src/main/scala/akka/util/LockUtil.scala b/akka-actor/src/main/scala/akka/util/LockUtil.scala index ca8c883d93..f9d594e2de 100644 --- a/akka-actor/src/main/scala/akka/util/LockUtil.scala +++ b/akka-actor/src/main/scala/akka/util/LockUtil.scala @@ -10,10 +10,10 @@ import java.util.concurrent.atomic. {AtomicBoolean} /** * @author Jonas Bonér */ -class ReentrantGuard { +final class ReentrantGuard { val lock = new ReentrantLock - def withGuard[T](body: => T): T = { + final def withGuard[T](body: => T): T = { lock.lock try { body @@ -22,7 +22,7 @@ class ReentrantGuard { } } - def tryWithGuard[T](body: => T): T = { + final def tryWithGuard[T](body: => T): T = { while(!lock.tryLock) { Thread.sleep(10) } // wait on the monitor to be unlocked try { body diff --git a/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala b/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala index 57ec178ace..b0ae2a9b38 100644 --- a/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/netty/NettyRemoteSupport.scala @@ -144,7 +144,7 @@ abstract class RemoteClient private[akka] ( val module: NettyRemoteClientModule, val remoteAddress: InetSocketAddress) extends Logging { - val name = this.getClass.getSimpleName + "@" + remoteAddress.getHostName + "::" + remoteAddress.getPort + val name = this.getClass.getSimpleName + "@" + remoteAddress.getAddress.getHostAddress + "::" + remoteAddress.getPort protected val futures = new ConcurrentHashMap[Uuid, CompletableFuture[_]] protected val supervisors = new ConcurrentHashMap[Uuid, ActorRef] @@ -525,7 +525,7 @@ class NettyRemoteSupport extends RemoteSupport with NettyRemoteServerModule with protected[akka] def actorFor(serviceId: String, className: String, timeout: Long, host: String, port: Int, loader: Option[ClassLoader]): ActorRef = { if (optimizeLocalScoped_?) { val home = this.address - if (host == home.getHostName && port == home.getPort) {//TODO: switch to InetSocketAddress.equals? + if ((host == home.getAddress.getHostAddress || host == home.getHostName) && port == home.getPort) {//TODO: switch to InetSocketAddress.equals? val localRef = findActorByIdOrUuid(serviceId,serviceId) if (localRef ne null) return localRef //Code significantly simpler with the return statement } @@ -538,7 +538,7 @@ class NettyRemoteSupport extends RemoteSupport with NettyRemoteServerModule with if (optimizeLocalScoped_?) { val home = this.address - if (host == home.getHostName && port == home.getPort)//TODO: switch to InetSocketAddress.equals? + if ((host == home.getHostName || host == home.getAddress.getHostAddress) && port == home.getPort)//TODO: switch to InetSocketAddress.equals? return new LocalActorRef(factory, None) // Code is much simpler with return } @@ -597,7 +597,7 @@ trait NettyRemoteServerModule extends RemoteServerModule { self: RemoteModule => case Some(s) => s.name case None => val a = ReflectiveAccess.Remote.configDefaultAddress - "NettyRemoteServer@" + a.getHostName + ":" + a.getPort + "NettyRemoteServer@" + a.getAddress.getHostAddress + ":" + a.getPort } private val _isRunning = new Switch(false) diff --git a/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala index e3491fc12f..99445594f2 100644 --- a/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala +++ b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala @@ -96,7 +96,7 @@ object ActorSerialization { private[akka] def toAddressProtocol(actorRef: ActorRef) = { val address = actorRef.homeAddress.getOrElse(Actor.remote.address) AddressProtocol.newBuilder - .setHostname(address.getHostName) + .setHostname(address.getAddress.getHostAddress) .setPort(address.getPort) .build } @@ -162,7 +162,7 @@ object ActorSerialization { format: Format[T]): ActorRef = { val builder = SerializedActorRefProtocol.newBuilder.mergeFrom(bytes) homeAddress.foreach { addr => - val addressProtocol = AddressProtocol.newBuilder.setHostname(addr.getHostName).setPort(addr.getPort).build + val addressProtocol = AddressProtocol.newBuilder.setHostname(addr.getAddress.getHostAddress).setPort(addr.getPort).build builder.setOriginalAddress(addressProtocol) } fromProtobufToLocalActorRef(builder.build, format, None) diff --git a/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala index 9a19dd66a3..a7f29dc731 100644 --- a/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala +++ b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala @@ -540,7 +540,7 @@ object TypedActor extends Logging { config match { case null => actorOf(typedActor) case c: TypedActorConfiguration if (c._host.isDefined) => - Actor.remote.actorOf(typedActor, c._host.get.getHostName, c._host.get.getPort) + Actor.remote.actorOf(typedActor, c._host.get.getAddress.getHostAddress, c._host.get.getPort) case _ => actorOf(typedActor) } }