diff options
author | Harald Musum <musum@yahooinc.com> | 2022-04-20 12:15:31 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2022-04-20 12:15:31 +0200 |
commit | 586ce79e76d0e5a030c09bbe778d4495269e217d (patch) | |
tree | f455befc6cb5de6244351d6356951b2a21390e95 /config-model/src/main/java | |
parent | 0efad778adfadecec361c69fd86fa53157e52f11 (diff) |
Output exit code if no output when command fails
Also give some hint about what lead to command failing
Diffstat (limited to 'config-model/src/main/java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java index 1dfa6223f34..ed943317a1f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java @@ -170,12 +170,13 @@ public class RankSetupValidator extends Validator { } private boolean execValidate(String configId, SearchCluster sc, String sdName, DeployLogger deployLogger) { - String job = String.format("%s %s", binaryName, configId); - ProcessExecuter executer = new ProcessExecuter(true); + String command = String.format("%s %s", binaryName, configId); try { - Pair<Integer, String> ret = executer.exec(job); - if (ret.getFirst() != 0) { - validateFail(ret.getSecond(), sc, sdName, deployLogger); + Pair<Integer, String> ret = new ProcessExecuter(true).exec(command); + Integer exitCode = ret.getFirst(); + String output = ret.getSecond(); + if (exitCode != 0) { + validateFail(output, exitCode, sc, sdName, deployLogger); } } catch (IOException e) { validateWarn(e, deployLogger); @@ -191,23 +192,32 @@ public class RankSetupValidator extends Validator { deployLogger.logApplicationPackage(Level.WARNING, msg); } - private void validateFail(String output, SearchCluster sc, String sdName, DeployLogger deployLogger) { - StringBuilder errMsg = new StringBuilder("Error in rank setup in schema '").append(sdName) + private void validateFail(String output, int exitCode, SearchCluster sc, String sdName, DeployLogger deployLogger) { + StringBuilder message = new StringBuilder("Error in rank setup in schema '").append(sdName) .append("' for content cluster '").append(sc.getClusterName()).append("'.").append(" Details:\n"); - for (String line : output.split("\n")) { - // Remove debug lines from start script - if (line.startsWith("debug\t")) continue; - try { - LogMessage logMessage = LogMessage.parseNativeFormat(line); - errMsg.append(logMessage.getLevel()).append(": ").append(logMessage.getPayload()).append("\n"); - } catch (InvalidLogFormatException e) { - errMsg.append(line).append("\n"); + if (output.isEmpty()) { + message.append("Verifying rank setup failed and got no output from stderr and stdout from '") + .append(binaryName) + .append("' (exit code: ") + .append(exitCode) + .append("). This could be due to full disk, out of memory etc."); + } else { + for (String line : output.split("\n")) { + // Remove debug lines from start script + if (line.startsWith("debug\t")) continue; + try { + LogMessage logMessage = LogMessage.parseNativeFormat(line); + message.append(logMessage.getLevel()).append(": ").append(logMessage.getPayload()).append("\n"); + } catch (InvalidLogFormatException e) { + message.append(line).append("\n"); + } } } + if (ignoreValidationErrors) { - deployLogger.log(Level.WARNING, errMsg.append("(Continuing since ignoreValidationErrors flag is set.)").toString()); + deployLogger.log(Level.WARNING, message.append("(Continuing since ignoreValidationErrors flag is set.)").toString()); } else { - throw new IllegalArgumentException(errMsg.toString()); + throw new IllegalArgumentException(message.toString()); } } |