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 9b3b4d64eb2973..831932b0dc4cc0 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 @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; @@ -102,6 +103,7 @@ private static boolean computeIsSupported() throws InterruptedException { private final SandboxHelpers helpers; private final Path execRoot; + private final ImmutableList packageRoots; private final boolean allowNetwork; private final ProcessWrapper processWrapper; private final Path sandboxBase; @@ -139,6 +141,7 @@ private static boolean computeIsSupported() throws InterruptedException { super(cmdEnv); this.helpers = helpers; this.execRoot = cmdEnv.getExecRoot(); + this.packageRoots = cmdEnv.getPackageLocator().getPathEntries(); this.allowNetwork = helpers.shouldAllowNetwork(cmdEnv.getOptions()); this.alwaysWritableDirs = getAlwaysWritableDirs(cmdEnv.getRuntime().getFileSystem()); this.processWrapper = ProcessWrapper.fromCommandEnvironment(cmdEnv); @@ -236,7 +239,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context context.getInputMapping(PathFragment.EMPTY_FRAGMENT), execRoot, execRoot, - ImmutableList.of(), + packageRoots, null); SandboxOutputs outputs = helpers.getOutputs(spawn); diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java index de253b0b4c327c..c9cd49fbb52318 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java @@ -45,6 +45,7 @@ import com.google.devtools.build.lib.util.ProcessUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -142,6 +143,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv, Path dockerClient) private final SandboxHelpers helpers; private final Path execRoot; + private final ImmutableList packageRoots; private final boolean allowNetwork; private final Path dockerClient; private final ProcessWrapper processWrapper; @@ -179,6 +181,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv, Path dockerClient) super(cmdEnv); this.helpers = helpers; this.execRoot = cmdEnv.getExecRoot(); + this.packageRoots = cmdEnv.getPackageLocator().getPathEntries(); this.allowNetwork = helpers.shouldAllowNetwork(cmdEnv.getOptions()); this.dockerClient = dockerClient; this.processWrapper = ProcessWrapper.fromCommandEnvironment(cmdEnv); @@ -225,7 +228,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context context.getInputMapping(PathFragment.EMPTY_FRAGMENT), execRoot, execRoot, - ImmutableList.of(), + packageRoots, null); SandboxOutputs outputs = helpers.getOutputs(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 6d1aa9e65cc7e9..f82df416777660 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 @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; import java.io.IOException; import java.time.Duration; import javax.annotation.Nullable; @@ -42,6 +43,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv) { private final SandboxHelpers helpers; private final ProcessWrapper processWrapper; private final Path execRoot; + private final ImmutableList packageRoots; private final Path sandboxBase; private final LocalEnvProvider localEnvProvider; @Nullable private final SandboxfsProcess sandboxfsProcess; @@ -69,6 +71,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv) { this.helpers = helpers; this.processWrapper = ProcessWrapper.fromCommandEnvironment(cmdEnv); this.execRoot = cmdEnv.getExecRoot(); + this.packageRoots = cmdEnv.getPackageLocator().getPathEntries(); this.localEnvProvider = LocalEnvProvider.forCurrentOs(cmdEnv.getClientEnv()); this.sandboxBase = sandboxBase; this.sandboxfsProcess = sandboxfsProcess; @@ -115,7 +118,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context context.getInputMapping(PathFragment.EMPTY_FRAGMENT), execRoot, execRoot, - ImmutableList.of(), + packageRoots, null); SandboxOutputs outputs = helpers.getOutputs(spawn); diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/WindowsSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/WindowsSandboxedSpawnRunner.java index 5304367e293cd2..6b584f0c4b3a3b 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/WindowsSandboxedSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/WindowsSandboxedSpawnRunner.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.sandbox.SandboxHelpers.SandboxInputs; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; import java.io.IOException; import java.time.Duration; @@ -35,6 +36,7 @@ final class WindowsSandboxedSpawnRunner extends AbstractSandboxSpawnRunner { private final SandboxHelpers helpers; private final Path execRoot; + private final ImmutableList packageRoots; private final PathFragment windowsSandbox; private final LocalEnvProvider localEnvProvider; private final Duration timeoutKillDelay; @@ -55,6 +57,7 @@ final class WindowsSandboxedSpawnRunner extends AbstractSandboxSpawnRunner { super(cmdEnv); this.helpers = helpers; this.execRoot = cmdEnv.getExecRoot(); + this.packageRoots = cmdEnv.getPackageLocator().getPathEntries(); this.windowsSandbox = windowsSandboxPath; this.timeoutKillDelay = timeoutKillDelay; this.localEnvProvider = new WindowsLocalEnvProvider(cmdEnv.getClientEnv()); @@ -75,7 +78,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context context.getInputMapping(PathFragment.EMPTY_FRAGMENT), execRoot, execRoot, - ImmutableList.of(), + packageRoots, null); ImmutableSet.Builder writablePaths = ImmutableSet.builder(); diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java index 378517aad291e6..69296875732078 100644 --- a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java +++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java @@ -176,6 +176,7 @@ public void registerSpawnStrategies( new WorkerSpawnRunner( new SandboxHelpers(), env.getExecRoot(), + env.getPackageLocator().getPathEntries(), workerPool, env.getReporter(), localEnvProvider, diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java index 2599bf04e17bc8..7a7c11f70e2a6b 100644 --- a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java @@ -61,6 +61,7 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.lib.vfs.XattrProvider; import com.google.devtools.build.lib.worker.WorkerProtocol.WorkRequest; import com.google.devtools.build.lib.worker.WorkerProtocol.WorkResponse; @@ -90,6 +91,7 @@ final class WorkerSpawnRunner implements SpawnRunner { private final SandboxHelpers helpers; private final Path execRoot; + private final ImmutableList packageRoots; private final WorkerPool workers; private final ExtendedEventHandler reporter; private final BinTools binTools; @@ -104,6 +106,7 @@ final class WorkerSpawnRunner implements SpawnRunner { public WorkerSpawnRunner( SandboxHelpers helpers, Path execRoot, + ImmutableList packageRoots, WorkerPool workers, ExtendedEventHandler reporter, LocalEnvProvider localEnvProvider, @@ -116,6 +119,7 @@ public WorkerSpawnRunner( Clock clock) { this.helpers = helpers; this.execRoot = execRoot; + this.packageRoots = packageRoots; this.workers = checkNotNull(workers); this.reporter = reporter; this.binTools = binTools; @@ -191,7 +195,7 @@ public SpawnResult exec(Spawn spawn, SpawnExecutionContext context) context.getInputMapping(PathFragment.EMPTY_FRAGMENT), execRoot, execRoot, - ImmutableList.of(), + packageRoots, null); } SandboxOutputs outputs = helpers.getOutputs(spawn); diff --git a/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java index e19bf2bf328a0c..b42422b3857ca7 100644 --- a/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java +++ b/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java @@ -146,6 +146,7 @@ public void testExecInWorker_happyPath() throws ExecException, InterruptedExcept new WorkerSpawnRunner( new SandboxHelpers(), fs.getPath("/execRoot"), + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider, @@ -198,6 +199,7 @@ public void testExecInWorker_virtualInputs_doesntQueryInputFileCache() new WorkerSpawnRunner( new SandboxHelpers(), execRoot, + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider, @@ -258,12 +260,13 @@ public void testExecInWorker_finishesAsyncOnInterrupt() new WorkerSpawnRunner( new SandboxHelpers(), fs.getPath("/execRoot"), + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider, /* binTools= */ null, resourceManager, - /* runfilesTreeUpdater=*/ null, + /* runfilesTreeUpdater= */ null, options, metricsCollector, SyscallCache.NO_CACHE, @@ -309,12 +312,13 @@ public void testExecInWorker_sendsCancelMessageOnInterrupt() new WorkerSpawnRunner( new SandboxHelpers(), fs.getPath("/execRoot"), + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider, /* binTools= */ null, resourceManager, - /* runfilesTreeUpdater=*/ null, + /* runfilesTreeUpdater= */ null, workerOptions, metricsCollector, SyscallCache.NO_CACHE, @@ -375,12 +379,13 @@ public void testExecInWorker_unsandboxedDiesOnInterrupt() new WorkerSpawnRunner( new SandboxHelpers(), fs.getPath("/execRoot"), + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider, /* binTools= */ null, resourceManager, - /* runfilesTreeUpdater=*/ null, + /* runfilesTreeUpdater= */ null, workerOptions, metricsCollector, SyscallCache.NO_CACHE, @@ -427,6 +432,7 @@ public void testExecInWorker_noMultiplexWithDynamic() new WorkerSpawnRunner( new SandboxHelpers(), fs.getPath("/execRoot"), + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider, @@ -476,6 +482,7 @@ private void assertRecordedResponsethrowsException( new WorkerSpawnRunner( new SandboxHelpers(), fs.getPath("/execRoot"), + ImmutableList.of(), createWorkerPool(), reporter, localEnvProvider,