Remove ConfiguredTarget from TargetCompletionValue, since it is no longer needed: we can get the ConfiguredTargetKey directly from the TargetCompletionKey. Since that was the only use of the actual value in EvaluationProgressReceiver#evaluated, remove it, instead just provide a boolean enum that gives whether or not evaluation succeeded.
PiperOrigin-RevId: 199178047
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java
index 644f34e..b0447fd 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java
@@ -13,17 +13,14 @@
// limitations under the License.
package com.google.devtools.build.lib.buildtool;
-import com.google.common.base.Supplier;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata.MiddlemanType;
import com.google.devtools.build.lib.actions.ActionExecutionStatusReporter;
import com.google.devtools.build.lib.actions.ActionLookupData;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.clock.BlazeClock;
import com.google.devtools.build.lib.skyframe.ActionExecutionInactivityWatchdog;
import com.google.devtools.build.lib.skyframe.AspectCompletionValue;
-import com.google.devtools.build.lib.skyframe.AspectCompletionValue.AspectCompletionKey;
import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
@@ -32,12 +29,12 @@
import com.google.devtools.build.skyframe.EvaluationProgressReceiver;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
import java.text.NumberFormat;
import java.util.Collections;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Supplier;
/**
* Listener for executed actions and built artifacts. We use a listener so that we have an
@@ -101,22 +98,20 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> skyValueSupplier, EvaluationState state) {
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
SkyFunctionName type = skyKey.functionName();
if (type.equals(SkyFunctions.TARGET_COMPLETION)) {
- TargetCompletionValue value = (TargetCompletionValue) skyValueSupplier.get();
- if (value == null) {
- return;
+ if (evaluationSuccessState.get().succeeded()) {
+ builtTargets.add(
+ ((TargetCompletionValue.TargetCompletionKey) skyKey).configuredTargetKey());
}
- ConfiguredTarget target = value.getConfiguredTarget();
- builtTargets.add(ConfiguredTargetKey.inTargetConfig(target));
} else if (type.equals(SkyFunctions.ASPECT_COMPLETION)) {
- AspectCompletionValue value = (AspectCompletionValue) skyValueSupplier.get();
- if (value == null) {
- return;
+ if (evaluationSuccessState.get().succeeded()) {
+ builtAspects.add(((AspectCompletionValue.AspectCompletionKey) skyKey).aspectKey());
}
- AspectKey aspectKey = ((AspectCompletionKey) skyKey).aspectKey();
- builtAspects.add(aspectKey);
} else if (type.equals(SkyFunctions.ACTION_EXECUTION)) {
// Remember all completed actions, even those in error, regardless of having been cached or
// really executed.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
index 83e8799..de70aa1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
@@ -79,10 +79,8 @@
MissingInputFileException getMissingFilesException(
TValue value, int missingCount, Environment env) throws InterruptedException;
- /**
- * Creates a successful completion value.
- */
- TResult createResult(TValue value);
+ /** Provides a successful completion value. */
+ TResult getResult();
/** Creates a failed completion value. */
ExtendedEventHandler.Postable createFailed(
@@ -157,8 +155,8 @@
}
@Override
- public TargetCompletionValue createResult(ConfiguredTargetValue value) {
- return new TargetCompletionValue(value.getConfiguredTarget());
+ public TargetCompletionValue getResult() {
+ return TargetCompletionValue.INSTANCE;
}
@Override
@@ -251,7 +249,7 @@
}
@Override
- public AspectCompletionValue createResult(AspectValue value) {
+ public AspectCompletionValue getResult() {
return AspectCompletionValue.INSTANCE;
}
@@ -369,7 +367,7 @@
return null;
}
env.getListener().post(postable);
- return completor.createResult(value);
+ return completor.getResult();
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index c4491ff..fefb8fb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -15,7 +15,6 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -75,12 +74,12 @@
import com.google.devtools.build.skyframe.EvaluationResult;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
/**
@@ -675,12 +674,14 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> skyValueSupplier,
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
EvaluationState state) {
if (skyKey.functionName().equals(SkyFunctions.CONFIGURED_TARGET)) {
switch (state) {
case BUILT:
- if (skyValueSupplier.get() != null) {
+ if (evaluationSuccessState.get().succeeded()) {
evaluatedConfiguredTargets.add(skyKey);
// During multithreaded operation, this is only set to true, so no concurrency issues.
someConfiguredTargetEvaluated = true;
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 c424bd4..c0bb404 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
@@ -21,7 +21,6 @@
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.base.Stopwatch;
-import com.google.common.base.Supplier;
import com.google.common.base.Throwables;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
@@ -179,6 +178,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BooleanSupplier;
+import java.util.function.Supplier;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -1319,7 +1319,7 @@
try {
progressReceiver.executionProgressReceiver = executionProgressReceiver;
Iterable<SkyKey> artifactKeys = ArtifactSkyKey.mandatoryKeys(artifactsToBuild);
- Iterable<SkyKey> targetKeys =
+ Iterable<TargetCompletionValue.TargetCompletionKey> targetKeys =
TargetCompletionValue.keys(targetsToBuild, topLevelArtifactContext, targetsToTest);
Iterable<SkyKey> aspectKeys = AspectCompletionValue.keys(aspects, topLevelArtifactContext);
Iterable<SkyKey> testKeys =
@@ -2320,13 +2320,16 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> valueSupplier, EvaluationState state) {
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
if (ignoreInvalidations) {
return;
}
- skyframeBuildView.getProgressReceiver().evaluated(skyKey, valueSupplier, state);
+ skyframeBuildView.getProgressReceiver().evaluated(skyKey, evaluationSuccessState, state);
if (executionProgressReceiver != null) {
- executionProgressReceiver.evaluated(skyKey, valueSupplier, state);
+ executionProgressReceiver.evaluated(skyKey, evaluationSuccessState, state);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java
index f15e6fb..dbbb6a7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java
@@ -28,24 +28,18 @@
* The value of a TargetCompletion. Currently this just stores a ConfiguredTarget.
*/
public class TargetCompletionValue implements SkyValue {
- private final ConfiguredTarget ct;
+ @AutoCodec static final TargetCompletionValue INSTANCE = new TargetCompletionValue();
- TargetCompletionValue(ConfiguredTarget ct) {
- this.ct = ct;
- }
+ private TargetCompletionValue() {}
- public ConfiguredTarget getConfiguredTarget() {
- return ct;
- }
-
- public static SkyKey key(
+ public static TargetCompletionKey key(
ConfiguredTargetKey configuredTargetKey,
TopLevelArtifactContext topLevelArtifactContext,
boolean willTest) {
return TargetCompletionKey.create(configuredTargetKey, topLevelArtifactContext, willTest);
}
- public static Iterable<SkyKey> keys(
+ public static Iterable<TargetCompletionKey> keys(
Collection<ConfiguredTarget> targets,
final TopLevelArtifactContext ctx,
final Set<ConfiguredTarget> targetsToTest) {
@@ -63,7 +57,7 @@
/** {@link SkyKey} for {@link TargetCompletionValue}. */
@AutoCodec
@AutoValue
- abstract static class TargetCompletionKey implements SkyKey {
+ public abstract static class TargetCompletionKey implements SkyKey {
@AutoCodec.Instantiator
static TargetCompletionKey create(
ConfiguredTargetKey configuredTargetKey,
@@ -78,9 +72,10 @@
return SkyFunctions.TARGET_COMPLETION;
}
- abstract ConfiguredTargetKey configuredTargetKey();
+ public abstract ConfiguredTargetKey configuredTargetKey();
- public abstract TopLevelArtifactContext topLevelArtifactContext();
- public abstract boolean willTest();
+ abstract TopLevelArtifactContext topLevelArtifactContext();
+
+ abstract boolean willTest();
}
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/AbstractExceptionalParallelEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/AbstractExceptionalParallelEvaluator.java
index 43068fe..7771d83 100644
--- a/src/main/java/com/google/devtools/build/skyframe/AbstractExceptionalParallelEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/AbstractExceptionalParallelEvaluator.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -25,6 +24,7 @@
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.util.GroupedList;
import com.google.devtools.build.skyframe.EvaluationProgressReceiver.EvaluationState;
+import com.google.devtools.build.skyframe.EvaluationProgressReceiver.EvaluationSuccessState;
import com.google.devtools.build.skyframe.MemoizingEvaluator.EmittedEventState;
import com.google.devtools.build.skyframe.NodeEntry.DependencyState;
import com.google.devtools.build.skyframe.QueryableGraph.Reason;
@@ -156,7 +156,9 @@
.getProgressReceiver()
.evaluated(
key,
- Suppliers.ofInstance(value),
+ value != null
+ ? EvaluationSuccessState.SUCCESS.supplier()
+ : EvaluationSuccessState.FAILURE.supplier(),
valueVersion.equals(evaluatorContext.getGraphVersion())
? EvaluationState.BUILT
: EvaluationState.CLEAN);
diff --git a/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java
index 5cb810f..2373959 100644
--- a/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java
@@ -286,7 +286,7 @@
// Tell the receiver that the value was not actually changed this run.
evaluatorContext
.getProgressReceiver()
- .evaluated(skyKey, new SkyValueSupplier(state), EvaluationState.CLEAN);
+ .evaluated(skyKey, new EvaluationSuccessStateSupplier(state), EvaluationState.CLEAN);
if (!evaluatorContext.keepGoing() && state.getErrorInfo() != null) {
if (!evaluatorContext.getVisitor().preventNewEvaluations()) {
return DirtyOutcome.ALREADY_PROCESSED;
diff --git a/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java b/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java
index 894df66..9f54ca0 100644
--- a/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java
@@ -13,8 +13,8 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
+import java.util.function.Supplier;
/**
* An {@link EvaluationProgressReceiver} that delegates to a bunch of other
@@ -61,9 +61,12 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> valueSupplier, EvaluationState state) {
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
for (EvaluationProgressReceiver receiver : receivers) {
- receiver.evaluated(skyKey, valueSupplier, state);
+ receiver.evaluated(skyKey, evaluationSuccessState, state);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java b/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java
index 22f9dfb..820fb51 100644
--- a/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java
@@ -13,10 +13,10 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import java.util.Set;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
/**
@@ -106,10 +106,12 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> valueSupplier,
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
EvaluationState state) {
if (progressReceiver != null) {
- progressReceiver.evaluated(skyKey, valueSupplier, state);
+ progressReceiver.evaluated(skyKey, evaluationSuccessState, state);
}
// This key was either built or marked clean, so we can remove it from both the dirty and
diff --git a/src/main/java/com/google/devtools/build/skyframe/EvaluationProgressReceiver.java b/src/main/java/com/google/devtools/build/skyframe/EvaluationProgressReceiver.java
index 2844ec4..d93812b 100644
--- a/src/main/java/com/google/devtools/build/skyframe/EvaluationProgressReceiver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/EvaluationProgressReceiver.java
@@ -13,8 +13,8 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
-import com.google.common.base.Supplier;
import com.google.devtools.build.lib.concurrent.ThreadSafety;
+import java.util.function.Supplier;
/** Receiver for various stages of the lifetime of a skyframe node evaluation. */
@ThreadSafety.ThreadSafe
@@ -29,6 +29,26 @@
CLEAN,
}
+ /** Whether or not evaluation of this node succeeded. */
+ enum EvaluationSuccessState {
+ SUCCESS(true),
+ FAILURE(false);
+
+ EvaluationSuccessState(boolean succeeded) {
+ this.succeeded = succeeded;
+ }
+
+ private final boolean succeeded;
+
+ public boolean succeeded() {
+ return succeeded;
+ }
+
+ public Supplier<EvaluationSuccessState> supplier() {
+ return () -> this;
+ }
+ }
+
/**
* New state of the value entry after invalidation.
*/
@@ -97,10 +117,13 @@
*
* <p>{@code state} indicates the new state of the node.
*
- * <p>If the value builder threw an error when building this node, then
- * {@code valueSupplier.get()} evaluates to null.
+ * <p>If the value builder threw an error when building this node, then {@code
+ * valueSupplier.get()} evaluates to null.
*/
- void evaluated(SkyKey skyKey, Supplier<SkyValue> valueSupplier, EvaluationState state);
+ void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state);
/** An {@link EvaluationProgressReceiver} that does nothing. */
class NullEvaluationProgressReceiver implements EvaluationProgressReceiver {
@@ -121,7 +144,9 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> valueSupplier, EvaluationState state) {
- }
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {}
}
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyValueSupplier.java b/src/main/java/com/google/devtools/build/skyframe/EvaluationSuccessStateSupplier.java
similarity index 67%
rename from src/main/java/com/google/devtools/build/skyframe/SkyValueSupplier.java
rename to src/main/java/com/google/devtools/build/skyframe/EvaluationSuccessStateSupplier.java
index d05dbd7..f4c320c 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyValueSupplier.java
+++ b/src/main/java/com/google/devtools/build/skyframe/EvaluationSuccessStateSupplier.java
@@ -14,22 +14,25 @@
package com.google.devtools.build.skyframe;
import com.google.common.base.Supplier;
+import com.google.devtools.build.skyframe.EvaluationProgressReceiver.EvaluationSuccessState;
/**
- * Supplier of {@link SkyValue} that crashes if its contained {@link NodeEntry} throws an {@link
- * InterruptedException} on value retrieval.
+ * Supplier of {@link EvaluationSuccessState} that crashes if its contained {@link NodeEntry} throws
+ * an {@link InterruptedException} on value retrieval.
*/
-class SkyValueSupplier implements Supplier<SkyValue> {
+class EvaluationSuccessStateSupplier implements Supplier<EvaluationSuccessState> {
private final NodeEntry state;
- SkyValueSupplier(NodeEntry state) {
+ EvaluationSuccessStateSupplier(NodeEntry state) {
this.state = state;
}
@Override
- public SkyValue get() {
+ public EvaluationSuccessState get() {
try {
- return state.getValue();
+ return state.getValue() != null
+ ? EvaluationSuccessState.SUCCESS
+ : EvaluationSuccessState.FAILURE;
} catch (InterruptedException e) {
throw new IllegalStateException(
"Graph implementations in which value retrieval can block should not be used in "
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
index 905e822..67b7176 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
@@ -562,7 +562,7 @@
.getProgressReceiver()
.evaluated(
skyKey,
- new SkyValueSupplier(primaryEntry),
+ new EvaluationSuccessStateSupplier(primaryEntry),
valueVersion.equals(evaluatorContext.getGraphVersion())
? EvaluationState.BUILT
: EvaluationState.CLEAN);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index 7dc9f95..6e62d1a 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -23,7 +23,6 @@
import static com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactoryForTesting.symlinkToFileForTesting;
import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
@@ -73,6 +72,7 @@
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Test;
@@ -326,7 +326,7 @@
private static final class RecordingEvaluationProgressReceiver
extends EvaluationProgressReceiver.NullEvaluationProgressReceiver {
Set<SkyKey> invalidations;
- Set<SkyValue> evaluations;
+ Set<SkyKey> evaluations;
RecordingEvaluationProgressReceiver() {
clear();
@@ -344,10 +344,11 @@
@Override
public void evaluated(
- SkyKey skyKey, Supplier<SkyValue> skyValueSupplier, EvaluationState state) {
- SkyValue value = skyValueSupplier.get();
- if (value != null) {
- evaluations.add(value);
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
+ if (evaluationSuccessState.get().succeeded()) {
+ evaluations.add(skyKey);
}
}
}
@@ -382,14 +383,14 @@
ResolvedFile expected = regularFileForTesting(rootedPath);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(traversalRoot, expected);
assertThat(progressReceiver.invalidations).isEmpty();
- assertThat(progressReceiver.evaluations).contains(v1);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
progressReceiver.clear();
// Edit the file and verify that the value is rebuilt.
appendToFile(rootArtifact, "bar");
RecursiveFilesystemTraversalValue v2 = traverseAndAssertFiles(traversalRoot, expected);
assertThat(progressReceiver.invalidations).contains(traversalRoot);
- assertThat(progressReceiver.evaluations).contains(v2);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
assertThat(v2).isNotEqualTo(v1);
assertTraversalRootHashesAreNotEqual(v1, v2);
@@ -422,14 +423,14 @@
ResolvedFile expected = symlinkToFileForTesting(symlinkTargetPath, symlinkNamePath, linkValue);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(traversalRoot, expected);
assertThat(progressReceiver.invalidations).isEmpty();
- assertThat(progressReceiver.evaluations).contains(v1);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
progressReceiver.clear();
// Edit the target of the symlink and verify that the value is rebuilt.
appendToFile(linkTargetArtifact, "bar");
RecursiveFilesystemTraversalValue v2 = traverseAndAssertFiles(traversalRoot, expected);
assertThat(progressReceiver.invalidations).contains(traversalRoot);
- assertThat(progressReceiver.evaluations).contains(v2);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
assertThat(v2).isNotEqualTo(v1);
assertTraversalRootHashesAreNotEqual(v1, v2);
}
@@ -477,7 +478,7 @@
RecursiveFilesystemTraversalValue v1 =
traverseAndAssertFiles(traversalRoot, expected1, expected2);
assertThat(progressReceiver.invalidations).isEmpty();
- assertThat(progressReceiver.evaluations).contains(v1);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
progressReceiver.clear();
// Add a new file to the directory and see that the value is rebuilt.
@@ -493,7 +494,7 @@
RecursiveFilesystemTraversalValue v2 =
traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3);
assertThat(progressReceiver.invalidations).contains(traversalRoot);
- assertThat(progressReceiver.evaluations).contains(v2);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
// Directories always have the same hash code, but that is fine because their contents are also
// part of the RecursiveFilesystemTraversalValue, so v1 and v2 are unequal.
assertThat(v2).isNotEqualTo(v1);
@@ -507,7 +508,7 @@
appendToFile(file1, toInvalidate, "bar");
v3 = traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3);
assertThat(progressReceiver.invalidations).contains(traversalRoot);
- assertThat(progressReceiver.evaluations).contains(v3);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
assertThat(v3).isNotEqualTo(v2);
// Directories always have the same hash code, but that is fine because their contents are
// also part of the RecursiveFilesystemTraversalValue, so v2 and v3 are unequal.
@@ -602,7 +603,7 @@
RecursiveFilesystemTraversalValue v1 =
traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3);
assertThat(progressReceiver.invalidations).isEmpty();
- assertThat(progressReceiver.evaluations).contains(v1);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
progressReceiver.clear();
// Add a new file to the directory and see that the value is rebuilt.
@@ -612,7 +613,7 @@
RecursiveFilesystemTraversalValue v2 =
traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3, expected4);
assertThat(progressReceiver.invalidations).contains(traversalRoot);
- assertThat(progressReceiver.evaluations).contains(v2);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
assertThat(v2).isNotEqualTo(v1);
assertTraversalRootHashesAreNotEqual(v1, v2);
progressReceiver.clear();
@@ -622,7 +623,7 @@
RecursiveFilesystemTraversalValue v3 =
traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3, expected4);
assertThat(progressReceiver.invalidations).contains(traversalRoot);
- assertThat(progressReceiver.evaluations).contains(v3);
+ assertThat(progressReceiver.evaluations).contains(traversalRoot);
assertThat(v3).isNotEqualTo(v2);
assertTraversalRootHashesAreNotEqual(v2, v3);
progressReceiver.clear();
@@ -805,7 +806,7 @@
TraversalRequest params = fileLikeRoot(artifact, DONT_CROSS);
ResolvedFile expected = regularFileForTesting(path);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(params, expected);
- assertThat(progressReceiver.evaluations).contains(v1);
+ assertThat(progressReceiver.evaluations).contains(params);
progressReceiver.clear();
// Change the digest of the file. See that the value is rebuilt.
@@ -826,7 +827,7 @@
TraversalRequest params = fileLikeRoot(artifact, DONT_CROSS);
ResolvedFile expected = regularFileForTesting(path);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(params, expected);
- assertThat(progressReceiver.evaluations).contains(v1);
+ assertThat(progressReceiver.evaluations).contains(params);
progressReceiver.clear();
// Change the mtime of the file but not the digest. See that the value is *not* rebuilt.
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
index 5332637..00cdc24 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
@@ -16,7 +16,6 @@
import static com.google.common.truth.Truth.assertThat;
import com.google.common.base.Objects;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
@@ -42,7 +41,6 @@
import com.google.devtools.build.skyframe.EvaluationProgressReceiver.EvaluationState;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -50,6 +48,7 @@
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Test;
@@ -99,14 +98,14 @@
}
}
- public static final class EvaluatedEntry {
+ private static final class EvaluatedEntry {
public final SkyKey skyKey;
- public final SkyValue value;
+ final EvaluationSuccessState successState;
public final EvaluationState state;
- EvaluatedEntry(SkyKey skyKey, SkyValue value, EvaluationState state) {
+ EvaluatedEntry(SkyKey skyKey, EvaluationSuccessState successState, EvaluationState state) {
this.skyKey = skyKey;
- this.value = value;
+ this.successState = successState;
this.state = state;
}
@@ -114,13 +113,13 @@
public boolean equals(Object obj) {
return obj instanceof EvaluatedEntry
&& this.skyKey.equals(((EvaluatedEntry) obj).skyKey)
- && this.value.equals(((EvaluatedEntry) obj).value)
+ && this.successState.equals(((EvaluatedEntry) obj).successState)
&& this.state.equals(((EvaluatedEntry) obj).state);
}
@Override
public int hashCode() {
- return Objects.hashCode(skyKey, value, state);
+ return Objects.hashCode(skyKey, successState, state);
}
}
@@ -164,8 +163,10 @@
@Override
public void evaluated(
- SkyKey skyKey, Supplier<SkyValue> skyValueSupplier, EvaluationState state) {
- evaluated.add(new EvaluatedEntry(skyKey, skyValueSupplier.get(), state));
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
+ evaluated.add(new EvaluatedEntry(skyKey, evaluationSuccessState.get(), state));
}
}
@@ -417,7 +418,6 @@
TrackingEvaluationProgressReceiver.EvaluatedEntry evaluatedAction =
progressReceiver.getEvalutedEntry(actionKey);
assertThat(evaluatedAction).isNotNull();
- SkyValue actionValue = evaluatedAction.value;
// Mutate the action input if requested.
maybeChangeFile(actionInput, changeActionInput);
@@ -451,12 +451,10 @@
if (expectActionIs.actuallyClean()) {
// Action was dirtied but verified clean.
assertThat(newEntry.state).isEqualTo(EvaluationState.CLEAN);
- assertThat(newEntry.value).isEqualTo(actionValue);
} else {
// Action was dirtied and rebuilt. It was either reexecuted or was an action cache hit,
// doesn't matter here.
assertThat(newEntry.state).isEqualTo(EvaluationState.BUILT);
- assertThat(newEntry.value).isNotEqualTo(actionValue);
}
} else {
// Action was not dirtied.
diff --git a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
index ef7ada3..2be4f1b 100644
--- a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
@@ -26,7 +26,6 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Predicates;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -62,6 +61,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
import org.junit.After;
import org.junit.Before;
@@ -4336,7 +4336,9 @@
new TrackingProgressReceiver() {
@Override
public void evaluated(
- SkyKey skyKey, Supplier<SkyValue> skyValueSupplier, EvaluationState state) {
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
evaluated.add(skyKey);
}
});
@@ -4472,7 +4474,9 @@
new TrackingProgressReceiver() {
@Override
public void evaluated(
- SkyKey skyKey, Supplier<SkyValue> skyValueSupplier, EvaluationState state) {
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
evaluated.add(skyKey);
}
});
diff --git a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
index 8fd7287..c702bae 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
@@ -21,7 +21,6 @@
import static com.google.devtools.build.skyframe.GraphTester.CONCATENATE;
import static org.junit.Assert.fail;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -55,6 +54,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
import org.junit.After;
import org.junit.Before;
@@ -256,14 +256,17 @@
eval(/*keepGoing=*/false, fastKey);
}
final Set<SkyKey> receivedValues = Sets.newConcurrentHashSet();
- revalidationReceiver = new DirtyTrackingProgressReceiver(
- new EvaluationProgressReceiver.NullEvaluationProgressReceiver() {
- @Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> skyValueSupplier,
- EvaluationState state) {
- receivedValues.add(skyKey);
- }
- });
+ revalidationReceiver =
+ new DirtyTrackingProgressReceiver(
+ new EvaluationProgressReceiver.NullEvaluationProgressReceiver() {
+ @Override
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
+ receivedValues.add(skyKey);
+ }
+ });
TestThread evalThread = new TestThread() {
@Override
public void runTest() throws Exception {
@@ -1910,17 +1913,19 @@
final Set<SkyKey> evaluatedValues = Sets.newConcurrentHashSet();
EvaluationProgressReceiver progressReceiver =
new EvaluationProgressReceiver.NullEvaluationProgressReceiver() {
- @Override
- public void enqueueing(SkyKey skyKey) {
- enqueuedValues.add(skyKey);
- }
+ @Override
+ public void enqueueing(SkyKey skyKey) {
+ enqueuedValues.add(skyKey);
+ }
- @Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> skyValueSupplier,
- EvaluationState state) {
- evaluatedValues.add(skyKey);
- }
- };
+ @Override
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
+ evaluatedValues.add(skyKey);
+ }
+ };
ExtendedEventHandler reporter =
new Reporter(
diff --git a/src/test/java/com/google/devtools/build/skyframe/TrackingProgressReceiver.java b/src/test/java/com/google/devtools/build/skyframe/TrackingProgressReceiver.java
index 133add7..627460c 100644
--- a/src/test/java/com/google/devtools/build/skyframe/TrackingProgressReceiver.java
+++ b/src/test/java/com/google/devtools/build/skyframe/TrackingProgressReceiver.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
import com.google.common.collect.Sets;
import java.util.Set;
+import java.util.function.Supplier;
/**
* A testing utility to keep track of evaluation.
@@ -50,9 +50,12 @@
}
@Override
- public void evaluated(SkyKey skyKey, Supplier<SkyValue> skyValueSupplier, EvaluationState state) {
+ public void evaluated(
+ SkyKey skyKey,
+ Supplier<EvaluationSuccessState> evaluationSuccessState,
+ EvaluationState state) {
evaluated.add(skyKey);
- if (skyValueSupplier.get() != null) {
+ if (evaluationSuccessState.get().succeeded()) {
deleted.remove(skyKey);
if (state.equals(EvaluationState.CLEAN)) {
dirty.remove(skyKey);