aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
diff options
context:
space:
mode:
authorGravatar shreyax <shreyax@google.com>2018-02-23 07:46:54 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-23 07:48:26 -0800
commit246f0aa048aeb3f456c89565e1e3021957b6cef4 (patch)
treefbc8d8d8d81df14587a377b3b9b897382c88c1d9 /src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
parentf0c7c4650d874d31a4ef97df191a743445c0463d (diff)
Automated rollback of commit 7fe59b98eefc96a6310f0b0221d4e0f18e2a9000.
*** Reason for rollback *** Fixed bug due to TransitiveTargetFunction requesting multiple Package dependencies when computing its aspect deps by only applying the optimization to TransitiveTraversalFunction. *** Original change description *** Automated rollback of commit cce164aed44aba1de244f0d764cd33a5cc6980b2. PiperOrigin-RevId: 186766812
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.java39
1 files changed, 29 insertions, 10 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 b51bab41d5..e438d917d4 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
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
@@ -61,7 +62,6 @@ import javax.annotation.Nullable;
* return.
*/
abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements SkyFunction {
-
/**
* Returns a {@link SkyKey} corresponding to the traversal of a target specified by {@code label}
* and its transitive dependencies.
@@ -126,9 +126,9 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
loadTargetResultsType);
TargetAndErrorIfAny targetAndErrorIfAny = (TargetAndErrorIfAny) loadTargetResults;
- // Process deps from attributes.
- Collection<SkyKey> labelDepKeys =
- Collections2.transform(getLabelDeps(targetAndErrorIfAny.getTarget()), this::getKey);
+ // Process deps from attributes. It is essential that the last getValue(s) call we made to
+ // skyframe for building this node was for the corresponding PackageValue.
+ Collection<SkyKey> labelDepKeys = getLabelDepKeys(env, targetAndErrorIfAny);
Map<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> depMap =
env.getValuesOrThrow(labelDepKeys, NoSuchPackageException.class,
@@ -136,9 +136,10 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
if (env.valuesMissing()) {
return null;
}
- // Process deps from aspects.
+ // Process deps from attributes. It is essential that the second-to-last getValue(s) call we
+ // made to skyframe for building this node was for the corresponding PackageValue.
Iterable<SkyKey> labelAspectKeys =
- getStrictLabelAspectKeys(targetAndErrorIfAny.getTarget(), depMap, env);
+ getStrictLabelAspectDepKeys(env, depMap, targetAndErrorIfAny);
Set<Entry<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>>>
labelAspectEntries = env.getValuesOrThrow(labelAspectKeys, NoSuchPackageException.class,
NoSuchTargetException.class).entrySet();
@@ -153,6 +154,20 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
return computeSkyValue(targetAndErrorIfAny, processedTargets);
}
+ Collection<SkyKey> getLabelDepKeys(
+ SkyFunction.Environment env, TargetAndErrorIfAny targetAndErrorIfAny)
+ throws InterruptedException {
+ return Collections2.transform(getLabelDeps(targetAndErrorIfAny.getTarget()), this::getKey);
+ }
+
+ Iterable<SkyKey> getStrictLabelAspectDepKeys(
+ SkyFunction.Environment env,
+ Map<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> depMap,
+ TargetAndErrorIfAny targetAndErrorIfAny)
+ throws InterruptedException {
+ return getStrictLabelAspectKeys(targetAndErrorIfAny.getTarget(), depMap, env);
+ }
+
@Override
public String extractTag(SkyKey skyKey) {
return Label.print(argumentFromKey(skyKey));
@@ -269,14 +284,18 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
Target getTarget();
}
- private static class TargetAndErrorIfAnyImpl implements TargetAndErrorIfAny, LoadTargetResults {
+ @VisibleForTesting
+ static class TargetAndErrorIfAnyImpl implements TargetAndErrorIfAny, LoadTargetResults {
private final boolean packageLoadedSuccessfully;
@Nullable private final NoSuchTargetException errorLoadingTarget;
private final Target target;
- private TargetAndErrorIfAnyImpl(boolean packageLoadedSuccessfully,
- @Nullable NoSuchTargetException errorLoadingTarget, Target target) {
+ @VisibleForTesting
+ TargetAndErrorIfAnyImpl(
+ boolean packageLoadedSuccessfully,
+ @Nullable NoSuchTargetException errorLoadingTarget,
+ Target target) {
this.packageLoadedSuccessfully = packageLoadedSuccessfully;
this.errorLoadingTarget = errorLoadingTarget;
this.target = target;
@@ -304,7 +323,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
}
}
- private LoadTargetResults loadTarget(Environment env, Label label)
+ LoadTargetResults loadTarget(Environment env, Label label)
throws NoSuchTargetException, NoSuchPackageException, InterruptedException {
SkyKey packageKey = PackageValue.key(label.getPackageIdentifier());
SkyKey targetKey = TargetMarkerValue.key(label);