diff options
author | cpeyser <cpeyser@google.com> | 2018-06-04 08:05:13 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-04 08:11:10 -0700 |
commit | 8e9b28ffba3f9d5fb87192a7a660ef81d8d42d11 (patch) | |
tree | 3a6bf68419f4113704e18e23588ee4337b17bda1 | |
parent | 072154757970826b39715a67aaec15763d8be4a1 (diff) |
Failing targets are identified by comparing ConfiguredTarget.Key instead of ConfiguredTarget. Since ConfiguredTarget does not implement equals(), reference equality has been used until now, and this is not valid for the case where the ConfiguredTarget has been deserialized.
PiperOrigin-RevId: 199133926
6 files changed, 20 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java index 1becb5bc93..644f34e448 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.skyframe.ActionExecutionInactivityWatchdog; import com.google.devtools.build.lib.skyframe.AspectCompletionValue; import com.google.devtools.build.lib.skyframe.AspectCompletionValue.AspectCompletionKey; import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor; import com.google.devtools.build.lib.skyframe.TargetCompletionValue; @@ -49,7 +50,7 @@ public final class ExecutionProgressReceiver private static final NumberFormat PROGRESS_MESSAGE_NUMBER_FORMATTER; // Must be thread-safe! - private final Set<ConfiguredTarget> builtTargets; + private final Set<ConfiguredTargetKey> builtTargets; private final Set<AspectKey> builtAspects; private final Set<ActionLookupData> enqueuedActions = Sets.newConcurrentHashSet(); private final Set<ActionLookupData> completedActions = Sets.newConcurrentHashSet(); @@ -69,7 +70,7 @@ public final class ExecutionProgressReceiver * permitted while this receiver is active. */ ExecutionProgressReceiver( - Set<ConfiguredTarget> builtTargets, Set<AspectKey> builtAspects, int exclusiveTestsCount) { + Set<ConfiguredTargetKey> builtTargets, Set<AspectKey> builtAspects, int exclusiveTestsCount) { this.builtTargets = Collections.synchronizedSet(builtTargets); this.builtAspects = Collections.synchronizedSet(builtAspects); this.exclusiveTestsCount = exclusiveTestsCount; @@ -108,7 +109,7 @@ public final class ExecutionProgressReceiver return; } ConfiguredTarget target = value.getConfiguredTarget(); - builtTargets.add(target); + builtTargets.add(ConfiguredTargetKey.inTargetConfig(target)); } else if (type.equals(SkyFunctions.ASPECT_COMPLETION)) { AspectCompletionValue value = (AspectCompletionValue) skyValueSupplier.get(); if (value == null) { diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java index 8139fbf8c7..80a54f2673 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java @@ -74,6 +74,7 @@ import com.google.devtools.build.lib.runtime.CommandEnvironment; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; import com.google.devtools.build.lib.skyframe.Builder; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; import com.google.devtools.build.lib.skyframe.OutputService; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.util.AbruptExitException; @@ -289,7 +290,7 @@ public class ExecutionTool { installExplanationHandler(request.getBuildOptions().explanationPath, request.getOptionsDescription()); - Set<ConfiguredTarget> builtTargets = new HashSet<>(); + Set<ConfiguredTargetKey> builtTargets = new HashSet<>(); Set<AspectKey> builtAspects = new HashSet<>(); Collection<AspectValue> aspects = analysisResult.getAspects(); @@ -536,12 +537,12 @@ public class ExecutionTool { * @param configuredTargets The configured targets whose artifacts are to be built. */ private Collection<ConfiguredTarget> determineSuccessfulTargets( - Collection<ConfiguredTarget> configuredTargets, Set<ConfiguredTarget> builtTargets) { + Collection<ConfiguredTarget> configuredTargets, Set<ConfiguredTargetKey> builtTargets) { // Maintain the ordering by copying builtTargets into a LinkedHashSet in the same iteration // order as configuredTargets. Collection<ConfiguredTarget> successfulTargets = new LinkedHashSet<>(); for (ConfiguredTarget target : configuredTargets) { - if (builtTargets.contains(target)) { + if (builtTargets.contains(ConfiguredTargetKey.inTargetConfig(target))) { successfulTargets.add(target); } } diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java index f557e62ffe..e4951bd8e9 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java @@ -41,6 +41,7 @@ import com.google.devtools.build.lib.skyframe.ActionExecutionInactivityWatchdog; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; import com.google.devtools.build.lib.skyframe.Builder; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.util.AbruptExitException; import com.google.devtools.build.lib.util.ExitCode; @@ -103,7 +104,7 @@ public class SkyframeBuilder implements Builder { Set<ConfiguredTarget> targetsToSkip, Collection<AspectValue> aspects, Executor executor, - Set<ConfiguredTarget> builtTargets, + Set<ConfiguredTargetKey> builtTargets, Set<AspectKey> builtAspects, boolean explain, @Nullable Range<Long> lastExecutionTimeRange, diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/Builder.java b/src/main/java/com/google/devtools/build/lib/skyframe/Builder.java index 5ce1016200..42e3e09b10 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/Builder.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/Builder.java @@ -86,7 +86,7 @@ public interface Builder { Set<ConfiguredTarget> targetsToSkip, Collection<AspectValue> aspects, Executor executor, - Set<ConfiguredTarget> builtTargets, + Set<ConfiguredTargetKey> builtTargets, Set<AspectKey> builtAspects, boolean explain, @Nullable Range<Long> lastExecutionTimeRange, diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java index fa9bbd723d..f12ce6e1bb 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java @@ -62,6 +62,13 @@ public class ConfiguredTargetKey extends ActionLookupKey { return of(getLabel(configuredTarget), configurationKey, isHostConfiguration); } + public static ConfiguredTargetKey inTargetConfig(ConfiguredTarget configuredTarget) { + return of( + getLabel(configuredTarget), + configuredTarget.getConfigurationKey(), + /*isHostConfiguration=*/ false); + } + /** * Caches so that the number of ConfiguredTargetKey instances is {@code O(configured targets)} and * not {@code O(edges between configured targets)}. diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java index 5bf742bb9f..e17e673f5f 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java @@ -264,7 +264,7 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase { Set<ConfiguredTarget> targetsToSkip, Collection<AspectValue> aspects, Executor executor, - Set<ConfiguredTarget> builtTargets, + Set<ConfiguredTargetKey> builtTargets, Set<AspectKey> builtAspects, boolean explain, Range<Long> lastExecutionTimeRange, @@ -407,7 +407,7 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase { tsgm.setCommandStartTime(); Set<Artifact> artifactsToBuild = Sets.newHashSet(artifacts); - Set<ConfiguredTarget> builtTargets = new HashSet<>(); + Set<ConfiguredTargetKey> builtTargets = new HashSet<>(); Set<AspectKey> builtAspects = new HashSet<>(); try { builder.buildArtifacts( |