Custom-serialize derived artifacts. This allows us to intern them more efficiently.
Also simplify ArtifactFactory handling in SkyframeExecutor: the ArtifactFactory is set at construction time, so there's no need to mess around with suppliers.
PiperOrigin-RevId: 315383662
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index 1349c71..93a23c1 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -24,7 +24,6 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Interner;
import com.google.common.collect.Iterables;
import com.google.common.collect.Streams;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata.MiddlemanType;
@@ -34,7 +33,6 @@
import com.google.devtools.build.lib.cmdline.LabelConstants;
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
@@ -326,10 +324,7 @@
}
/** An artifact corresponding to a file in the output tree, generated by an {@link Action}. */
- @AutoCodec
public static class DerivedArtifact extends Artifact {
- /** Only used for deserializing artifacts. */
- private static final Interner<DerivedArtifact> INTERNER = BlazeInterners.newWeakInterner();
/**
* An {@link ActionLookupKey} until {@link #setGeneratingActionKey} is set, at which point it is
@@ -417,16 +412,48 @@
}
return this.owner.equals(that.owner);
}
+ }
- /**
- * The {@code rootRelativePath is a few characters shorter than the {@code execPath}, so we save
- * a few bytes by serializing it rather than the {@code execPath}, especially when the {@code
- * root} is common to many artifacts and therefore memoized.
- */
- @AutoCodec.VisibleForSerialization
- @AutoCodec.Instantiator
- static DerivedArtifact createForSerialization(
- ArtifactRoot root, PathFragment rootRelativePath, ActionLookupData generatingActionKey) {
+ @SuppressWarnings("unused") // Codec used by reflection.
+ private static class DerivedArtifactCodec implements ObjectCodec<DerivedArtifact> {
+ @Override
+ public Class<DerivedArtifact> getEncodedClass() {
+ return DerivedArtifact.class;
+ }
+
+ @Override
+ public void serialize(
+ SerializationContext context, DerivedArtifact obj, CodedOutputStream codedOut)
+ throws SerializationException, IOException {
+ context.serialize(obj.getRoot(), codedOut);
+ context.serialize(obj.getGeneratingActionKey(), codedOut);
+ context.serialize(obj.getRootRelativePath(), codedOut);
+ }
+
+ @Override
+ public DerivedArtifact deserialize(DeserializationContext context, CodedInputStream codedIn)
+ throws SerializationException, IOException {
+ ArtifactRoot root = context.deserialize(codedIn);
+ ActionLookupData generatingActionKey = context.deserialize(codedIn);
+ DerivedArtifact artifact =
+ new DerivedArtifact(
+ root,
+ validateAndGetRootExecPath(root, generatingActionKey, context, codedIn),
+ generatingActionKey.getActionLookupKey(),
+ /*contentBasedPath=*/ false);
+ artifact.setGeneratingActionKey(generatingActionKey);
+ return context
+ .getDependency(ArtifactResolver.ArtifactResolverSupplier.class)
+ .intern(artifact);
+ }
+
+ static PathFragment validateAndGetRootExecPath(
+ ArtifactRoot root,
+ ActionLookupData generatingActionKey,
+ DeserializationContext context,
+ CodedInputStream codedIn)
+ throws IOException, SerializationException {
+ PathFragment rootRelativePath = context.deserialize(codedIn);
if (rootRelativePath == null
|| rootRelativePath.isAbsolute() != root.getRoot().isAbsolute()) {
throw new IllegalArgumentException(
@@ -439,15 +466,7 @@
}
Preconditions.checkState(
!root.isSourceRoot(), "Root not derived: %s %s", root, rootRelativePath);
- PathFragment rootExecPath = root.getExecPath();
- DerivedArtifact artifact =
- new DerivedArtifact(
- root,
- rootExecPath.getRelative(rootRelativePath),
- generatingActionKey.getActionLookupKey(),
- /*contentBasedPath=*/ false);
- artifact.setGeneratingActionKey(generatingActionKey);
- return INTERNER.intern(artifact);
+ return root.getExecPath().getRelative(rootRelativePath);
}
}
@@ -729,7 +748,6 @@
* having to keep around the attribute for the rest we save some memory.
*/
@Immutable
- @AutoCodec
public static final class SpecialArtifact extends DerivedArtifact {
private final SpecialArtifactType type;
@@ -740,19 +758,6 @@
this.type = type;
}
- @AutoCodec.VisibleForSerialization
- @AutoCodec.Instantiator
- static SpecialArtifact create(
- ArtifactRoot root,
- PathFragment execPath,
- SpecialArtifactType type,
- ActionLookupData generatingActionKey) {
- SpecialArtifact result =
- new SpecialArtifact(root, execPath, generatingActionKey.getActionLookupKey(), type);
- result.setGeneratingActionKey(generatingActionKey);
- return result;
- }
-
@Override
public final boolean isFileset() {
return type == SpecialArtifactType.FILESET;
@@ -796,6 +801,43 @@
}
}
+ // Keep in sync with DerivedArtifactCodec.
+ @SuppressWarnings("unused") // Used by reflection
+ private static class SpecialArtifactCodec implements ObjectCodec<SpecialArtifact> {
+ @Override
+ public Class<SpecialArtifact> getEncodedClass() {
+ return SpecialArtifact.class;
+ }
+
+ @Override
+ public void serialize(
+ SerializationContext context, SpecialArtifact obj, CodedOutputStream codedOut)
+ throws SerializationException, IOException {
+ context.serialize(obj.getRoot(), codedOut);
+ context.serialize(obj.getGeneratingActionKey(), codedOut);
+ context.serialize(obj.type, codedOut);
+ context.serialize(obj.getRootRelativePath(), codedOut);
+ }
+
+ @Override
+ public SpecialArtifact deserialize(DeserializationContext context, CodedInputStream codedIn)
+ throws SerializationException, IOException {
+ ArtifactRoot root = context.deserialize(codedIn);
+ ActionLookupData generatingActionKey = context.deserialize(codedIn);
+ SpecialArtifactType type = context.deserialize(codedIn);
+ SpecialArtifact artifact =
+ new SpecialArtifact(
+ root,
+ DerivedArtifactCodec.validateAndGetRootExecPath(
+ root, generatingActionKey, context, codedIn),
+ generatingActionKey.getActionLookupKey(),
+ type);
+ artifact.setGeneratingActionKey(generatingActionKey);
+ return (SpecialArtifact)
+ context.getDependency(ArtifactResolverSupplier.class).intern(artifact);
+ }
+ }
+
/**
* A special kind of artifact that represents a concrete file created at execution time under its
* associated parent TreeArtifact.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactResolver.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactResolver.java
index 0b02f9c..1d98fc1 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactResolver.java
@@ -82,9 +82,8 @@
Path getPathFromSourceExecPath(Path execRoot, PathFragment execPath);
- /**
- * Supplies an {@link ArtifactFactory}. We define a custom interface because parameterized types
- * are not allowed as dependencies to serialization.
- */
- interface ArtifactResolverSupplier extends Supplier<ArtifactResolver> {}
+ /** Supplies an {@link ArtifactFactory} and allows for interning of derived artifacts. */
+ interface ArtifactResolverSupplier extends Supplier<ArtifactResolver> {
+ Artifact.DerivedArtifact intern(Artifact.DerivedArtifact original);
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java
index b097fe1..e332661 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java
@@ -165,7 +165,8 @@
* <p>Primarily needed by {@link FilesystemValueChecker}. Also called by {@link ArtifactFunction}
* when aggregating a {@link TreeArtifactValue} out of action template expansion outputs.
*/
- ImmutableMap<Artifact, FileArtifactValue> getAllFileValues() {
+ // Visible only for testing: should be package-private.
+ public ImmutableMap<Artifact, FileArtifactValue> getAllFileValues() {
return artifactData;
}
@@ -174,7 +175,8 @@
*
* <p>Should only be needed by {@link FilesystemValueChecker}.
*/
- ImmutableMap<Artifact, TreeArtifactValue> getAllTreeArtifactValues() {
+ // Visible only for testing: should be package-private.
+ public ImmutableMap<Artifact, TreeArtifactValue> getAllTreeArtifactValues() {
return treeArtifactData;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
index 4ed31ee..221e973 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
@@ -14,14 +14,11 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.Actions;
import com.google.devtools.build.lib.actions.Actions.GeneratingActions;
-import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
-import com.google.devtools.build.lib.actions.ArtifactRoot;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
@@ -32,7 +29,6 @@
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.skyframe.BuildInfoCollectionValue.BuildInfoKeyAndConfig;
import com.google.devtools.build.lib.skyframe.PrecomputedValue.Precomputed;
-import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -48,11 +44,9 @@
new Precomputed<>("build_info_factories");
private final ActionKeyContext actionKeyContext;
- // Supplier only because the artifact factory has not yet been created at constructor time.
- private final Supplier<ArtifactFactory> artifactFactory;
+ private final ArtifactFactory artifactFactory;
- BuildInfoCollectionFunction(
- ActionKeyContext actionKeyContext, Supplier<ArtifactFactory> artifactFactory) {
+ BuildInfoCollectionFunction(ActionKeyContext actionKeyContext, ArtifactFactory artifactFactory) {
this.actionKeyContext = actionKeyContext;
this.artifactFactory = artifactFactory;
}
@@ -81,17 +75,11 @@
BuildInfoFactory buildInfoFactory = buildInfoFactories.get(keyAndConfig.getInfoKey());
Preconditions.checkState(buildInfoFactory.isEnabled(config));
- final ArtifactFactory factory = artifactFactory.get();
BuildInfoContext context =
- new BuildInfoContext() {
- @Override
- public Artifact getBuildInfoArtifact(
- PathFragment rootRelativePath, ArtifactRoot root, BuildInfoType type) {
- return type == BuildInfoType.NO_REBUILD
- ? factory.getConstantMetadataArtifact(rootRelativePath, root, keyAndConfig)
- : factory.getDerivedArtifact(rootRelativePath, root, keyAndConfig);
- }
- };
+ (rootRelativePath, root, type) ->
+ type == BuildInfoType.NO_REBUILD
+ ? artifactFactory.getConstantMetadataArtifact(rootRelativePath, root, keyAndConfig)
+ : artifactFactory.getDerivedArtifact(rootRelativePath, root, keyAndConfig);
BuildInfoCollection collection =
buildInfoFactory.create(
context,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index cc42bb1..9a203cb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -174,7 +174,6 @@
ExternalPackageHelper externalPackageHelper,
ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile,
BuildOptions defaultBuildOptions,
- MutableArtifactFactorySupplier mutableArtifactFactorySupplier,
@Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
super(
skyframeExecutorConsumerOnInit,
@@ -195,7 +194,6 @@
GraphInconsistencyReceiver.THROWING,
defaultBuildOptions,
new PackageProgressReceiver(),
- mutableArtifactFactorySupplier,
new ConfiguredTargetProgressReceiver(),
/*nonexistentFileReceiver=*/ null,
managedDirectoriesKnowledge);
@@ -1072,8 +1070,6 @@
private Factory workspaceStatusActionFactory;
private Iterable<? extends DiffAwareness.Factory> diffAwarenessFactories = ImmutableList.of();
private Iterable<SkyValueDirtinessChecker> customDirtinessCheckers = ImmutableList.of();
- private MutableArtifactFactorySupplier mutableArtifactFactorySupplier =
- new MutableArtifactFactorySupplier();
private Consumer<SkyframeExecutor> skyframeExecutorConsumerOnInit = skyframeExecutor -> {};
private SkyFunction blacklistedPackagePrefixesFunction;
@@ -1110,7 +1106,6 @@
externalPackageHelper,
actionOnIOExceptionReadingBuildFile,
defaultBuildOptions,
- mutableArtifactFactorySupplier,
managedDirectoriesKnowledge);
skyframeExecutor.init();
return skyframeExecutor;
@@ -1192,11 +1187,6 @@
return this;
}
- public Builder setMutableArtifactFactorySupplier(
- MutableArtifactFactorySupplier mutableArtifactFactorySupplier) {
- this.mutableArtifactFactorySupplier = mutableArtifactFactorySupplier;
- return this;
- }
public Builder setSkyframeExecutorConsumerOnInit(
Consumer<SkyframeExecutor> skyframeExecutorConsumerOnInit) {
this.skyframeExecutorConsumerOnInit = skyframeExecutorConsumerOnInit;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 3554a28..0a6a05a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -51,7 +51,6 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
import com.google.devtools.build.lib.actions.ArtifactPathResolver;
-import com.google.devtools.build.lib.actions.ArtifactResolver.ArtifactResolverSupplier;
import com.google.devtools.build.lib.actions.ArtifactRoot;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.CompletionContext.PathResolverFactory;
@@ -297,10 +296,7 @@
protected final AtomicReference<TimestampGranularityMonitor> tsgm = new AtomicReference<>();
protected final AtomicReference<Map<String, String>> clientEnv = new AtomicReference<>();
- // Under normal circumstances, the artifact factory persists for the life of a Blaze server, but
- // since it is not yet created when we create the value builders, we have to use a supplier,
- // initialized when the build view is created.
- private final MutableArtifactFactorySupplier artifactFactory;
+ private final ArtifactFactory artifactFactory;
private final ActionKeyContext actionKeyContext;
protected boolean active = true;
@@ -354,21 +350,6 @@
private boolean siblingRepositoryLayout = false;
- /** An {@link ArtifactResolverSupplier} that supports setting of an {@link ArtifactFactory}. */
- public static class MutableArtifactFactorySupplier implements ArtifactResolverSupplier {
-
- private ArtifactFactory artifactFactory;
-
- void set(ArtifactFactory artifactFactory) {
- this.artifactFactory = artifactFactory;
- }
-
- @Override
- public ArtifactFactory get() {
- return artifactFactory;
- }
- }
-
class PathResolverFactoryImpl implements PathResolverFactory {
@Override
public boolean shouldCreatePathResolverForArtifactValues() {
@@ -413,7 +394,6 @@
GraphInconsistencyReceiver graphInconsistencyReceiver,
BuildOptions defaultBuildOptions,
@Nullable PackageProgressReceiver packageProgress,
- MutableArtifactFactorySupplier artifactResolverSupplier,
@Nullable ConfiguredTargetProgressReceiver configuredTargetProgress,
@Nullable NonexistentFileReceiver nonexistentFileReceiver,
@Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
@@ -448,8 +428,7 @@
new SkyframeActionExecutor(actionKeyContext, statusReporterRef, this::getPathEntries);
this.skyframeBuildView =
new SkyframeBuildView(directories, this, ruleClassProvider, actionKeyContext);
- this.artifactFactory = artifactResolverSupplier;
- this.artifactFactory.set(skyframeBuildView.getArtifactFactory());
+ this.artifactFactory = skyframeBuildView.getArtifactFactory();
this.externalFilesHelper =
ExternalFilesHelper.create(
pkgLocator,
@@ -602,7 +581,7 @@
() -> !skyframeActionExecutor.actionFileSystemType().inMemoryFileSystem()));
map.put(
SkyFunctions.BUILD_INFO_COLLECTION,
- new BuildInfoCollectionFunction(actionKeyContext, artifactFactory::get));
+ new BuildInfoCollectionFunction(actionKeyContext, artifactFactory));
map.put(SkyFunctions.BUILD_INFO, new WorkspaceStatusFunction(this::makeWorkspaceStatusAction));
map.put(SkyFunctions.COVERAGE_REPORT, new CoverageReportFunction(actionKeyContext));
ActionExecutionFunction actionExecutionFunction =
@@ -1120,11 +1099,6 @@
}
@VisibleForTesting
- public ArtifactResolverSupplier getArtifactResolverSupplierForTesting() {
- return artifactFactory;
- }
-
- @VisibleForTesting
@Nullable
public WorkspaceStatusAction getLastWorkspaceStatusAction() throws InterruptedException {
WorkspaceStatusValue workspaceStatusValue =
@@ -1430,7 +1404,7 @@
private void setSiblingDirectoryLayout(boolean experimentalSiblingRepositoryLayout) {
this.siblingRepositoryLayout = experimentalSiblingRepositoryLayout;
- this.artifactFactory.get().setSiblingRepositoryLayout(experimentalSiblingRepositoryLayout);
+ this.artifactFactory.setSiblingRepositoryLayout(experimentalSiblingRepositoryLayout);
}
public StarlarkSemantics getEffectiveStarlarkSemantics(
@@ -1453,7 +1427,6 @@
// (Some of the additional steps are carried out by ConfiguredTargetValueInvalidationListener,
// and some by BuildView#buildHasIncompatiblePackageRoots and #updateSkyframe.)
artifactFactory
- .get()
.setSourceArtifactRoots(
createSourceArtifactRootMapOnNewPkgLocator(oldLocator, pkgLocator));
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorWrappingWalkableGraph.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorWrappingWalkableGraph.java
index 43646cc..086f5ff 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorWrappingWalkableGraph.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorWrappingWalkableGraph.java
@@ -34,7 +34,7 @@
@Override
public NodeEntry get(@Nullable SkyKey requestor, Reason reason, SkyKey key)
throws InterruptedException {
- return evaluator.getExistingEntryAtLatestVersion(key);
+ return evaluator.getExistingEntryAtCurrentlyEvaluatingVersion(key);
}
@Override
@@ -50,7 +50,6 @@
}
return result;
}
-
});
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java
index 8f50010..5d829b9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java
@@ -73,5 +73,10 @@
}
};
}
+
+ @Override
+ public Artifact.DerivedArtifact intern(Artifact.DerivedArtifact original) {
+ return original;
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
index ec773ce..c7c9046 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
@@ -311,7 +311,7 @@
@Override
@Nullable
public SkyValue getExistingValue(SkyKey key) {
- NodeEntry entry = getExistingEntryAtLatestVersion(key);
+ NodeEntry entry = getExistingEntryAtCurrentlyEvaluatingVersion(key);
try {
return isDone(entry) ? entry.getValue() : null;
} catch (InterruptedException e) {
@@ -321,7 +321,7 @@
@Override
@Nullable public ErrorInfo getExistingErrorForTesting(SkyKey key) {
- NodeEntry entry = getExistingEntryAtLatestVersion(key);
+ NodeEntry entry = getExistingEntryAtCurrentlyEvaluatingVersion(key);
try {
return isDone(entry) ? entry.getErrorInfo() : null;
} catch (InterruptedException e) {
@@ -331,7 +331,7 @@
@Nullable
@Override
- public NodeEntry getExistingEntryAtLatestVersion(SkyKey key) {
+ public NodeEntry getExistingEntryAtCurrentlyEvaluatingVersion(SkyKey key) {
return graph.get(null, Reason.OTHER, key);
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
index 3c9cf9b..f0a9beb 100644
--- a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
@@ -130,7 +130,7 @@
SkyValue getExistingValue(SkyKey key) throws InterruptedException;
@Nullable
- NodeEntry getExistingEntryAtLatestVersion(SkyKey key) throws InterruptedException;
+ NodeEntry getExistingEntryAtCurrentlyEvaluatingVersion(SkyKey key) throws InterruptedException;
/**
* Returns an error if and only if an earlier call to {@link #evaluate} created it; null
diff --git a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
index 3f23573..188743a 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
@@ -80,6 +80,6 @@
@Nullable
@Override
public NodeEntry getEntryForTesting(SkyKey key) throws InterruptedException {
- return memoizingEvaluator.getExistingEntryAtLatestVersion(key);
+ return memoizingEvaluator.getExistingEntryAtCurrentlyEvaluatingVersion(key);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
index 070896f..bdf925b 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
@@ -32,6 +32,7 @@
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationDepsUtils;
import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.Scratch;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -261,6 +262,7 @@
.addDependency(FileSystem.class, scratch.getFileSystem())
.addDependency(
Root.RootCodecDependencies.class, new Root.RootCodecDependencies(anotherRoot.getRoot()))
+ .addDependencies(SerializationDepsUtils.SERIALIZATION_DEPS_FOR_TEST)
.runTests();
}
@@ -271,7 +273,18 @@
ArtifactFactory artifactFactory =
new ArtifactFactory(execDir.getParentDirectory(), "blaze-out");
artifactFactory.setSourceArtifactRoots(ImmutableMap.of(root, artifactRoot));
- ArtifactResolverSupplier artifactResolverSupplierForTest = () -> artifactFactory;
+ ArtifactResolverSupplier artifactResolverSupplierForTest =
+ new ArtifactResolverSupplier() {
+ @Override
+ public Artifact.DerivedArtifact intern(Artifact.DerivedArtifact original) {
+ return original;
+ }
+
+ @Override
+ public ArtifactResolver get() {
+ return artifactFactory;
+ }
+ };
ObjectCodecs objectCodecs =
new ObjectCodecs(
diff --git a/src/test/java/com/google/devtools/build/lib/actions/BUILD b/src/test/java/com/google/devtools/build/lib/actions/BUILD
index 45c7186..6c94a2c 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/actions/BUILD
@@ -43,6 +43,7 @@
"//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:depsutils",
"//src/main/java/com/google/devtools/build/lib/syntax:evaluator",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:string",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java b/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java
index 8c9c672..e1df4a8 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ExecutableSymlinkActionTest.java
@@ -25,6 +25,7 @@
import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSetExpander;
import com.google.devtools.build.lib.exec.SingleBuildFileCache;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationDepsUtils;
import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.Scratch;
import com.google.devtools.build.lib.testutil.TestFileOutErr;
@@ -144,6 +145,7 @@
.addDependency(
Root.RootCodecDependencies.class,
new Root.RootCodecDependencies(Root.absoluteRoot(scratch.getFileSystem())))
+ .addDependencies(SerializationDepsUtils.SERIALIZATION_DEPS_FOR_TEST)
.setVerificationFunction(
(in, out) -> {
SymlinkAction inAction = (SymlinkAction) in;
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcBinaryThinLtoTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcBinaryThinLtoTest.java
index 8c7313f..194eeb1 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcBinaryThinLtoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcBinaryThinLtoTest.java
@@ -189,7 +189,7 @@
(ConfiguredTargetValue)
getSkyframeExecutor()
.getEvaluatorForTesting()
- .getExistingEntryAtLatestVersion(
+ .getExistingEntryAtCurrentlyEvaluatingVersion(
ConfiguredTargetKey.builder()
.setLabel(pkg.getLabel())
.setConfiguration(getConfiguration(pkg))
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
index 67924f1..d542c52 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
@@ -45,6 +45,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.events.NullEventHandler;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationDepsUtils;
import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.FileStatus;
@@ -343,6 +344,7 @@
.addDependency(
Root.RootCodecDependencies.class,
new Root.RootCodecDependencies(Root.absoluteRoot(root.getFileSystem())))
+ .addDependencies(SerializationDepsUtils.SERIALIZATION_DEPS_FOR_TEST)
.runTests();
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index cf471d2..eb983c6 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -233,6 +233,7 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:depsutils",
"//src/main/java/net/starlark/java/annot",
"//src/main/java/com/google/devtools/build/lib/util",
"//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
index 70ceece..1ee43a4 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
@@ -54,6 +54,7 @@
import com.google.devtools.build.lib.events.EventCollector;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue.ActionTemplateExpansionKey;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationDepsUtils;
import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.TestUtils;
import com.google.devtools.build.lib.util.CrashFailureDetails;
@@ -89,6 +90,7 @@
.addDependency(
Root.RootCodecDependencies.class,
new Root.RootCodecDependencies(Root.absoluteRoot(scratch.getFileSystem())))
+ .addDependencies(SerializationDepsUtils.SERIALIZATION_DEPS_FOR_TEST)
.runTests();
}