From a95ac9e4dc97379ebb9f6e6d03a40377506b23cd Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 2 Nov 2020 10:59:18 +0100 Subject: [PATCH] Fail fast if the daemon can not be started, fixes #162 --- .../org/jboss/fuse/mvnd/client/DaemonConnector.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/client/src/main/java/org/jboss/fuse/mvnd/client/DaemonConnector.java b/client/src/main/java/org/jboss/fuse/mvnd/client/DaemonConnector.java index 77b91e52..60978d78 100644 --- a/client/src/main/java/org/jboss/fuse/mvnd/client/DaemonConnector.java +++ b/client/src/main/java/org/jboss/fuse/mvnd/client/DaemonConnector.java @@ -222,7 +222,8 @@ public class DaemonConnector { } public DaemonClientConnection startDaemon(DaemonCompatibilitySpec constraint) { - final String daemon = startDaemon(); + final String daemon = UUID.randomUUID().toString(); + final Process process = startDaemon(daemon); LOGGER.debug("Started Maven daemon {}", daemon); long start = System.currentTimeMillis(); do { @@ -235,14 +236,12 @@ public class DaemonConnector { } catch (InterruptedException e) { throw new DaemonException.InterruptedException(e); } - } while (System.currentTimeMillis() - start < DEFAULT_CONNECT_TIMEOUT); + } while (process.isAlive() && System.currentTimeMillis() - start < DEFAULT_CONNECT_TIMEOUT); DaemonDiagnostics diag = new DaemonDiagnostics(daemon, layout); throw new DaemonException.ConnectException("Timeout waiting to connect to the Maven daemon.\n" + diag.describe()); } - private String startDaemon() { - - final String uid = UUID.randomUUID().toString(); + private Process startDaemon(String uid) { final Path mavenHome = layout.mavenHome(); final Path workingDir = layout.userDir(); String command = ""; @@ -272,13 +271,13 @@ public class DaemonConnector { LOGGER.debug("Starting daemon process: uid = {}, workingDir = {}, daemonArgs: {}", uid, workingDir, command); ProcessBuilder.Redirect redirect = ProcessBuilder.Redirect.appendTo(layout.daemonOutLog(uid).toFile()); - new ProcessBuilder() + Process process = new ProcessBuilder() .directory(workingDir.toFile()) .command(args) .redirectOutput(redirect) .redirectError(redirect) .start(); - return uid; + return process; } catch (Exception e) { throw new DaemonException.StartException( String.format("Error starting daemon: uid = %s, workingDir = %s, daemonArgs: %s",