aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/buildtool
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-04-24 09:32:36 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-24 09:34:21 -0700
commitd1af4306095545151b1c062e5544f80496ceb5eb (patch)
treeb2e8857d58a62767017a04348b5a3e4fcc7b182b /src/main/java/com/google/devtools/build/lib/buildtool
parent59368559a1fc42a4e7a81f6892173ea086e34852 (diff)
Add hook to inform SkyframeExecutor that build is finished.
PiperOrigin-RevId: 194099006
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildtool')
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java20
1 files changed, 20 insertions, 0 deletions
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 ed9024a4d0..6a1e0b9f73 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
@@ -77,6 +77,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.stream.Stream;
@@ -550,10 +551,29 @@ public class BuildTool {
Preconditions.checkState((crash == null) || !exitCondition.equals(ExitCode.SUCCESS));
result.setUnhandledThrowable(crash);
result.setExitCondition(exitCondition);
+ InterruptedException ie = null;
+ try {
+ env.getSkyframeExecutor().notifyCommandComplete();
+ } catch (InterruptedException e) {
+ env.getReporter().handle(Event.error("Build interrupted during command completion"));
+ ie = e;
+ }
// The stop time has to be captured before we send the BuildCompleteEvent.
result.setStopTime(runtime.getClock().currentTimeMillis());
env.getEventBus()
.post(new BuildCompleteEvent(result, ImmutableList.of(BuildEventId.buildToolLogs())));
+ if (ie != null) {
+ if (exitCondition.equals(ExitCode.SUCCESS)) {
+ result.setExitCondition(ExitCode.INTERRUPTED);
+ } else if (!exitCondition.equals(ExitCode.INTERRUPTED)) {
+ logger.log(
+ Level.WARNING,
+ "Suppressed interrupted exception during stop request because already failing with exit"
+ + " code "
+ + exitCondition,
+ ie);
+ }
+ }
}
private void reportTargets(AnalysisResult analysisResult) {