Specify FailureDetails for default exit values not expected to be used
The pre-existing INTERNAL values ought to be overwritten before they're
used. Replacing them with CrashFailureDetail values provides more context
in case that ever happens.
RELNOTES: None.
PiperOrigin-RevId: 313629803
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java
index 22f4672..8139136 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildResult.java
@@ -27,6 +27,7 @@
import com.google.devtools.build.lib.buildeventstream.BuildToolLogs;
import com.google.devtools.build.lib.buildeventstream.BuildToolLogs.LogFileEntry;
import com.google.devtools.build.lib.skyframe.AspectValueKey.AspectKey;
+import com.google.devtools.build.lib.util.CrashFailureDetails;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.util.Pair;
@@ -51,8 +52,7 @@
private Throwable crash = null;
private boolean catastrophe = false;
private boolean stopOnFirstFailure;
- private DetailedExitCode detailedExitCode =
- DetailedExitCode.justExitCode(ExitCode.BLAZE_INTERNAL_ERROR);
+ @Nullable private DetailedExitCode detailedExitCode;
private BuildConfigurationCollection configurations;
private Collection<ConfiguredTarget> actualTargets;
@@ -110,7 +110,7 @@
/** True iff the build request has been successfully completed. */
public boolean getSuccess() {
- return detailedExitCode.isSuccess();
+ return detailedExitCode != null && detailedExitCode.isSuccess();
}
/**
@@ -118,15 +118,17 @@
* to complete the command with.
*/
public DetailedExitCode getDetailedExitCode() {
- return detailedExitCode;
+ if (detailedExitCode != null) {
+ return detailedExitCode;
+ }
+ return CrashFailureDetails.detailedExitCodeForThrowable(
+ new IllegalStateException("Unspecified DetailedExitCode"));
}
- /**
- * Sets the RuntimeException / Error that induced a Blaze crash.
- */
+ /** Sets the RuntimeException / Error that induced a Blaze crash. */
public void setUnhandledThrowable(Throwable crash) {
- Preconditions.checkState(crash == null ||
- ((crash instanceof RuntimeException) || (crash instanceof Error)));
+ Preconditions.checkState(
+ crash == null || ((crash instanceof RuntimeException) || (crash instanceof Error)));
this.crash = crash;
}
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 ff60b5d..5eaa996 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
@@ -47,6 +47,7 @@
import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.server.FailureDetails.Interrupted.Code;
import com.google.devtools.build.lib.util.AbruptExitException;
+import com.google.devtools.build.lib.util.CrashFailureDetails;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.util.InterruptedFailureDetails;
@@ -280,8 +281,7 @@
maybeSetStopOnFirstFailure(request, result);
int startSuspendCount = suspendCount();
Throwable catastrophe = null;
- DetailedExitCode detailedExitCode =
- DetailedExitCode.justExitCode(ExitCode.BLAZE_INTERNAL_ERROR);
+ DetailedExitCode detailedExitCode = null;
try {
buildTargets(request, result, validator);
detailedExitCode = DetailedExitCode.success();
@@ -335,9 +335,15 @@
reportExceptionError(e);
result.setCatastrophe();
} catch (Throwable throwable) {
+ detailedExitCode = CrashFailureDetails.detailedExitCodeForThrowable(throwable);
catastrophe = throwable;
Throwables.propagate(throwable);
} finally {
+ if (detailedExitCode == null) {
+ detailedExitCode =
+ CrashFailureDetails.detailedExitCodeForThrowable(
+ new IllegalStateException("Unspecified DetailedExitCode"));
+ }
stopRequest(result, catastrophe, detailedExitCode, startSuspendCount);
}