diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperation.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperation.java index cbbf7a8..7d78f42 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperation.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperation.java @@ -68,10 +68,12 @@ public String getOption() { private final OperationType opType; private final List args; + private boolean failureLogging; public PrivilegedOperation(OperationType opType, String arg) { this.opType = opType; this.args = new ArrayList(); + this.failureLogging = true; if (arg != null) { this.args.add(arg); @@ -81,6 +83,7 @@ public PrivilegedOperation(OperationType opType, String arg) { public PrivilegedOperation(OperationType opType, List args) { this.opType = opType; this.args = new ArrayList(); + this.failureLogging = true; if (args != null) { this.args.addAll(args); @@ -97,6 +100,18 @@ public void appendArgs(List args) { this.args.addAll(args); } + public void enableFailureLogging() { + this.failureLogging = true; + } + + public void disableFailureLogging() { + this.failureLogging = false; + } + + public boolean isFailureLoggingEnabled() { + return failureLogging; + } + public OperationType getOperationType() { return opType; } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperationExecutor.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperationExecutor.java index 4b1bb9f..7370daa 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperationExecutor.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/privileged/PrivilegedOperationExecutor.java @@ -155,17 +155,20 @@ public String executePrivilegedOperation(List prefixCommands, LOG.debug(exec.getOutput()); } } catch (ExitCodeException e) { - StringBuilder logBuilder = new StringBuilder("Shell execution returned " - + "exit code: ") - .append(exec.getExitCode()) - .append(". Privileged Execution Operation Output: ") - .append(System.lineSeparator()).append(exec.getOutput()); + if (operation.isFailureLoggingEnabled()) { - logBuilder.append("Full command array for failed execution: ") - .append(System.lineSeparator()); - logBuilder.append(Arrays.toString(fullCommandArray)); + StringBuilder logBuilder = new StringBuilder("Shell execution returned " + + "exit code: ") + .append(exec.getExitCode()) + .append(". Privileged Execution Operation Output: ") + .append(System.lineSeparator()).append(exec.getOutput()); - LOG.warn(logBuilder.toString()); + logBuilder.append("Full command array for failed execution: ") + .append(System.lineSeparator()); + logBuilder.append(Arrays.toString(fullCommandArray)); + + LOG.warn(logBuilder.toString()); + } //stderr from shell executor seems to be stuffed into the exception //'message' - so, we have to extract it and set it as the error out diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DefaultLinuxContainerRuntime.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DefaultLinuxContainerRuntime.java index 633fa66..f12b575 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DefaultLinuxContainerRuntime.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DefaultLinuxContainerRuntime.java @@ -125,6 +125,9 @@ public void signalContainer(ContainerRuntimeContext ctx) ctx.getExecutionAttribute(PID), Integer.toString(ctx.getExecutionAttribute(SIGNAL).getValue())); + //Some failures here are acceptable. Let the calling executor decide. + signalOp.disableFailureLogging(); + try { PrivilegedOperationExecutor executor = PrivilegedOperationExecutor .getInstance(conf); @@ -133,8 +136,8 @@ public void signalContainer(ContainerRuntimeContext ctx) signalOp, null, container.getLaunchContext().getEnvironment(), false); } catch (PrivilegedOperationException e) { - LOG.warn("Signal container failed. Exception: ", e); - + //Don't log the failure here. Some kinds of signaling failures are + // acceptable. Let the calling executor decide what to do. throw new ContainerExecutionException("Signal container failed", e .getExitCode(), e.getOutput(), e.getErrorOutput()); }