Skip to content

Commit 1829883

Browse files
lberkicopybara-github
authored andcommitted
Make all sandboxed strategies work with Filesets on their inputs.
This was broken by a556969 and partially fixed by 70691f2 . Only partially, because in my infinite wisdom, I didn't realize that it's not only the Linux sandbox that can have this problem. To avoid further issues, I now plumb the package roots to every sandboxed spawn runner, even the Windows one, even though Bazel doesn't have Filesets. RELNOTES: None. PiperOrigin-RevId: 495271813 Change-Id: I20626c3863bf56018c7c72ac4a21f7d02e3ffc34
1 parent a0c054a commit 1829883

File tree

7 files changed

+32
-8
lines changed

7 files changed

+32
-8
lines changed

src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedSpawnRunner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.google.devtools.build.lib.vfs.FileSystem;
3838
import com.google.devtools.build.lib.vfs.Path;
3939
import com.google.devtools.build.lib.vfs.PathFragment;
40+
import com.google.devtools.build.lib.vfs.Root;
4041
import java.io.BufferedWriter;
4142
import java.io.File;
4243
import java.io.IOException;
@@ -102,6 +103,7 @@ private static boolean computeIsSupported() throws InterruptedException {
102103

103104
private final SandboxHelpers helpers;
104105
private final Path execRoot;
106+
private final ImmutableList<Root> packageRoots;
105107
private final boolean allowNetwork;
106108
private final ProcessWrapper processWrapper;
107109
private final Path sandboxBase;
@@ -139,6 +141,7 @@ private static boolean computeIsSupported() throws InterruptedException {
139141
super(cmdEnv);
140142
this.helpers = helpers;
141143
this.execRoot = cmdEnv.getExecRoot();
144+
this.packageRoots = cmdEnv.getPackageLocator().getPathEntries();
142145
this.allowNetwork = helpers.shouldAllowNetwork(cmdEnv.getOptions());
143146
this.alwaysWritableDirs = getAlwaysWritableDirs(cmdEnv.getRuntime().getFileSystem());
144147
this.processWrapper = ProcessWrapper.fromCommandEnvironment(cmdEnv);
@@ -236,7 +239,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context
236239
context.getInputMapping(PathFragment.EMPTY_FRAGMENT),
237240
execRoot,
238241
execRoot,
239-
ImmutableList.of(),
242+
packageRoots,
240243
null);
241244
SandboxOutputs outputs = helpers.getOutputs(spawn);
242245

src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.google.devtools.build.lib.util.ProcessUtils;
4646
import com.google.devtools.build.lib.vfs.Path;
4747
import com.google.devtools.build.lib.vfs.PathFragment;
48+
import com.google.devtools.build.lib.vfs.Root;
4849
import java.io.ByteArrayInputStream;
4950
import java.io.ByteArrayOutputStream;
5051
import java.io.IOException;
@@ -142,6 +143,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv, Path dockerClient)
142143

143144
private final SandboxHelpers helpers;
144145
private final Path execRoot;
146+
private final ImmutableList<Root> packageRoots;
145147
private final boolean allowNetwork;
146148
private final Path dockerClient;
147149
private final ProcessWrapper processWrapper;
@@ -179,6 +181,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv, Path dockerClient)
179181
super(cmdEnv);
180182
this.helpers = helpers;
181183
this.execRoot = cmdEnv.getExecRoot();
184+
this.packageRoots = cmdEnv.getPackageLocator().getPathEntries();
182185
this.allowNetwork = helpers.shouldAllowNetwork(cmdEnv.getOptions());
183186
this.dockerClient = dockerClient;
184187
this.processWrapper = ProcessWrapper.fromCommandEnvironment(cmdEnv);
@@ -225,7 +228,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context
225228
context.getInputMapping(PathFragment.EMPTY_FRAGMENT),
226229
execRoot,
227230
execRoot,
228-
ImmutableList.of(),
231+
packageRoots,
229232
null);
230233
SandboxOutputs outputs = helpers.getOutputs(spawn);
231234

