diff options
author | Eric Fellheimer <felly@google.com> | 2015-08-18 21:09:54 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-08-20 14:46:24 +0000 |
commit | 85fe06126bcc36c4cbb6008e931c2454d0f5e694 (patch) | |
tree | 421d11bb8f0e21700f353dbfea7a03732c514d69 /src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java | |
parent | a2e2cc2d2f05594f140a31543e70e720b3dfeb83 (diff) |
Avoid Skyframe restarts in transitive targets due related to conservative aspect deps.
--
MOS_MIGRATED_REVID=100960261
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java index fab884281a..5bb9c4f451 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; @@ -111,18 +112,23 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> TargetAndErrorIfAny targetAndErrorIfAny = (TargetAndErrorIfAny) loadTargetResults; TProcessedTargets processedTargets = processTarget(label, targetAndErrorIfAny); - // Process deps from attributes of current target. + // Process deps from attributes and conservative aspects of current target. Iterable<SkyKey> labelDepKeys = getLabelDepKeys(targetAndErrorIfAny.getTarget()); + Iterable<SkyKey> labelAspectKeys = + getConservativeLabelAspectKeys(targetAndErrorIfAny.getTarget()); + Iterable<SkyKey> depAndAspectKeys = Iterables.concat(labelDepKeys, labelAspectKeys); + Set<Entry<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>>> - labelDepEntries = env.getValuesOrThrow(labelDepKeys, NoSuchPackageException.class, - NoSuchTargetException.class).entrySet(); - processDeps(processedTargets, env.getListener(), targetAndErrorIfAny, labelDepEntries); + depsAndAspectEntries = env.getValuesOrThrow(depAndAspectKeys, + NoSuchPackageException.class, NoSuchTargetException.class).entrySet(); + processDeps(processedTargets, env.getListener(), targetAndErrorIfAny, depsAndAspectEntries); if (env.valuesMissing()) { return null; } - // Process deps from aspects. - Iterable<SkyKey> labelAspectKeys = getLabelAspectKeys(targetAndErrorIfAny.getTarget(), env); + + // Process deps from strict aspects. + labelAspectKeys = getStrictLabelAspectKeys(targetAndErrorIfAny.getTarget(), env); Set<Entry<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>>> labelAspectEntries = env.getValuesOrThrow(labelAspectKeys, NoSuchPackageException.class, NoSuchTargetException.class).entrySet(); @@ -142,9 +148,20 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> /** * Return an Iterable of SkyKeys corresponding to the Aspect-related dependencies of target. * + * <p>This method may return a precise set of aspect keys, but may need to request additional + * dependencies from the env to do so. + * + * <p>Subclasses should implement only one of #getStrictLabelAspectKeys and + * @getConservativeLabelAspectKeys. + */ + protected abstract Iterable<SkyKey> getStrictLabelAspectKeys(Target target, Environment env); + + /** + * Return an Iterable of SkyKeys corresponding to the Aspect-related dependencies of target. + * * <p>This method may return a conservative over-approximation of the exact set. */ - protected abstract Iterable<SkyKey> getLabelAspectKeys(Target target, Environment env); + protected abstract Iterable<SkyKey> getConservativeLabelAspectKeys(Target target); private Iterable<SkyKey> getLabelDepKeys(Target target) { List<SkyKey> depKeys = Lists.newArrayList(); |