aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar ruperts <ruperts@google.com>2017-11-28 20:43:00 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-28 20:44:59 -0800
commit55a4b9ae3f4ac5c453e7d944c5113f7fe9baf24b (patch)
treed1afc7e21fa5215e8d349d3575de23a3ccbe1205 /src/main/java/com/google/devtools/build
parent51b92a4d1598579c2a2a90f7ed0d70182409b2e4 (diff)
Remove process-wrapper duplication from RunCommand.
Also rename ProcessWrapperRunner to ProcessWrapperUtil, since it isn't really a Runner (it doesn't run anything). RELNOTES: None. PiperOrigin-RevId: 177260951
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/ProcessWrapperUtil.java (renamed from src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperRunner.java)28
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java7
4 files changed, 31 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperRunner.java b/src/main/java/com/google/devtools/build/lib/runtime/ProcessWrapperUtil.java
index cff4678e28..e212fb1a73 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ProcessWrapperUtil.java
@@ -12,9 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package com.google.devtools.build.lib.sandbox;
+package com.google.devtools.build.lib.runtime;
-import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.util.OsUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -23,25 +22,36 @@ import java.util.ArrayList;
import java.util.List;
/**
- * This runner runs process-wrapper inside a sandboxed execution root, which should work on most
- * platforms and gives at least some isolation between running actions.
+ * Utility functions for the process wrapper embedded tool, which should work on most platforms and
+ * gives at least some isolation between running actions.
*/
-final class ProcessWrapperRunner {
+public final class ProcessWrapperUtil {
private static final String PROCESS_WRAPPER = "process-wrapper" + OsUtils.executableExtension();
- static boolean isSupported(CommandEnvironment cmdEnv) {
+ /** Returns whether using the process wrapper is supported in the {@link CommandEnvironment}. */
+ public static boolean isSupported(CommandEnvironment cmdEnv) {
// We can only use this runner, if the process-wrapper exists in the embedded tools.
// This might not always be the case, e.g. while bootstrapping.
return getProcessWrapper(cmdEnv) != null;
}
- /** Returns the PathFragment of the process wrapper binary, or null if it doesn't exist. */
- static Path getProcessWrapper(CommandEnvironment cmdEnv) {
+ /** Returns the {@link Path} of the process wrapper binary, or null if it doesn't exist. */
+ public static Path getProcessWrapper(CommandEnvironment cmdEnv) {
PathFragment execPath = cmdEnv.getBlazeWorkspace().getBinTools().getExecPath(PROCESS_WRAPPER);
return execPath != null ? cmdEnv.getExecRoot().getRelative(execPath) : null;
}
- static List<String> getCommandLine(
+ /**
+ * Returns a command line to execute a specific command using the process wrapper with a timeout.
+ *
+ * @param processWrapper the path to the process wrapper
+ * @param spawnArguments the command to execute, and its arguments
+ * @param timeout the time limit to run command using the process wrapper
+ * @param timeoutGraceSeconds the delay (in seconds) to kill a command that exceeds its timeout
+ *
+ * @return the constructed command line to execute a command using the process wrapper
+ */
+ public static List<String> getCommandLine(
Path processWrapper, List<String> spawnArguments, Duration timeout, int timeoutGraceSeconds) {
List<String> commandLineArgs = new ArrayList<>(5 + spawnArguments.size());
commandLineArgs.add(processWrapper.getPathString());
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index aee56d498a..f99d1cdbca 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -46,6 +46,7 @@ import com.google.devtools.build.lib.pkgcache.LoadingFailedException;
import com.google.devtools.build.lib.runtime.BlazeCommand;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.ProcessWrapperUtil;
import com.google.devtools.build.lib.shell.AbnormalTerminationException;
import com.google.devtools.build.lib.shell.BadExitStatusException;
import com.google.devtools.build.lib.shell.CommandException;
@@ -57,7 +58,6 @@ import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.OptionsUtils;
-import com.google.devtools.build.lib.util.OsUtils;
import com.google.devtools.build.lib.util.ShellEscaper;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -115,8 +115,6 @@ public class RunCommand implements BlazeCommand {
@VisibleForTesting
public static final String NO_TARGET_MESSAGE = "No targets found to run";
- private static final String PROCESS_WRAPPER = "process-wrapper" + OsUtils.executableExtension();
-
// Value of --run_under as of the most recent command invocation.
private RunUnder currentRunUnder;
@@ -264,11 +262,9 @@ public class RunCommand implements BlazeCommand {
// on that platform. Also we skip it when writing the command-line to a file instead
// of executing it directly.
if (OS.getCurrent() != OS.WINDOWS && runOptions.scriptPath == null) {
- PathFragment processWrapperPath =
- env.getBlazeWorkspace().getBinTools().getExecPath(PROCESS_WRAPPER);
- Preconditions.checkNotNull(
- processWrapperPath, PROCESS_WRAPPER + " not found in embedded tools");
- cmdLine.add(env.getExecRoot().getRelative(processWrapperPath).getPathString());
+ Preconditions.checkState(ProcessWrapperUtil.isSupported(env),
+ "process-wraper not found in embedded tools");
+ cmdLine.add(ProcessWrapperUtil.getProcessWrapper(env).getPathString());
}
List<String> prettyCmdLine = new ArrayList<>();
// Insert the command prefix specified by the "--run_under=<command-prefix>" option
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java
index 7cc54c31a7..1f6af91075 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.actions.SpawnResult;
import com.google.devtools.build.lib.exec.apple.XCodeLocalEnvProvider;
import com.google.devtools.build.lib.exec.local.LocalEnvProvider;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.ProcessWrapperUtil;
import com.google.devtools.build.lib.shell.Command;
import com.google.devtools.build.lib.shell.CommandException;
import com.google.devtools.build.lib.shell.CommandResult;
@@ -58,7 +59,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
if (OS.getCurrent() != OS.DARWIN) {
return false;
}
- if (!ProcessWrapperRunner.isSupported(cmdEnv)) {
+ if (!ProcessWrapperUtil.isSupported(cmdEnv)) {
return false;
}
@@ -106,7 +107,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
this.allowNetwork = SandboxHelpers.shouldAllowNetwork(cmdEnv.getOptions());
this.productName = productName;
this.alwaysWritableDirs = getAlwaysWritableDirs(cmdEnv.getRuntime().getFileSystem());
- this.processWrapper = ProcessWrapperRunner.getProcessWrapper(cmdEnv);
+ this.processWrapper = ProcessWrapperUtil.getProcessWrapper(cmdEnv);
this.localEnvProvider = new XCodeLocalEnvProvider();
this.timeoutGraceSeconds = timeoutGraceSeconds;
}
@@ -222,7 +223,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
commandLineArgs.add("-f");
commandLineArgs.add(sandboxConfigPath.getPathString());
commandLineArgs.addAll(
- ProcessWrapperRunner.getCommandLine(
+ ProcessWrapperUtil.getCommandLine(
processWrapper, spawn.getArguments(), timeout, timeoutGraceSeconds));
return commandLineArgs;
}
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
index de5fd8c95d..8ab4ddbf45 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.SpawnResult;
import com.google.devtools.build.lib.exec.apple.XCodeLocalEnvProvider;
import com.google.devtools.build.lib.exec.local.LocalEnvProvider;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.ProcessWrapperUtil;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
@@ -31,7 +32,7 @@ import java.util.Map;
final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
public static boolean isSupported(CommandEnvironment cmdEnv) {
- return OS.isPosixCompatible() && ProcessWrapperRunner.isSupported(cmdEnv);
+ return OS.isPosixCompatible() && ProcessWrapperUtil.isSupported(cmdEnv);
}
private final Path execRoot;
@@ -49,7 +50,7 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
this.execRoot = cmdEnv.getExecRoot();
this.productName = productName;
this.timeoutGraceSeconds = timeoutGraceSeconds;
- this.processWrapper = ProcessWrapperRunner.getProcessWrapper(cmdEnv);
+ this.processWrapper = ProcessWrapperUtil.getProcessWrapper(cmdEnv);
this.localEnvProvider =
OS.getCurrent() == OS.DARWIN
? new XCodeLocalEnvProvider()
@@ -69,7 +70,7 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
Duration timeout = policy.getTimeout();
List<String> arguments =
- ProcessWrapperRunner.getCommandLine(
+ ProcessWrapperUtil.getCommandLine(
processWrapper, spawn.getArguments(), timeout, timeoutGraceSeconds);
Map<String, String> environment =
localEnvProvider.rewriteLocalEnv(spawn.getEnvironment(), execRoot, tmpDir, productName);