aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-02-13 13:00:52 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-13 13:02:45 -0800
commit14dbe1392a085bf8a8b9528c5caab55de47325d1 (patch)
treeddf4ab608062877a8a81705f4ad6972815a72dca /src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
parent1b78769afd36b979a1e29116f5878551bdd29ddd (diff)
Get rid of the last reference to getAttributeMapper by keeping packages which
are referenced by TopLevelTargets when we discard the analysis cache. PiperOrigin-RevId: 185574670
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index 20b05f0d46..3f271b30c8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -18,6 +18,7 @@ import com.google.common.base.Joiner;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -645,6 +646,15 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
Collection<ConfiguredTarget> topLevelTargets, Collection<AspectValue> topLevelAspects) {
topLevelTargets = ImmutableSet.copyOf(topLevelTargets);
topLevelAspects = ImmutableSet.copyOf(topLevelAspects);
+ // This is to prevent throwing away Packages we may need during execution.
+ ImmutableSet.Builder<PackageIdentifier> packageSetBuilder = ImmutableSet.builder();
+ packageSetBuilder.addAll(
+ Collections2.transform(
+ topLevelTargets, (target) -> target.getLabel().getPackageIdentifier()));
+ packageSetBuilder.addAll(
+ Collections2.transform(
+ topLevelAspects, (aspect) -> aspect.getLabel().getPackageIdentifier()));
+ ImmutableSet<PackageIdentifier> topLevelPackages = packageSetBuilder.build();
try (AutoProfiler p = AutoProfiler.logged("discarding analysis cache", logger)) {
lastAnalysisDiscarded = true;
Iterator<? extends Map.Entry<SkyKey, ? extends NodeEntry>> it =
@@ -657,6 +667,11 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
}
SkyKey key = keyAndEntry.getKey();
SkyFunctionName functionName = key.functionName();
+ // Keep packages for top-level targets and aspects in memory to get the target from later.
+ if (functionName.equals(SkyFunctions.PACKAGE)
+ && topLevelPackages.contains((key.argument()))) {
+ continue;
+ }
if (!tracksStateForIncrementality() && LOADING_TYPES.contains(functionName)) {
it.remove();
continue;