Model the TopLevelArtifactContext as an argument to the CompletionFunction rather than a PRECOMPUTED value.
Having a stale TopLevelArtifactContext leads to invalidation of all the top level target nodes, causing time wasted due to a lot of cache hits for a null build.
--
MOS_MIGRATED_REVID=127585059
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
index 13a2d95..cdb22dd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.LabelAndConfiguration;
+import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.rules.test.TestProvider;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -36,8 +37,9 @@
public SkyValue compute(SkyKey skyKey, Environment env) {
TestCompletionValue.TestCompletionKey key =
(TestCompletionValue.TestCompletionKey) skyKey.argument();
- LabelAndConfiguration lac = key.getLabelAndConfiguration();
- if (env.getValue(TargetCompletionValue.key(lac)) == null) {
+ LabelAndConfiguration lac = key.labelAndConfiguration();
+ TopLevelArtifactContext ctx = key.topLevelArtifactContext();
+ if (env.getValue(TargetCompletionValue.key(lac, ctx)) == null) {
return null;
}
@@ -48,7 +50,7 @@
}
ConfiguredTarget ct = ctValue.getConfiguredTarget();
- if (key.isExclusiveTesting()) {
+ if (key.exclusiveTesting()) {
// Request test artifacts iteratively if testing exclusively.
for (Artifact testArtifact : TestProvider.getTestStatusArtifacts(ct)) {
if (env.getValue(ArtifactValue.key(testArtifact, /*isMandatory=*/true)) == null) {