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 =