aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/sandbox
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-04-19 05:41:44 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-19 05:42:58 -0700
commit29e306d66cc4c441f0321a62101077647a4c95dc (patch)
treecabcf23c53c9cdcfe501bc5f17531f73e81c5a30 /src/main/java/com/google/devtools/build/lib/sandbox
parent9566f677a1093e3a3c0ddaed3f9ab34dd98e5e26 (diff)
Rename SpawnExecutionPolicy -> SpawnExecutionContext.
This class will be used to tie a Spawn to a SpawnRunner, and isn't really a policy object. It will carry state such as the expanded inputs and expanded command line. Currently a context can be passed between different SpawnRunners. This will be addressed independently, so a context is tied to a particular spawn runner. PiperOrigin-RevId: 193501918
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/sandbox')
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/AbstractSandboxSpawnRunner.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java9
6 files changed, 31 insertions, 34 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 9fee6544dd..5610242eaa 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
@@ -62,14 +62,14 @@ abstract class AbstractSandboxSpawnRunner implements SpawnRunner {
}
@Override
- public SpawnResult exec(Spawn spawn, SpawnExecutionPolicy policy)
+ public SpawnResult exec(Spawn spawn, SpawnExecutionContext context)
throws ExecException, InterruptedException {
ActionExecutionMetadata owner = spawn.getResourceOwner();
- policy.report(ProgressStatus.SCHEDULING, getName());
+ context.report(ProgressStatus.SCHEDULING, getName());
try (ResourceHandle ignored =
ResourceManager.instance().acquireResources(owner, spawn.getLocalResources())) {
- policy.report(ProgressStatus.EXECUTING, getName());
- return actuallyExec(spawn, policy);
+ context.report(ProgressStatus.EXECUTING, getName());
+ return actuallyExec(spawn, context);
} catch (IOException e) {
throw new UserExecException("I/O exception during sandboxed execution", e);
}
@@ -78,25 +78,25 @@ abstract class AbstractSandboxSpawnRunner implements SpawnRunner {
// TODO(laszlocsomor): refactor this class to make `actuallyExec`'s contract clearer: the caller
// of `actuallyExec` should not depend on `actuallyExec` calling `runSpawn` because it's easy to
// forget to do so in `actuallyExec`'s implementations.
- protected abstract SpawnResult actuallyExec(Spawn spawn, SpawnExecutionPolicy policy)
+ protected abstract SpawnResult actuallyExec(Spawn spawn, SpawnExecutionContext context)
throws ExecException, InterruptedException, IOException;
protected SpawnResult runSpawn(
Spawn originalSpawn,
SandboxedSpawn sandbox,
- SpawnExecutionPolicy policy,
+ SpawnExecutionContext context,
Path execRoot,
Duration timeout,
Path statisticsPath)
throws IOException, InterruptedException {
try {
sandbox.createFileSystem();
- OutErr outErr = policy.getFileOutErr();
- policy.prefetchInputs();
+ OutErr outErr = context.getFileOutErr();
+ context.prefetchInputs();
SpawnResult result = run(originalSpawn, sandbox, outErr, timeout, execRoot, statisticsPath);
- policy.lockOutputFiles();
+ context.lockOutputFiles();
try {
// We copy the outputs even when the command failed.
sandbox.copyOutputs(execRoot);
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 d20eec70b1..86631443bf 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
@@ -193,10 +193,10 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
}
@Override
- protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionPolicy policy)
+ protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionContext context)
throws IOException, InterruptedException {
// Each invocation of "exec" gets its own sandbox.
- Path sandboxPath = sandboxBase.getRelative(Integer.toString(policy.getId()));
+ Path sandboxPath = sandboxBase.getRelative(Integer.toString(context.getId()));
sandboxPath.createDirectory();
// b/64689608: The execroot of the sandboxed process must end with the workspace name, just like
@@ -215,7 +215,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
ImmutableSet<PathFragment> outputs = SandboxHelpers.getOutputFiles(spawn);
final Path sandboxConfigPath = sandboxPath.getRelative("sandbox.sb");
- Duration timeout = policy.getTimeout();
+ Duration timeout = context.getTimeout();
ProcessWrapperUtil.CommandLineBuilder processWrapperCommandLineBuilder =
ProcessWrapperUtil.commandLineBuilder(processWrapper.getPathString(), spawn.getArguments())
@@ -241,7 +241,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
boolean allowNetworkForThisSpawn = allowNetwork || Spawns.requiresNetwork(spawn);
- Map<PathFragment, Path> inputs = SandboxHelpers.getInputFiles(spawn, policy, execRoot);
+ Map<PathFragment, Path> inputs = SandboxHelpers.getInputFiles(spawn, context, execRoot);
SandboxedSpawn sandbox;
if (sandboxfsProcess != null) {
@@ -287,7 +287,7 @@ final class DarwinSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
}
};
}
- return runSpawn(spawn, sandbox, policy, execRoot, timeout, statisticsPath);
+ return runSpawn(spawn, sandbox, context, execRoot, timeout, statisticsPath);
}
private void writeConfig(
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 f2aedf8615..888f9abab2 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
@@ -117,10 +117,10 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
}
@Override
- protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionPolicy policy)
+ protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionContext context)
throws IOException, ExecException, InterruptedException {
// Each invocation of "exec" gets its own sandbox base, execroot and temporary directory.
- Path sandboxPath = sandboxBase.getRelative(Integer.toString(policy.getId()));
+ Path sandboxPath = sandboxBase.getRelative(Integer.toString(context.getId()));
sandboxPath.createDirectory();
// b/64689608: The execroot of the sandboxed process must end with the workspace name, just like
@@ -134,7 +134,7 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
ImmutableSet<Path> writableDirs = getWritableDirs(sandboxExecRoot, environment);
ImmutableSet<PathFragment> outputs = SandboxHelpers.getOutputFiles(spawn);
- Duration timeout = policy.getTimeout();
+ Duration timeout = context.getTimeout();
LinuxSandboxUtil.CommandLineBuilder commandLineBuilder =
LinuxSandboxUtil.commandLineBuilder(linuxSandbox, spawn.getArguments())
@@ -170,7 +170,7 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
sandboxPath,
commandLineBuilder.build(),
environment,
- SandboxHelpers.getInputFiles(spawn, policy, execRoot),
+ SandboxHelpers.getInputFiles(spawn, context, execRoot),
outputs,
ImmutableSet.of());
} else {
@@ -180,12 +180,12 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
sandboxExecRoot,
commandLineBuilder.build(),
environment,
- SandboxHelpers.getInputFiles(spawn, policy, execRoot),
+ SandboxHelpers.getInputFiles(spawn, context, execRoot),
outputs,
writableDirs);
}
- return runSpawn(spawn, sandbox, policy, execRoot, timeout, statisticsPath);
+ return runSpawn(spawn, sandbox, context, execRoot, timeout, statisticsPath);
}
@Override
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 e79b2abcd7..b3865a73a5 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
@@ -63,10 +63,10 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
}
@Override
- protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionPolicy policy)
+ protected SpawnResult actuallyExec(Spawn spawn, SpawnExecutionContext context)
throws ExecException, IOException, InterruptedException {
// Each invocation of "exec" gets its own sandbox.
- Path sandboxPath = sandboxBase.getRelative(Integer.toString(policy.getId()));
+ Path sandboxPath = sandboxBase.getRelative(Integer.toString(context.getId()));
sandboxPath.createDirectory();
// b/64689608: The execroot of the sandboxed process must end with the workspace name, just like
@@ -78,7 +78,7 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
Map<String, String> environment =
localEnvProvider.rewriteLocalEnv(spawn.getEnvironment(), execRoot, "/tmp");
- Duration timeout = policy.getTimeout();
+ Duration timeout = context.getTimeout();
ProcessWrapperUtil.CommandLineBuilder commandLineBuilder =
ProcessWrapperUtil.commandLineBuilder(processWrapper.getPathString(), spawn.getArguments())
.setTimeout(timeout);
@@ -97,11 +97,11 @@ final class ProcessWrapperSandboxedSpawnRunner extends AbstractSandboxSpawnRunne
sandboxExecRoot,
commandLineBuilder.build(),
environment,
- SandboxHelpers.getInputFiles(spawn, policy, execRoot),
+ SandboxHelpers.getInputFiles(spawn, context, execRoot),
SandboxHelpers.getOutputFiles(spawn),
getWritableDirs(sandboxExecRoot, environment));
- return runSpawn(spawn, sandbox, policy, execRoot, timeout, statisticsPath);
+ return runSpawn(spawn, sandbox, context, execRoot, timeout, statisticsPath);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java
index cee91cebe1..0acbe064b4 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java
@@ -127,12 +127,12 @@ final class SandboxActionContextProvider extends ActionContextProvider {
}
@Override
- public SpawnResult exec(Spawn spawn, SpawnExecutionPolicy policy)
+ public SpawnResult exec(Spawn spawn, SpawnExecutionContext context)
throws InterruptedException, IOException, ExecException {
if (!Spawns.mayBeSandboxed(spawn)) {
- return fallbackSpawnRunner.exec(spawn, policy);
+ return fallbackSpawnRunner.exec(spawn, context);
} else {
- return sandboxSpawnRunner.exec(spawn, policy);
+ return sandboxSpawnRunner.exec(spawn, context);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java
index 31f2dcdfd1..5894680a1e 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java
@@ -27,7 +27,7 @@ import com.google.devtools.build.lib.actions.cache.VirtualActionInput;
import com.google.devtools.build.lib.actions.cache.VirtualActionInput.EmptyActionInput;
import com.google.devtools.build.lib.analysis.test.TestConfiguration;
import com.google.devtools.build.lib.exec.SpawnInputExpander;
-import com.google.devtools.build.lib.exec.SpawnRunner.SpawnExecutionPolicy;
+import com.google.devtools.build.lib.exec.SpawnRunner.SpawnExecutionContext;
import com.google.devtools.build.lib.rules.fileset.FilesetActionContext;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -65,11 +65,8 @@ public final class SandboxHelpers {
* host filesystem where the input files can be found.
*/
public static Map<PathFragment, Path> getInputFiles(
- Spawn spawn,
- SpawnExecutionPolicy policy,
- Path execRoot)
- throws IOException {
- return postProcess(policy.getInputMapping(), spawn, policy.getArtifactExpander(), execRoot);
+ Spawn spawn, SpawnExecutionContext context, Path execRoot) throws IOException {
+ return postProcess(context.getInputMapping(), spawn, context.getArtifactExpander(), execRoot);
}
/**