aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/buildeventservice
diff options
context:
space:
mode:
authorGravatar lpino <lpino@google.com>2018-07-17 02:45:16 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-17 02:46:39 -0700
commit0451f1b3e8fe11dc6da021c9c137ae68255aa472 (patch)
treeda228e2c7de47e3f09126ad597cb8cc7f15b7abe /src/main/java/com/google/devtools/build/lib/buildeventservice
parentde22ab0582760dc95f33e217e82a7b822378f625 (diff)
Improve error reporting for BuildEventService{Module,Transport}
PiperOrigin-RevId: 204882046
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildeventservice')
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java25
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() {