src/main/java/com/google/devtools/build/lib/sandbox/ProcessWrapperSandboxedSpawnRunner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.devtools.build.lib.util.OS;
2929
import com.google.devtools.build.lib.vfs.Path;
3030
import com.google.devtools.build.lib.vfs.PathFragment;
31+
import com.google.devtools.build.lib.vfs.Root;
3132
import java.io.IOException;
3233
import java.time.Duration;
3334
import javax.annotation.Nullable;
@@ -42,6 +43,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv) {
4243
private final SandboxHelpers helpers;
4344
private final ProcessWrapper processWrapper;
4445
private final Path execRoot;
46+
private final ImmutableList<Root> packageRoots;
4547
private final Path sandboxBase;
4648
private final LocalEnvProvider localEnvProvider;
4749
@Nullable private final SandboxfsProcess sandboxfsProcess;
@@ -69,6 +71,7 @@ public static boolean isSupported(CommandEnvironment cmdEnv) {
6971
this.helpers = helpers;
7072
this.processWrapper = ProcessWrapper.fromCommandEnvironment(cmdEnv);
7173
this.execRoot = cmdEnv.getExecRoot();
74+
this.packageRoots = cmdEnv.getPackageLocator().getPathEntries();
7275
this.localEnvProvider = LocalEnvProvider.forCurrentOs(cmdEnv.getClientEnv());
7376
this.sandboxBase = sandboxBase;
7477
this.sandboxfsProcess = sandboxfsProcess;
@@ -115,7 +118,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context
115118
context.getInputMapping(PathFragment.EMPTY_FRAGMENT),
116119
execRoot,
117120
execRoot,
118-
ImmutableList.of(),
121+
packageRoots,
119122
null);
120123
SandboxOutputs outputs = helpers.getOutputs(spawn);
121124

src/main/java/com/google/devtools/build/lib/sandbox/WindowsSandboxedSpawnRunner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.google.devtools.build.lib.sandbox.SandboxHelpers.SandboxInputs;
2828
import com.google.devtools.build.lib.vfs.Path;
2929
import com.google.devtools.build.lib.vfs.PathFragment;
30+
import com.google.devtools.build.lib.vfs.Root;
3031
import java.io.IOException;
3132
import java.time.Duration;
3233

@@ -35,6 +36,7 @@ final class WindowsSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
3536

3637
private final SandboxHelpers helpers;
3738
private final Path execRoot;
39+
private final ImmutableList<Root> packageRoots;
3840
private final PathFragment windowsSandbox;
3941
private final LocalEnvProvider localEnvProvider;
4042
private final Duration timeoutKillDelay;
@@ -55,6 +57,7 @@ final class WindowsSandboxedSpawnRunner extends AbstractSandboxSpawnRunner {
5557
super(cmdEnv);
5658
this.helpers = helpers;
5759
this.execRoot = cmdEnv.getExecRoot();
60+
this.packageRoots = cmdEnv.getPackageLocator().getPathEntries();
5861
this.windowsSandbox = windowsSandboxPath;
5962
this.timeoutKillDelay = timeoutKillDelay;
6063
this.localEnvProvider = new WindowsLocalEnvProvider(cmdEnv.getClientEnv());
@@ -75,7 +78,7 @@ protected SandboxedSpawn prepareSpawn(Spawn spawn, SpawnExecutionContext context
7578
context.getInputMapping(PathFragment.EMPTY_FRAGMENT),
7679
execRoot,
7780
execRoot,
78-
ImmutableList.of(),
81+
packageRoots,
7982
null);
8083

8184
ImmutableSet.Builder<Path> writablePaths = ImmutableSet.builder();

src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ public void registerSpawnStrategies(
176176
new WorkerSpawnRunner(
177177
new SandboxHelpers(),
178178
env.getExecRoot(),
179+
env.getPackageLocator().getPathEntries(),
179180
workerPool,
180181
env.getReporter(),
181182
localEnvProvider,

src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.google.devtools.build.lib.vfs.FileSystemUtils;
6262
import com.google.devtools.build.lib.vfs.Path;
6363
import com.google.devtools.build.lib.vfs.PathFragment;
64+
import com.google.devtools.build.lib.vfs.Root;
6465
import com.google.devtools.build.lib.vfs.XattrProvider;
6566
import com.google.devtools.build.lib.worker.WorkerProtocol.WorkRequest;
6667
import com.google.devtools.build.lib.worker.WorkerProtocol.WorkResponse;
@@ -90,6 +91,7 @@ final class WorkerSpawnRunner implements SpawnRunner {
9091

9192
private final SandboxHelpers helpers;
9293
private final Path execRoot;
94+
private final ImmutableList<Root> packageRoots;
9395
private final WorkerPool workers;
9496
private final ExtendedEventHandler reporter;
9597
private final BinTools binTools;
@@ -104,6 +106,7 @@ final class WorkerSpawnRunner implements SpawnRunner {
104106
public WorkerSpawnRunner(
105107
SandboxHelpers helpers,
106108
Path execRoot,
109+
ImmutableList<Root> packageRoots,
107110
WorkerPool workers,
108111
ExtendedEventHandler reporter,
109112
LocalEnvProvider localEnvProvider,
@@ -116,6 +119,7 @@ public WorkerSpawnRunner(
116119
Clock clock) {
117120
this.helpers = helpers;
118121
this.execRoot = execRoot;
122+
this.packageRoots = packageRoots;
119123
this.workers = checkNotNull(workers);
120124
this.reporter = reporter;
121125
this.binTools = binTools;
@@ -191,7 +195,7 @@ public SpawnResult exec(Spawn spawn, SpawnExecutionContext context)
191195
context.getInputMapping(PathFragment.EMPTY_FRAGMENT),
192196
execRoot,
193197
execRoot,
194-
ImmutableList.of(),
198+
packageRoots,
195199
null);
196200
}
197201
SandboxOutputs outputs = helpers.getOutputs(spawn);

src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public void testExecInWorker_happyPath() throws ExecException, InterruptedExcept
146146
new WorkerSpawnRunner(
147147
new SandboxHelpers(),
148148
fs.getPath("/execRoot"),
149+
ImmutableList.of(),
149150
createWorkerPool(),
150151
reporter,
151152
localEnvProvider,
@@ -198,6 +199,7 @@ public void testExecInWorker_virtualInputs_doesntQueryInputFileCache()
198199
new WorkerSpawnRunner(
199200
new SandboxHelpers(),
200201
execRoot,
202+
ImmutableList.of(),
201203
createWorkerPool(),
202204
reporter,
203205
localEnvProvider,
@@ -258,12 +260,13 @@ public void testExecInWorker_finishesAsyncOnInterrupt()
258260
new WorkerSpawnRunner(
259261
new SandboxHelpers(),
260262
fs.getPath("/execRoot"),
263+
ImmutableList.of(),
261264
createWorkerPool(),
262265
reporter,
263266
localEnvProvider,
264267
/* binTools= */ null,
265268
resourceManager,
266-
/* runfilesTreeUpdater=*/ null,
269+
/* runfilesTreeUpdater= */ null,
267270
options,
268271
metricsCollector,
269272
SyscallCache.NO_CACHE,
@@ -309,12 +312,13 @@ public void testExecInWorker_sendsCancelMessageOnInterrupt()
309312
new WorkerSpawnRunner(
310313
new SandboxHelpers(),
311314
fs.getPath("/execRoot"),
315+
ImmutableList.of(),
312316
createWorkerPool(),
313317
reporter,
314318
localEnvProvider,
315319
/* binTools= */ null,
316320
resourceManager,
317-
/* runfilesTreeUpdater=*/ null,
321+
/* runfilesTreeUpdater= */ null,
318322
workerOptions,
319323
metricsCollector,
320324
SyscallCache.NO_CACHE,
@@ -375,12 +379,13 @@ public void testExecInWorker_unsandboxedDiesOnInterrupt()
375379
new WorkerSpawnRunner(
376380
new SandboxHelpers(),
377381
fs.getPath("/execRoot"),
382+
ImmutableList.of(),
378383
createWorkerPool(),
379384
reporter,
380385
localEnvProvider,
381386
/* binTools= */ null,
382387
resourceManager,
383-
/* runfilesTreeUpdater=*/ null,
388+
/* runfilesTreeUpdater= */ null,
384389
workerOptions,
385390
metricsCollector,
386391
SyscallCache.NO_CACHE,
@@ -427,6 +432,7 @@ public void testExecInWorker_noMultiplexWithDynamic()
427432
new WorkerSpawnRunner(
428433
new SandboxHelpers(),
429434
fs.getPath("/execRoot"),
435+
ImmutableList.of(),
430436
createWorkerPool(),
431437
reporter,
432438
localEnvProvider,
@@ -476,6 +482,7 @@ private void assertRecordedResponsethrowsException(
476482
new WorkerSpawnRunner(
477483
new SandboxHelpers(),
478484
fs.getPath("/execRoot"),
485+
ImmutableList.of(),
479486
createWorkerPool(),
480487
reporter,
481488
localEnvProvider,

0 commit comments

Comments
 (0)