diff options
author | lpino <lpino@google.com> | 2018-07-17 02:45:16 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-17 02:46:39 -0700 |
commit | 0451f1b3e8fe11dc6da021c9c137ae68255aa472 (patch) | |
tree | da228e2c7de47e3f09126ad597cb8cc7f15b7abe /src/main/java/com/google/devtools/build/lib/buildeventservice | |
parent | de22ab0582760dc95f33e217e82a7b822378f625 (diff) |
Improve error reporting for BuildEventService{Module,Transport}
PiperOrigin-RevId: 204882046
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildeventservice')
2 files changed, 39 insertions, 14 deletions
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 055dc2ea44..e31d00ccac 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 @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.buildeventservice; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Strings.isNullOrEmpty; -import static com.google.devtools.build.lib.buildeventservice.BuildEventServiceTransport.UPLOAD_FAILED_MESSAGE; import static java.lang.String.format; import com.google.common.annotations.VisibleForTesting; @@ -64,6 +63,20 @@ public abstract class BuildEventServiceModule<T extends BuildEventServiceOptions private Set<BuildEventTransport> transports = ImmutableSet.of(); + /** Whether an error in the Build Event Service upload causes the build to fail. */ + protected boolean errorsShouldFailTheBuild() { + return true; + } + + /** Report errors in the command line and possibly fail the build. */ + protected void reportError( + EventHandler commandLineReporter, + ModuleEnvironment moduleEnvironment, + AbruptExitException exception) { + commandLineReporter.handle(Event.error(exception.getMessage())); + moduleEnvironment.exit(exception); + } + @Override public Iterable<Class<? extends OptionsBase>> getCommonCommandOptions() { return ImmutableList.of( @@ -161,8 +174,9 @@ public abstract class BuildEventServiceModule<T extends BuildEventServiceOptions startupOptionsProvider, optionsProvider); } catch (Exception e) { - commandLineReporter.handle(Event.error(format(UPLOAD_FAILED_MESSAGE, e.getMessage()))); - moduleEnvironment.exit( + reportError( + commandLineReporter, + moduleEnvironment, new AbruptExitException( "Failed while creating BuildEventTransport", ExitCode.PUBLISH_ERROR)); return null; @@ -185,7 +199,10 @@ public abstract class BuildEventServiceModule<T extends BuildEventServiceOptions return new BuildEventStreamer(transports, reporter, buildEventStreamOptions); } } catch (Exception e) { - moduleEnvironment.exit(new AbruptExitException(ExitCode.LOCAL_ENVIRONMENTAL_ERROR, e)); + reportError( + commandLineReporter, + moduleEnvironment, + new AbruptExitException(ExitCode.LOCAL_ENVIRONMENTAL_ERROR, e)); } return null; } @@ -261,7 +278,8 @@ public abstract class BuildEventServiceModule<T extends BuildEventServiceOptions besOptions.projectId, keywords(besOptions, startupOptionsProvider), besResultsUrl, - artifactUploader); + artifactUploader, + errorsShouldFailTheBuild()); logger.fine("BuildEventServiceTransport was created successfully"); return besTransport; } diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java index cd7492e0e2..09acb0c216 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.buildeventservice; import static com.google.common.base.Preconditions.checkState; import static com.google.common.util.concurrent.MoreExecutors.listeningDecorator; -import static com.google.devtools.build.lib.events.EventKind.ERROR; import static com.google.devtools.build.lib.events.EventKind.INFO; import static com.google.devtools.build.v1.BuildStatus.Result.COMMAND_FAILED; import static com.google.devtools.build.v1.BuildStatus.Result.COMMAND_SUCCEEDED; @@ -103,6 +102,7 @@ public class BuildEventServiceTransport implements BuildEventTransport { private final BuildEventProtocolOptions protocolOptions; private final BuildEventArtifactUploader artifactUploader; private final Sleeper sleeper; + private final boolean errorsShouldFailTheBuild; /** Contains all pendingAck events that might be retried in case of failures. */ private ConcurrentLinkedDeque<InternalOrderedBuildEvent> pendingAck; /** Contains all events should be sent ordered by sequence number. */ @@ -141,7 +141,8 @@ public class BuildEventServiceTransport implements BuildEventTransport { @Nullable String projectId, Set<String> keywords, @Nullable String besResultsUrl, - BuildEventArtifactUploader artifactUploader) { + BuildEventArtifactUploader artifactUploader, + boolean errorsShouldFailTheBuild) { this( besClient, uploadTimeout, @@ -157,7 +158,8 @@ public class BuildEventServiceTransport implements BuildEventTransport { keywords, besResultsUrl, artifactUploader, - new JavaSleeper()); + new JavaSleeper(), + errorsShouldFailTheBuild); } @VisibleForTesting @@ -176,7 +178,8 @@ public class BuildEventServiceTransport implements BuildEventTransport { Set<String> keywords, @Nullable String besResultsUrl, BuildEventArtifactUploader artifactUploader, - Sleeper sleeper) { + Sleeper sleeper, + boolean errorsShouldFailTheBuild) { this.besClient = besClient; this.besProtoUtil = new BuildEventServiceProtoUtil( @@ -198,6 +201,7 @@ public class BuildEventServiceTransport implements BuildEventTransport { this.artifactUploader = artifactUploader; this.sleeper = sleeper; this.besResultsUrl = besResultsUrl; + this.errorsShouldFailTheBuild = errorsShouldFailTheBuild; } public boolean isStreaming() { @@ -354,11 +358,14 @@ public class BuildEventServiceTransport implements BuildEventTransport { private void reportErrorAndFailBuild(Throwable t) { String message = errorMessageFromException(t); - - report(ERROR, message); - moduleEnvironment.exit( - new AbruptExitException( - "BuildEventServiceTransport internal error", ExitCode.PUBLISH_ERROR)); + if (errorsShouldFailTheBuild) { + commandLineReporter.handle(Event.error(message)); + moduleEnvironment.exit( + new AbruptExitException( + "BuildEventServiceTransport internal error", ExitCode.PUBLISH_ERROR)); + } else { + commandLineReporter.handle(Event.warn(message)); + } } private void maybeReportUploadError() { |