diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index 78693f72140c..5f829498bff7 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -145,8 +145,8 @@ public void with(ModuleDefinition def, Stack parents) { logger.debug("Failed to obtain module context: ", e); } } catch (BeansException e) { - logger.error("Failed to load module [{}] due to: {}", def.getName(), e); - throw new RuntimeException(String.format("Failed to load module [%s]", def.getName())); + logger.error("Failed to load module [{}]", def.getName(), e); + throw new RuntimeException(String.format("Failed to load module [%s]", def.getName()), e); } } }); diff --git a/utils/src/main/java/com/cloud/utils/script/Script.java b/utils/src/main/java/com/cloud/utils/script/Script.java index 5a92d12eeda9..01699269becc 100644 --- a/utils/src/main/java/com/cloud/utils/script/Script.java +++ b/utils/src/main/java/com/cloud/utils/script/Script.java @@ -244,6 +244,20 @@ static String stackTraceAsString(Throwable throwable) { } } + /** + * Builds the error result of a failed process whose output was drained by the interpreter task. + * Draining interpreters (e.g. {@link OutputInterpreter.AllLinesParser}) return null from interpret(), + * and callers treat a null result as success, so a non-null value must always be returned here: + * the task result, otherwise the output captured by the parser, otherwise the process exit value. + */ + private String getDrainedErrorResult(Task task, OutputInterpreter interpreter) throws InterruptedException { + String result = task.getResult(); + if (StringUtils.isBlank(result) && interpreter instanceof OutputInterpreter.AllLinesParser) { + result = ((OutputInterpreter.AllLinesParser) interpreter).getLines(); + } + return StringUtils.isNotBlank(result) ? result.trim() : String.valueOf(_process.exitValue()); + } + public String execute(OutputInterpreter interpreter) { return executeInternal(interpreter, null); } @@ -371,7 +385,7 @@ private String executeInternal(OutputInterpreter interpreter, Map