Allows QueryableGraph.prefetchDeps to make decisions about how to handle
excluded keys.
PiperOrigin-RevId: 215217354
diff --git a/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java b/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java
index e196d0c..b08a499 100644
--- a/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java
@@ -13,9 +13,12 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.util.Map;
+import java.util.Set;
import javax.annotation.Nullable;
/**
@@ -60,10 +63,20 @@
return InterruptibleSupplier.Memoize.of(() -> getBatch(requestor, reason, keys));
}
- /** Optimistically prefetches dependencies. */
- default void prefetchDeps(@Nullable SkyKey requestor, Iterable<? extends SkyKey> depKeys)
+ /**
+ * Optimistically prefetches dependencies.
+ *
+ * @param excludedKeys keys that could overlap with {@code depKeys}. {@code prefetchDeps} is
+ * usually called together with an actual fetch, and the keys actually fetched should be
+ * excluded from the prefetch.
+ */
+ default void prefetchDeps(
+ @Nullable SkyKey requestor, Iterable<? extends SkyKey> depKeys, Set<SkyKey> excludedKeys)
throws InterruptedException {
- getBatchAsync(requestor, Reason.PREFETCH, depKeys);
+ getBatchAsync(
+ requestor,
+ Reason.PREFETCH,
+ Iterables.filter(depKeys, Predicates.not(Predicates.in(excludedKeys))));
}
/**
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 d7a086a..7fbe29b 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -210,10 +209,7 @@
// we may as well use it for the call to evaluatorContext#getBatchValues since we've
// precomputed the size.
depKeysAsSet = depKeys.toSet();
- evaluatorContext
- .getGraph()
- .prefetchDeps(
- requestor, Iterables.filter(oldDeps, Predicates.not(Predicates.in(depKeysAsSet))));
+ evaluatorContext.getGraph().prefetchDeps(requestor, oldDeps, depKeysAsSet);
}
}
Map<SkyKey, ? extends NodeEntry> batchMap =