Apply the event-based result collecting approach to regular blaze.
This change is guarded behind
--experimental_use_event_based_build_completion_status. At the moment, we unconditionally carry out both modes of collection and only choose the result of the event-based method if the flag is flipped to "true".
PiperOrigin-RevId: 444269565
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java
index 31335df..1f71794 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildRequestOptions.java
@@ -537,6 +537,17 @@
@Nullable
public PathFragment aqueryDumpAfterBuildOutputFile;
+ @Option(
+ name = "experimental_use_event_based_build_completion_status",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ metadataTags = OptionMetadataTag.EXPERIMENTAL,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS, OptionEffectTag.EXECUTION},
+ help =
+ "If this flag is set, use the event bus to keep track of whether a top-level target or"
+ + " its aspect is analyzed/built.")
+ public boolean useEventBasedBuildCompletionStatus;
+
/**
* Converter for jobs: Takes keyword ({@value #FLAG_SYNTAX}). Values must be between 1 and
* MAX_JOBS.
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
index 7eabbb2..fa54fb7 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
@@ -292,7 +292,8 @@
analysisResult,
result,
analysisResult.getPackageRoots(),
- request.getTopLevelArtifactContext());
+ request.getTopLevelArtifactContext(),
+ request.getBuildOptions().useEventBasedBuildCompletionStatus);
} else {
env.getReporter().post(new NoExecutionEvent());
}
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 9f66c0c..2c4ecd8 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
@@ -71,6 +71,7 @@
*/
ExecutionProgressReceiver(
Set<ConfiguredTargetKey> builtTargets, Set<AspectKey> builtAspects, int exclusiveTestsCount) {
+ // TODO(b/227138583) Remove these.
this.builtTargets = Collections.synchronizedSet(builtTargets);
this.builtAspects = Collections.synchronizedSet(builtAspects);
this.exclusiveTestsCount = exclusiveTestsCount;
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 1283001..ec026c6 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
@@ -378,7 +378,8 @@
AnalysisResult analysisResult,
BuildResult buildResult,
PackageRoots packageRoots,
- TopLevelArtifactContext topLevelArtifactContext)
+ TopLevelArtifactContext topLevelArtifactContext,
+ boolean useEventBasedBuildCompletionStatus)
throws BuildFailedException, InterruptedException, TestExecException, AbruptExitException {
Stopwatch timer = Stopwatch.createStarted();
prepare(packageRoots, analysisResult.getNonSymlinkedDirectoriesUnderExecRoot());
@@ -436,6 +437,7 @@
installExplanationHandler(
request.getBuildOptions().explanationPath, request.getOptionsDescription());
+ // TODO(b/227138583): Remove these.
Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
Set<AspectKey> builtAspects = new HashSet<>();
@@ -532,6 +534,11 @@
saveActionCache(actionCache);
}
+ if (useEventBasedBuildCompletionStatus) {
+ builtTargets = env.getBuildResultListener().getBuiltTargets();
+ builtAspects = env.getBuildResultListener().getBuiltAspects();
+ }
+
try (SilentCloseable c = Profiler.instance().profile("Show results")) {
buildResult.setSuccessfulTargets(
determineSuccessfulTargets(configuredTargets, builtTargets));
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
index edb9cae..e6d400b 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -836,7 +836,6 @@
responseExtensions.addAll(extensions);
}
- @Nullable
public BuildResultListener getBuildResultListener() {
return buildResultListener;
}