From 0464c524befd63d15a4f2b9fa2184d2c2fffe842 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Wed, 22 May 2013 15:39:45 +0200 Subject: [PATCH] Error reporting when starting remoting with wrong configuration, see #3373 * Handle failure from listens * This also solves the missing error reporting when binding to occupied port, see #3319 --- akka-remote/src/main/scala/akka/remote/Remoting.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/akka-remote/src/main/scala/akka/remote/Remoting.scala b/akka-remote/src/main/scala/akka/remote/Remoting.scala index 468232181d..009d2abd2e 100644 --- a/akka-remote/src/main/scala/akka/remote/Remoting.scala +++ b/akka-remote/src/main/scala/akka/remote/Remoting.scala @@ -248,6 +248,7 @@ private[remote] object EndpointManager { case object Prune case class ListensResult(addressesPromise: Promise[Seq[(Transport, Address)]], results: Seq[(Transport, Address, Promise[AssociationEventListener])]) + case class ListensFailure(addressesPromise: Promise[Seq[(Transport, Address)]], cause: Throwable) // Helper class to store address pairs case class Link(localAddress: Address, remoteAddress: Address) @@ -422,7 +423,9 @@ private[remote] class EndpointManager(conf: Config, log: LoggingAdapter) extends def receive = { case Listen(addressesPromise) ⇒ - listens map { ListensResult(addressesPromise, _) } pipeTo self + listens map { ListensResult(addressesPromise, _) } recover { + case NonFatal(e) ⇒ ListensFailure(addressesPromise, e) + } pipeTo self case ListensResult(addressesPromise, results) ⇒ transportMapping = results.groupBy { case (_, transportAddress, _) ⇒ transportAddress @@ -438,6 +441,9 @@ private[remote] class EndpointManager(conf: Config, log: LoggingAdapter) extends transport -> address } addressesPromise.success(transportsAndAddresses) + case ListensFailure(addressesPromise, cause) ⇒ + addressesPromise.failure(cause) + case ManagementCommand(_) ⇒ sender ! ManagementCommandAck(false) case StartupFinished ⇒