Don't forget to print an error message in the command line when BES upload fails.
The command line reporting was missing from https://github.com/bazelbuild/bazel/commit/2a42e2bccfbe969b4063ee96f8cd10117d1f52bf since the callback function
doesn't report any errors to the command line.
PiperOrigin-RevId: 236884358
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java
index 9b65b2e..076a170 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java
@@ -52,6 +52,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nullable;
@@ -74,17 +75,30 @@
private String invocationId;
private String buildRequestId;
private EventHandler cmdLineReporter;
+ private final AtomicReference<AbruptExitException> pendingAbruptExitException =
+ new AtomicReference<>();
protected BESOptionsT besOptions;
/** Callback used by the transports to report errors and possible exit abruptly. */
protected BuildEventServiceAbruptExitCallback getAbruptExitCallback(
ModuleEnvironment moduleEnvironment) {
- return moduleEnvironment::exit;
+ return (e) -> {
+ // Request exiting early for the first abrupt exception we find.
+ if (this.pendingAbruptExitException.compareAndSet(null, e)) {
+ moduleEnvironment.exit(pendingAbruptExitException.get());
+ }
+ };
+ }
+
+ protected void reportCommandLineError(EventHandler commandLineReporter, Exception exception) {
+ // Don't hide unchecked exceptions as part of the error reporting.
+ Throwables.throwIfUnchecked(exception);
+ commandLineReporter.handle(Event.error(exception.getMessage()));
}
/** Report errors in the command line and possibly fail the build. */
- protected void reportError(
+ private void reportError(
EventHandler commandLineReporter,
ModuleEnvironment moduleEnvironment,
String msg,
@@ -95,7 +109,7 @@
logger.log(Level.SEVERE, msg, exception);
AbruptExitException abruptException = new AbruptExitException(msg, exitCode, exception);
- commandLineReporter.handle(Event.error(exception.getMessage()));
+ reportCommandLineError(commandLineReporter, exception);
moduleEnvironment.exit(abruptException);
}
@@ -199,6 +213,12 @@
@Override
public void afterCommand() {
+ AbruptExitException e = pendingAbruptExitException.getAndSet(null);
+ if (e != null) {
+ logger.severe(e.getMessage());
+ reportCommandLineError(cmdLineReporter, e);
+ }
+
if (streamer != null) {
if (!Strings.isNullOrEmpty(besOptions.besBackend)) {
constructAndMaybeReportInvocationIdUrl();