From 50620c7cb1b2473be3e61f3ef273f245f1e0fe34 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 9 Feb 2023 14:12:37 +0100 Subject: [PATCH] blooprifle: report exit code in exception To help debugging, the failure code is now part of the exception in case the bloop server failed to start. --- .../blooprifle/FailedToStartServerException.scala | 10 ++++++++-- .../scala/build/blooprifle/internal/Operations.scala | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/FailedToStartServerException.scala b/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/FailedToStartServerException.scala index 7ce95a062b..bb73599e05 100644 --- a/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/FailedToStartServerException.scala +++ b/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/FailedToStartServerException.scala @@ -2,5 +2,11 @@ package scala.build.blooprifle import scala.concurrent.duration.Duration -final class FailedToStartServerException(timeoutOpt: Option[Duration] = None) - extends Exception("Server didn't start" + timeoutOpt.fold("")(t => s" after $t")) +abstract class FailedToStartServerException(message: String) + extends Exception(message) + +final class FailedToStartServerExitCodeException(exitCode: Int) + extends FailedToStartServerException(f"Server failed with code $exitCode") + +final class FailedToStartServerTimeoutException(timeout: Duration) + extends FailedToStartServerException(f"Server didn't start after $timeout") diff --git a/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/internal/Operations.scala b/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/internal/Operations.scala index de08c3278d..494089dbdb 100644 --- a/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/internal/Operations.scala +++ b/modules/bloop-rifle/src/main/scala/scala/build/blooprifle/internal/Operations.scala @@ -13,7 +13,7 @@ import java.nio.file.{Files, Path, Paths} import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.{ExecutorService, ScheduledExecutorService, ScheduledFuture} -import scala.build.blooprifle.{BloopRifleConfig, BloopRifleLogger, BspConnection, BspConnectionAddress, FailedToStartServerException} +import scala.build.blooprifle.{BloopRifleConfig, BloopRifleLogger, BspConnection, BspConnectionAddress, FailedToStartServerExitCodeException, FailedToStartServerTimeoutException} import scala.concurrent.duration._ import scala.concurrent.{Await, Future, Promise} import scala.util.control.NonFatal @@ -247,11 +247,11 @@ object Operations { } val completionOpt = if (!p.isAlive() && exitCode != serverAlreadyRunningExitCode) - Some(Failure(new FailedToStartServerException)) + Some(Failure(new FailedToStartServerExitCodeException(exitCode))) else if (check(address, logger)) Some(Success(())) else if (timeout.isFinite && System.currentTimeMillis() - start > timeout.toMillis) - Some(Failure(new FailedToStartServerException(Some(timeout)))) + Some(Failure(new FailedToStartServerTimeoutException(timeout))) else None