diff --git a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala index 6e528715b9..5509b987b0 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala @@ -4,6 +4,7 @@ package akka.remote +import akka.Done import akka.actor._ import akka.dispatch.sysmsg._ import akka.event.{ Logging, LoggingAdapter, EventStream } @@ -59,10 +60,15 @@ private[akka] object RemoteActorRefProvider { } when(WaitTransportShutdown) { - case Event((), _) ⇒ + case Event(Done, _) ⇒ log.info("Remoting shut down.") systemGuardian ! TerminationHookDone stop() + + case Event(Status.Failure(ex), _) ⇒ + log.error(ex, "Remoting shut down with error") + systemGuardian ! TerminationHookDone + stop() } } diff --git a/akka-remote/src/main/scala/akka/remote/RemoteTransport.scala b/akka-remote/src/main/scala/akka/remote/RemoteTransport.scala index 71ae62170e..55ce049ffe 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteTransport.scala @@ -5,6 +5,7 @@ package akka.remote import akka.AkkaException +import akka.Done import akka.actor._ import akka.event.{ LoggingAdapter } import scala.collection.immutable @@ -39,7 +40,7 @@ private[akka] abstract class RemoteTransport(val system: ExtendedActorSystem, va /** * Shuts down the remoting */ - def shutdown(): Future[Unit] + def shutdown(): Future[Done] /** * Address to be used in RootActorPath of refs generated for this transport. diff --git a/akka-remote/src/main/scala/akka/remote/Remoting.scala b/akka-remote/src/main/scala/akka/remote/Remoting.scala index ad45c4a2af..8b77da60ae 100644 --- a/akka-remote/src/main/scala/akka/remote/Remoting.scala +++ b/akka-remote/src/main/scala/akka/remote/Remoting.scala @@ -3,6 +3,7 @@ */ package akka.remote +import akka.Done import akka.actor.SupervisorStrategy._ import akka.actor._ import akka.event.{ Logging, LoggingAdapter } @@ -135,7 +136,7 @@ private[remote] class Remoting(_system: ExtendedActorSystem, _provider: RemoteAc private def notifyError(msg: String, cause: Throwable): Unit = eventPublisher.notifyListeners(RemotingErrorEvent(new RemoteTransportException(msg, cause))) - override def shutdown(): Future[Unit] = { + override def shutdown(): Future[Done] = { endpointManager match { case Some(manager) ⇒ implicit val timeout = ShutdownTimeout @@ -156,10 +157,10 @@ private[remote] class Remoting(_system: ExtendedActorSystem, _provider: RemoteAc case Failure(e) ⇒ notifyError("Failure during shutdown of remoting.", e) finalize() - } map { _ ⇒ () } // RARP needs only type Unit, not a boolean + } map { _ ⇒ Done } // RARP needs only akka.Done, not a boolean case None ⇒ log.warning("Remoting is not running. Ignoring shutdown attempt.") - Future successful (()) + Future successful Done } }