Skip to content

Commit 454f11d

Browse files
tjgqcopybara-github
authored andcommitted
Include stack trace in all gRPC errors when --verbose_failures is set.
Also refactor a couple places where the stack trace was included in an ad-hoc manner, and force Utils.grpcAwareErrorMessage callers to be explicit to avoid future instances. Closes #16086. PiperOrigin-RevId: 502854490 Change-Id: Id2d6a1728630fffea9399b406378c7f173b247bd
1 parent b2976c5 commit 454f11d

File tree

5 files changed

+29
-19
lines changed

5 files changed

+29
-19
lines changed

src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,8 @@ public void beforeCommand(CommandEnvironment env) throws AbruptExitException {
532532
}
533533
} catch (IOException e) {
534534
String errorMessage =
535-
"Failed to query remote execution capabilities: " + Utils.grpcAwareErrorMessage(e);
535+
"Failed to query remote execution capabilities: "
536+
+ Utils.grpcAwareErrorMessage(e, verboseFailures);
536537
if (remoteOptions.remoteLocalFallback) {
537538
if (verboseFailures) {
538539
errorMessage += System.lineSeparator() + Throwables.getStackTraceAsString(e);

src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.common.annotations.VisibleForTesting;
2121
import com.google.common.base.Stopwatch;
22-
import com.google.common.base.Throwables;
2322
import com.google.devtools.build.lib.actions.ActionInput;
2423
import com.google.devtools.build.lib.actions.ExecException;
2524
import com.google.devtools.build.lib.actions.FileArtifactValue;
@@ -141,13 +140,7 @@ public CacheHandle lookup(Spawn spawn, SpawnExecutionContext context)
141140
if (BulkTransferException.isOnlyCausedByCacheNotFoundException(e)) {
142141
// Intentionally left blank
143142
} else {
144-
String errorMessage;
145-
if (!verboseFailures) {
146-
errorMessage = Utils.grpcAwareErrorMessage(e);
147-
} else {
148-
// On --verbose_failures print the whole stack trace
149-
errorMessage = "\n" + Throwables.getStackTraceAsString(e);
150-
}
143+
String errorMessage = Utils.grpcAwareErrorMessage(e, verboseFailures);
151144
if (isNullOrEmpty(errorMessage)) {
152145
errorMessage = e.getClass().getSimpleName();
153146
}

src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.google.common.annotations.VisibleForTesting;
3131
import com.google.common.base.Preconditions;
3232
import com.google.common.base.Stopwatch;
33-
import com.google.common.base.Throwables;
3433
import com.google.common.util.concurrent.ListeningScheduledExecutorService;
3534
import com.google.devtools.build.lib.actions.ActionInput;
3635
import com.google.devtools.build.lib.actions.CommandLines.ParamFileActionInput;
@@ -566,11 +565,7 @@ private SpawnResult handleError(
566565
catastrophe = false;
567566
}
568567

569-
String errorMessage = Utils.grpcAwareErrorMessage(exception);
570-
if (verboseFailures) {
571-
// On --verbose_failures print the whole stack trace
572-
errorMessage += "\n" + Throwables.getStackTraceAsString(exception);
573-
}
568+
String errorMessage = Utils.grpcAwareErrorMessage(exception, verboseFailures);
574569

575570
if (exception.getCause() instanceof ExecutionStatusException) {
576571
ExecutionStatusException e = (ExecutionStatusException) exception.getCause();

src/main/java/com/google/devtools/build/lib/remote/util/Utils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ private static String executionStatusExceptionErrorMessage(ExecutionStatusExcept
350350
+ errorDetailsMessage(status.getDetailsList());
351351
}
352352

353-
public static String grpcAwareErrorMessage(IOException e) {
353+
private static String grpcAwareErrorMessage(IOException e) {
354354
io.grpc.Status errStatus = io.grpc.Status.fromThrowable(e);
355355
if (e.getCause() instanceof ExecutionStatusException) {
356356
// Display error message returned by the remote service.

src/test/java/com/google/devtools/build/lib/remote/UtilsTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,35 @@
3636
public class UtilsTest {
3737

3838
@Test
39-
public void testGrpcAwareErrorMessages() {
39+
public void testGrpcAwareErrorMessage() {
4040
IOException ioError = new IOException("io error");
4141
IOException wrappedGrpcError =
4242
new IOException(
4343
"wrapped error", Status.ABORTED.withDescription("grpc error").asRuntimeException());
4444

45-
assertThat(Utils.grpcAwareErrorMessage(ioError)).isEqualTo("io error");
46-
assertThat(Utils.grpcAwareErrorMessage(wrappedGrpcError)).isEqualTo("ABORTED: grpc error");
45+
assertThat(Utils.grpcAwareErrorMessage(ioError, /* verboseFailures= */ false))
46+
.isEqualTo("io error");
47+
assertThat(Utils.grpcAwareErrorMessage(wrappedGrpcError, /* verboseFailures= */ false))
48+
.isEqualTo("ABORTED: grpc error");
49+
}
50+
51+
@Test
52+
public void testGrpcAwareErrorMessage_verboseFailures() {
53+
IOException ioError = new IOException("io error");
54+
IOException wrappedGrpcError =
55+
new IOException(
56+
"wrapped error", Status.ABORTED.withDescription("grpc error").asRuntimeException());
57+
58+
assertThat(Utils.grpcAwareErrorMessage(ioError, /* verboseFailures= */ true))
59+
.startsWith(
60+
"io error\n"
61+
+ "java.io.IOException: io error\n"
62+
+ "\tat com.google.devtools.build.lib.remote.UtilsTest.testGrpcAwareErrorMessage_verboseFailures");
63+
assertThat(Utils.grpcAwareErrorMessage(wrappedGrpcError, /* verboseFailures= */ true))
64+
.startsWith(
65+
"ABORTED: grpc error\n"
66+
+ "java.io.IOException: wrapped error\n"
67+
+ "\tat com.google.devtools.build.lib.remote.UtilsTest.testGrpcAwareErrorMessage_verboseFailures");
4768
}
4869

4970
@Test

0 commit comments

Comments
 (0)