aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-06-04 08:05:13 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-04 08:11:10 -0700
commit8e9b28ffba3f9d5fb87192a7a660ef81d8d42d11 (patch)
tree3a6bf68419f4113704e18e23588ee4337b17bda1
parent072154757970826b39715a67aaec15763d8be4a1 (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
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/ExecutionProgressReceiver.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/Builder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java4
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(