diff options
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.java | 12 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java | 7 |
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); |