Skip to content

Commit a87d7ed

Browse files
benjaminpcopybara-github
authored andcommitted
Take no action to prefetch empty artifacts.
Previously, Bazel would attempt to overwrite /dev/null. Closes bazelbuild#12514. PiperOrigin-RevId: 343824719
1 parent 2217b52 commit a87d7ed

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

src/main/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcher.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.devtools.build.lib.actions.FileArtifactValue;
2929
import com.google.devtools.build.lib.actions.MetadataProvider;
3030
import com.google.devtools.build.lib.actions.cache.VirtualActionInput;
31+
import com.google.devtools.build.lib.actions.cache.VirtualActionInput.EmptyActionInput;
3132
import com.google.devtools.build.lib.profiler.Profiler;
3233
import com.google.devtools.build.lib.profiler.ProfilerTask;
3334
import com.google.devtools.build.lib.profiler.SilentCloseable;
@@ -94,9 +95,11 @@ public void prefetchFiles(
9495
Map<Path, ListenableFuture<Void>> downloadsToWaitFor = new HashMap<>();
9596
for (ActionInput input : inputs) {
9697
if (input instanceof VirtualActionInput) {
97-
VirtualActionInput virtualActionInput = (VirtualActionInput) input;
98-
Path outputPath = execRoot.getRelative(virtualActionInput.getExecPath());
99-
SandboxHelpers.atomicallyWriteVirtualInput(virtualActionInput, outputPath, ".remote");
98+
if (!(input instanceof EmptyActionInput)) {
99+
VirtualActionInput virtualActionInput = (VirtualActionInput) input;
100+
Path outputPath = execRoot.getRelative(virtualActionInput.getExecPath());
101+
SandboxHelpers.atomicallyWriteVirtualInput(virtualActionInput, outputPath, ".remote");
102+
}
100103
} else {
101104
FileArtifactValue metadata = metadataProvider.getMetadata(input);
102105
if (metadata == null || !metadata.isRemote()) {

src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java

+21
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.google.devtools.build.lib.actions.cache.VirtualActionInput;
3737
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
3838
import com.google.devtools.build.lib.clock.JavaClock;
39+
import com.google.devtools.build.lib.exec.SpawnInputExpander;
3940
import com.google.devtools.build.lib.remote.options.RemoteOptions;
4041
import com.google.devtools.build.lib.remote.util.DigestUtil;
4142
import com.google.devtools.build.lib.remote.util.InMemoryCacheClient;
@@ -74,6 +75,9 @@ public void setUp() throws IOException {
7475
FileSystem fs = new InMemoryFileSystem(new JavaClock(), HASH_FUNCTION);
7576
execRoot = fs.getPath("/exec");
7677
execRoot.createDirectoryAndParents();
78+
Path dev = fs.getPath("/dev");
79+
dev.createDirectory();
80+
dev.setWritable(false);
7781
artifactRoot = ArtifactRoot.asDerivedRoot(execRoot, "root");
7882
artifactRoot.getRoot().asPath().createDirectoryAndParents();
7983
options = Options.getDefaults(RemoteOptions.class);
@@ -127,6 +131,23 @@ public void testStagingVirtualActionInput() throws Exception {
127131
assertThat(actionInputFetcher.downloadsInProgress).isEmpty();
128132
}
129133

134+
@Test
135+
public void testStagingEmptyVirtualActionInput() throws Exception {
136+
// arrange
137+
MetadataProvider metadataProvider = new StaticMetadataProvider(new HashMap<>());
138+
RemoteCache remoteCache = newCache(options, digestUtil, new HashMap<>());
139+
RemoteActionInputFetcher actionInputFetcher =
140+
new RemoteActionInputFetcher(remoteCache, execRoot, RequestMetadata.getDefaultInstance());
141+
142+
// act
143+
actionInputFetcher.prefetchFiles(
144+
ImmutableList.of(SpawnInputExpander.EMPTY_FILE), metadataProvider);
145+
146+
// assert that nothing happened
147+
assertThat(actionInputFetcher.downloadedFiles()).isEmpty();
148+
assertThat(actionInputFetcher.downloadsInProgress).isEmpty();
149+
}
150+
130151
@Test
131152
public void testFileNotFound() throws Exception {
132153
// Test that we get an exception if an input file is missing

0 commit comments

Comments
 (0)