in manager/dm-server/src/main/java/org/apache/doris/stack/shell/BaseCommand.java [58:109]
public boolean run(long timeoutMs) {
buildCommand();
log.info("run command: {} ,timeout time: {}ms", StringUtils.join(resultCommand, " "), timeoutMs);
ProcessBuilder pb = new ProcessBuilder(resultCommand);
Process process = null;
BufferedReader stdoutBufferedReader = null;
BufferedReader errorBufferedReader = null;
try {
process = pb.start();
stdoutBufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
errorBufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
stdoutResponse = stdoutBufferedReader.lines().parallel().collect(Collectors.joining(System.lineSeparator()));
errorResponse = errorBufferedReader.lines().parallel().collect(Collectors.joining(System.lineSeparator()));
if (timeoutMs <= 0) {
exitCode = process.waitFor();
} else {
boolean isExit = process.waitFor(timeoutMs, TimeUnit.MICROSECONDS);
if (!isExit) {
exitCode = 124; // the same as timeout command
log.error("command run timeout in {}ms", timeoutMs);
return false;
}
exitCode = process.exitValue();
}
if (exitCode == 0) {
return true;
} else {
log.error("shell command error, exit with {}, response:{}", exitCode, errorResponse);
return false;
}
} catch (IOException | InterruptedException e) {
log.error("command execute fail", e);
return false;
} finally {
if (process != null) {
process.destroy();
}
try {
if (stdoutBufferedReader != null) {
stdoutBufferedReader.close();
}
if (errorBufferedReader != null) {
errorBufferedReader.close();
}
} catch (IOException e) {
log.error("close buffered reader fail");
}
}
}