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 1349c710b53994..93a23c188d9a2f 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 @@ public boolean hasKnownGeneratingAction() { } /** 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 INTERNER = BlazeInterners.newWeakInterner(); /** * An {@link ActionLookupKey} until {@link #setGeneratingActionKey} is set, at which point it is @@ -417,16 +412,48 @@ boolean ownersEqual(Artifact other) { } 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 { + @Override + public Class 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 @@ static DerivedArtifact createForSerialization( } 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 @@ public enum SpecialArtifactType { * 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 @@ public SpecialArtifact( 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 @@ public ShareabilityOfValue getShareabilityOfValue() { } } + // Keep in sync with DerivedArtifactCodec. + @SuppressWarnings("unused") // Used by reflection + private static class SpecialArtifactCodec implements ObjectCodec { + @Override + public Class 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 0b02f9cd5561b4..1d98fc1f182f2e 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 @@ Map resolveSourceArtifacts( 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 {} + /** Supplies an {@link ArtifactFactory} and allows for interning of derived artifacts. */ + interface ArtifactResolverSupplier extends Supplier { + 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 b097fe1ec55f02..e3326618722c81 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 @@ TreeArtifactValue getTreeArtifactValue(Artifact artifact) { *

Primarily needed by {@link FilesystemValueChecker}. Also called by {@link ArtifactFunction} * when aggregating a {@link TreeArtifactValue} out of action template expansion outputs. */ - ImmutableMap getAllFileValues() { + // Visible only for testing: should be package-private. + public ImmutableMap getAllFileValues() { return artifactData; } @@ -174,7 +175,8 @@ ImmutableMap getAllFileValues() { * *

Should only be needed by {@link FilesystemValueChecker}. */ - ImmutableMap getAllTreeArtifactValues() { + // Visible only for testing: should be package-private. + public ImmutableMap 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 4ed31eecc8d1c2..221e973148b066 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 @@ public class BuildInfoCollectionFunction implements SkyFunction { 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; + private final ArtifactFactory artifactFactory; - BuildInfoCollectionFunction( - ActionKeyContext actionKeyContext, Supplier artifactFactory) { + BuildInfoCollectionFunction(ActionKeyContext actionKeyContext, ArtifactFactory artifactFactory) { this.actionKeyContext = actionKeyContext; this.artifactFactory = artifactFactory; } @@ -81,17 +75,11 @@ public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedExcept 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 cc42bb15c5287b..9a203cb82461be 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 @@ private SequencedSkyframeExecutor( ExternalPackageHelper externalPackageHelper, ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile, BuildOptions defaultBuildOptions, - MutableArtifactFactorySupplier mutableArtifactFactorySupplier, @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) { super( skyframeExecutorConsumerOnInit, @@ -195,7 +194,6 @@ private SequencedSkyframeExecutor( GraphInconsistencyReceiver.THROWING, defaultBuildOptions, new PackageProgressReceiver(), - mutableArtifactFactorySupplier, new ConfiguredTargetProgressReceiver(), /*nonexistentFileReceiver=*/ null, managedDirectoriesKnowledge); @@ -1072,8 +1070,6 @@ public static final class Builder { private Factory workspaceStatusActionFactory; private Iterable diffAwarenessFactories = ImmutableList.of(); private Iterable customDirtinessCheckers = ImmutableList.of(); - private MutableArtifactFactorySupplier mutableArtifactFactorySupplier = - new MutableArtifactFactorySupplier(); private Consumer skyframeExecutorConsumerOnInit = skyframeExecutor -> {}; private SkyFunction blacklistedPackagePrefixesFunction; @@ -1110,7 +1106,6 @@ public SequencedSkyframeExecutor build() { externalPackageHelper, actionOnIOExceptionReadingBuildFile, defaultBuildOptions, - mutableArtifactFactorySupplier, managedDirectoriesKnowledge); skyframeExecutor.init(); return skyframeExecutor; @@ -1192,11 +1187,6 @@ public Builder setActionOnIOExceptionReadingBuildFile( return this; } - public Builder setMutableArtifactFactorySupplier( - MutableArtifactFactorySupplier mutableArtifactFactorySupplier) { - this.mutableArtifactFactorySupplier = mutableArtifactFactorySupplier; - return this; - } public Builder setSkyframeExecutorConsumerOnInit( Consumer 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 3554a28fa65bc3..0a6a05aad2e75b 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 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory, Configur protected final AtomicReference tsgm = new AtomicReference<>(); protected final AtomicReference> 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 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory, Configur 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 @@ protected SkyframeExecutor( GraphInconsistencyReceiver graphInconsistencyReceiver, BuildOptions defaultBuildOptions, @Nullable PackageProgressReceiver packageProgress, - MutableArtifactFactorySupplier artifactResolverSupplier, @Nullable ConfiguredTargetProgressReceiver configuredTargetProgress, @Nullable NonexistentFileReceiver nonexistentFileReceiver, @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) { @@ -448,8 +428,7 @@ protected SkyframeExecutor( 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 @@ private ImmutableMap skyFunctions(PackageFactory p () -> !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 = @@ -1119,11 +1098,6 @@ public Artifact createVolatileArtifact(String name) { return workspaceStatusActionFactory.createWorkspaceStatusAction(env); } - @VisibleForTesting - public ArtifactResolverSupplier getArtifactResolverSupplierForTesting() { - return artifactFactory; - } - @VisibleForTesting @Nullable public WorkspaceStatusAction getLastWorkspaceStatusAction() throws InterruptedException { @@ -1430,7 +1404,7 @@ public void preparePackageLoading( private void setSiblingDirectoryLayout(boolean experimentalSiblingRepositoryLayout) { this.siblingRepositoryLayout = experimentalSiblingRepositoryLayout; - this.artifactFactory.get().setSiblingRepositoryLayout(experimentalSiblingRepositoryLayout); + this.artifactFactory.setSiblingRepositoryLayout(experimentalSiblingRepositoryLayout); } public StarlarkSemantics getEffectiveStarlarkSemantics( @@ -1453,7 +1427,6 @@ private void setPackageLocator(PathPackageLocator pkgLocator) { // (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 43646cca8e1fc6..086f5ff556cce5 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 @@ private SkyframeExecutorWrappingWalkableGraph(MemoizingEvaluator evaluator) { @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 @@ public NodeEntry get(@Nullable SkyKey requestor, Reason reason, SkyKey key) } 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 8f500104edd7cc..5d829b9ea41876 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 @@ public Path getPathFromSourceExecPath(Path execRoot, PathFragment execPath) { } }; } + + @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 ec773cea215e9a..c7c90468faa0e0 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 @@ private static boolean isDone(@Nullable NodeEntry entry) { @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 @@ public SkyValue getExistingValue(SkyKey key) { @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 @@ public SkyValue getExistingValue(SkyKey key) { @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 3c9cf9b780b50d..f0a9bebd160bef 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 @@ default void postLoggingStats(ExtendedEventHandler eventHandler) {} 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 3f23573b2e4ca8..188743a8d6f2d3 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 @@ public ErrorInfo getExistingErrorForTesting(SkyKey key) throws InterruptedExcept @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 070896f4e19a6c..bdf925bb1a547a 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 @@ public void testCodec() throws Exception { .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 @@ public void testCodecRecyclesSourceArtifactInstances() throws Exception { 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 45c7186a1821cd..6c94a2c6c5623e 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 @@ java_library( "//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 8c9c672ee53659..e1df4a8a10677a 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 @@ public void testCodec() throws Exception { .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 8c7313fb1d2d91..194eeb1b82c459 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 @@ public void testActionGraph() throws Exception { (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 67924f13a7382b..d542c521e9e574 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 @@ public void actionExecutionValueSerialization() throws Exception { .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 cf471d2bf16a85..eb983c6545b4ca 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 @@ java_test( "//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 70ceeceb1678e2..1ee43a4da5176e 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 @@ public void codec() throws Exception { .addDependency( Root.RootCodecDependencies.class, new Root.RootCodecDependencies(Root.absoluteRoot(scratch.getFileSystem()))) + .addDependencies(SerializationDepsUtils.SERIALIZATION_DEPS_FOR_TEST) .runTests(); }