diff options
author | janakr <janakr@google.com> | 2018-04-24 09:32:36 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-24 09:34:21 -0700 |
commit | d1af4306095545151b1c062e5544f80496ceb5eb (patch) | |
tree | b2e8857d58a62767017a04348b5a3e4fcc7b182b /src/main/java/com/google/devtools/build/lib/buildtool | |
parent | 59368559a1fc42a4e7a81f6892173ea086e34852 (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.java | 20 |
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) { |