From 6ee4a32a87459850d56ed641c688a5fe4aa19215 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Wed, 14 Jul 2021 18:57:30 +0200 Subject: [PATCH] small fixes to coordinator - inheritIO for docker compose - wait shortly for script to check for failures - use return value of start to set status to "failedStart" if it is false --- src/main/jastadd/Coordinator.jrag | 22 +++++++------------ .../inf/st/coordinator/MainCoordinator.java | 9 +++++--- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/main/jastadd/Coordinator.jrag b/src/main/jastadd/Coordinator.jrag index c7bd041..064b2c9 100644 --- a/src/main/jastadd/Coordinator.jrag +++ b/src/main/jastadd/Coordinator.jrag @@ -68,23 +68,11 @@ aspect Manipulation { return true; } System.out.println("Starting " + Arrays.toString(args)); - ProcessBuilder builder = new ProcessBuilder(args); + ProcessBuilder builder = new ProcessBuilder(args).inheritIO(); Process process = builder.start(); process.waitFor(); - try (java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()))) { - System.out.println("Out of " + java.util.Arrays.toString(args) + ":\n" + reader.lines().collect(java.util.stream.Collectors.joining("\n"))); - } catch (IOException e) { - e.printStackTrace(); - } - - try (java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getErrorStream()))) { - System.out.println("Err of " + java.util.Arrays.toString(args) + ":\n" + reader.lines().collect(java.util.stream.Collectors.joining("\n"))); - } catch (IOException e) { - e.printStackTrace(); - } - return process.exitValue() == 0; } return false; @@ -104,7 +92,13 @@ aspect Manipulation { } Process process = builder.start(); - // Do not wait for process to be finished + + // check if process has crashed within a short time + if (process.waitFor(2, java.util.concurrent.TimeUnit.SECONDS) && process.exitValue() != 0) { + process.getErrorStream().transferTo(System.err); + process.getInputStream().transferTo(System.out); + return false; + } return true; } diff --git a/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java b/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java index c3923eb..8b277ca 100644 --- a/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java +++ b/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java @@ -101,8 +101,8 @@ public class MainCoordinator implements Callable<Integer> { commandTopic = "coordinator/" + comp.getName(); mainHandler.newConnection(commandTopic, bytes -> { try { - comp.getStartStrategy().start(); - comp.setStatus("ready"); + boolean successfullyStarted = comp.getStartStrategy().start(); + comp.setStatus(successfullyStarted ? "ready" : "failedStart"); } catch (IOException | InterruptedException e) { comp.setStatus("failedStart"); e.printStackTrace(); @@ -127,7 +127,10 @@ public class MainCoordinator implements Callable<Integer> { } } if (!alreadyRunning.contains(comp) && !comp.getStartAsUp()) { - comp.getStartStrategy().start(); + if (!comp.getStartStrategy().start()) { + // component has failed to start + comp.setStatus("failedStart"); + } if (comp.hasAutoSetStatus()) { scheduleAutoSetStatus(comp); } -- GitLab