From 0f626a472b9fb6ca8a6da17448ba8ff518188870 Mon Sep 17 00:00:00 2001 From: aiuto Date: Fri, 8 Jan 2021 10:51:30 -0800 Subject: [PATCH] Automated rollback of commit ceec93c35ead1bd487e96a5fee46e8d080f88858. RELNOTES: None PiperOrigin-RevId: 350794308 --- .../lib/actions/cache/VirtualActionInput.java | 22 +++++++++++-------- .../build/lib/exec/SpawnInputExpander.java | 14 +++++++----- .../lib/exec/SpawnInputExpanderTest.java | 3 +-- .../remote/RemoteActionInputFetcherTest.java | 3 ++- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/VirtualActionInput.java b/src/main/java/com/google/devtools/build/lib/actions/cache/VirtualActionInput.java index 8a035a969a390b..81d4bb1d129032 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/cache/VirtualActionInput.java +++ b/src/main/java/com/google/devtools/build/lib/actions/cache/VirtualActionInput.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.actions.cache; +import com.google.common.base.Preconditions; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.FileArtifactValue; import com.google.devtools.build.lib.util.StreamWriter; @@ -26,11 +27,6 @@ * OutputStream. */ public interface VirtualActionInput extends ActionInput, StreamWriter { - /** - * An empty virtual artifact without an execpath. This is used to denote empty files in - * runfiles and filesets. - */ - public static final VirtualActionInput EMPTY_MARKER = new EmptyActionInput(); /** * Gets a {@link ByteString} representation of the fake file. Used to avoid copying if the fake @@ -52,7 +48,15 @@ default FileArtifactValue getMetadata() throws IOException { * use instances of this class to represent those files. */ final class EmptyActionInput implements VirtualActionInput { - private EmptyActionInput() {} + private final PathFragment execPath; + + public EmptyActionInput(PathFragment execPath) { + this.execPath = Preconditions.checkNotNull(execPath); + } + + public EmptyActionInput(String execPath) { + this(PathFragment.create(execPath)); + } @Override public boolean isSymlink() { @@ -61,12 +65,12 @@ public boolean isSymlink() { @Override public String getExecPathString() { - throw new UnsupportedOperationException("empty virtual artifact doesn't have an execpath"); + return execPath.getPathString(); } @Override public PathFragment getExecPath() { - throw new UnsupportedOperationException("empty virtual artifact doesn't have an execpath"); + return execPath; } @Override @@ -81,7 +85,7 @@ public ByteString getBytes() throws IOException { @Override public String toString() { - return "EmptyActionInput"; + return "EmptyActionInput: " + execPath; } } } diff --git a/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java b/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java index ad4fe00e5b98ac..08dcda04b67bbe 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java +++ b/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java @@ -30,7 +30,7 @@ import com.google.devtools.build.lib.actions.MetadataProvider; import com.google.devtools.build.lib.actions.RunfilesSupplier; import com.google.devtools.build.lib.actions.Spawn; -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.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.vfs.Path; @@ -48,6 +48,8 @@ * laid out. */ public class SpawnInputExpander { + public static final ActionInput EMPTY_FILE = new EmptyActionInput("/dev/null"); + private final Path execRoot; private final boolean strict; private final RelativeSymlinkBehavior relSymlinkBehavior; @@ -146,7 +148,7 @@ void addRunfilesToInputs( addMapping(inputMap, location, localArtifact); } } else { - addMapping(inputMap, location, VirtualActionInput.EMPTY_MARKER); + addMapping(inputMap, location, EMPTY_FILE); } } } @@ -194,10 +196,10 @@ void addFilesetManifest( for (Map.Entry mapping : filesetManifest.getEntries().entrySet()) { String value = mapping.getValue(); - ActionInput artifact = - value == null - ? VirtualActionInput.EMPTY_MARKER - : ActionInputHelper.fromPath(execRoot.getRelative(value).getPathString()); + ActionInput artifact = + value == null + ? EMPTY_FILE + : ActionInputHelper.fromPath(execRoot.getRelative(value).getPathString()); addMapping(inputMappings, mapping.getKey(), artifact); } } diff --git a/src/test/java/com/google/devtools/build/lib/exec/SpawnInputExpanderTest.java b/src/test/java/com/google/devtools/build/lib/exec/SpawnInputExpanderTest.java index d3cfa3c89a5fdf..f8a2d675f86dd9 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/SpawnInputExpanderTest.java +++ b/src/test/java/com/google/devtools/build/lib/exec/SpawnInputExpanderTest.java @@ -35,7 +35,6 @@ import com.google.devtools.build.lib.actions.FilesetOutputSymlink; import com.google.devtools.build.lib.actions.RunfilesSupplier; import com.google.devtools.build.lib.actions.Spawn; -import com.google.devtools.build.lib.actions.cache.VirtualActionInput; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl; @@ -252,7 +251,7 @@ public void testRunfilesRootSymlink() throws Exception { // directory gets created. assertThat(inputMappings) .containsEntry( - PathFragment.create("runfiles/workspace/.runfile"), VirtualActionInput.EMPTY_MARKER); + PathFragment.create("runfiles/workspace/.runfile"), SpawnInputExpander.EMPTY_FILE); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java index ab3dcdc5c1101f..f4fc6770c8059d 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcherTest.java @@ -36,6 +36,7 @@ import com.google.devtools.build.lib.actions.cache.VirtualActionInput; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.clock.JavaClock; +import com.google.devtools.build.lib.exec.SpawnInputExpander; import com.google.devtools.build.lib.remote.options.RemoteOptions; import com.google.devtools.build.lib.remote.util.DigestUtil; import com.google.devtools.build.lib.remote.util.InMemoryCacheClient; @@ -140,7 +141,7 @@ public void testStagingEmptyVirtualActionInput() throws Exception { // act actionInputFetcher.prefetchFiles( - ImmutableList.of(VirtualActionInput.EMPTY_MARKER), metadataProvider); + ImmutableList.of(SpawnInputExpander.EMPTY_FILE), metadataProvider); // assert that nothing happened assertThat(actionInputFetcher.downloadedFiles()).isEmpty();