Encode remaining environmental execution failures with FailureDetails
EnvironmentalExecException now always has details. Applicable failure
modes in SymlinkTree management, include scanning, remote execution, and
CPP actions now use FailureDetails.
RELNOTES: None.
PiperOrigin-RevId: 315833077
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
index 0c881f4..92d1e32 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
@@ -60,6 +60,9 @@
import com.google.devtools.build.lib.remote.options.RemoteOptions;
import com.google.devtools.build.lib.remote.util.DigestUtil;
import com.google.devtools.build.lib.remote.util.Utils.InMemoryOutput;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.RemoteExecution;
+import com.google.devtools.build.lib.server.FailureDetails.RemoteExecution.Code;
import com.google.devtools.build.lib.util.io.FileOutErr;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.vfs.Dirent;
@@ -352,7 +355,13 @@
// any subsequent local execution failure would likely be incomprehensible.
ExecException execEx =
new EnvironmentalExecException(
- "Failed to delete output files after incomplete download", ioEx);
+ ioEx,
+ FailureDetail.newBuilder()
+ .setMessage("Failed to delete output files after incomplete download")
+ .setRemoteExecution(
+ RemoteExecution.newBuilder()
+ .setCode(Code.INCOMPLETE_OUTPUT_DOWNLOAD_CLEANUP_FAILURE))
+ .build());
execEx.addSuppressed(e);
throw execEx;
}