diff options
author | 2018-02-13 03:48:00 -0800 | |
---|---|---|
committer | 2018-02-13 03:50:22 -0800 | |
commit | 04757dba0174d22c0a695a7ed5fe511fd13df008 (patch) | |
tree | 92d9405e4787123fdbcc0d0d8e2f7fe72ab7204c /src/main/java/com/google/devtools/build/lib/sandbox | |
parent | 6496b1d1d25025f33406b1eaf9949cab126f08bd (diff) |
tmpdir,local-exec: implement --local_tmp_root
Add new flag called `--local_tmp_root`, which (if
specified) tells Bazel what temp directory should
locally executed actions use.
Fixes https://github.com/bazelbuild/bazel/issues/4621
Related to https://github.com/bazelbuild/bazel/issues/3215
RELNOTES[NEW]: The new "--local_tmp_root=<path>" flag allows specifying the temp directory for locally executed actions.
Change-Id: Ice69a5e63d0bf4d3b5c9ef4dbdd1ed1c5025f85e
PiperOrigin-RevId: 185509555
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/sandbox')
5 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java index 6985392380..9c4f787076 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.actions.SpawnResult.Status; import com.google.devtools.build.lib.actions.UserExecException; import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.SpawnRunner; +import com.google.devtools.build.lib.exec.local.LocalExecutionOptions; import com.google.devtools.build.lib.runtime.CommandEnvironment; import com.google.devtools.build.lib.shell.AbnormalTerminationException; import com.google.devtools.build.lib.shell.Command; @@ -42,6 +43,7 @@ import java.io.IOException; import java.time.Duration; import java.util.Map; import java.util.Optional; +import javax.annotation.Nullable; /** Abstract common ancestor for sandbox spawn runners implementing the common parts. */ abstract class AbstractSandboxSpawnRunner implements SpawnRunner { @@ -53,12 +55,14 @@ abstract class AbstractSandboxSpawnRunner implements SpawnRunner { private final Path sandboxBase; private final SandboxOptions sandboxOptions; + private final String localTmpRoot; private final boolean verboseFailures; private final ImmutableSet<Path> inaccessiblePaths; public AbstractSandboxSpawnRunner(CommandEnvironment cmdEnv, Path sandboxBase) { this.sandboxBase = sandboxBase; this.sandboxOptions = cmdEnv.getOptions().getOptions(SandboxOptions.class); + this.localTmpRoot = cmdEnv.getOptions().getOptions(LocalExecutionOptions.class).localTmpRoot; this.verboseFailures = cmdEnv.getOptions().getOptions(ExecutionOptions.class).verboseFailures; this.inaccessiblePaths = sandboxOptions.getInaccessiblePaths(cmdEnv.getRuntime().getFileSystem()); @@ -293,5 +297,10 @@ abstract class AbstractSandboxSpawnRunner implements SpawnRunner { return sandboxOptions; } + @Nullable + protected final String getLocalTmpRoot() { + return localTmpRoot; + } + protected abstract String getName(); } diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD index 9d849a8fc1..243d0b5553 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD +++ b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD @@ -31,5 +31,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", "//third_party:guava", + "//third_party:jsr305", ], ) 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 ebd75bf48b..0f68c29eae 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 @@ -224,7 +224,11 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner { Map<String, String> environment = localEnvProvider.rewriteLocalEnv( - spawn.getEnvironment(), execRoot, tmpDir.getPathString(), productName); + spawn.getEnvironment(), + execRoot, + getLocalTmpRoot(), + tmpDir.getPathString(), + productName); final HashSet<Path> writableDirs = new HashSet<>(alwaysWritableDirs); ImmutableSet<Path> extraWritableDirs = getWritableDirs(sandboxExecRoot, environment); diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java index ad677f17ae..386dedf531 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java @@ -183,7 +183,11 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner { Map<String, String> environment = localEnvProvider.rewriteLocalEnv( - spawn.getEnvironment(), execRoot, tmpDir.getPathString(), productName); + spawn.getEnvironment(), + execRoot, + getLocalTmpRoot(), + tmpDir.getPathString(), + productName); Set<Path> writableDirs = getWritableDirs(sandboxExecRoot, environment); ImmutableSet<PathFragment> outputs = SandboxHelpers.getOutputFiles(spawn); 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 18b33c2de4..ca6279fd25 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 @@ -107,7 +107,11 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne Map<String, String> environment = localEnvProvider.rewriteLocalEnv( - spawn.getEnvironment(), execRoot, tmpDir.getPathString(), productName); + spawn.getEnvironment(), + execRoot, + getLocalTmpRoot(), + tmpDir.getPathString(), + productName); Duration timeout = policy.getTimeout(); ProcessWrapperUtil.CommandLineBuilder commandLineBuilder = |