Improve error message when a persistent worker sends an unparseable response.
Fixes #4897.
PiperOrigin-RevId: 190045930
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java
index f720d8c..1be61e1 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnRunner.java
@@ -314,7 +314,10 @@
recordingStream.readRemaining();
throw new UserExecException(
ErrorMessage.builder()
- .message("Worker process returned an unparseable WorkResponse:")
+ .message(
+ "Worker process returned an unparseable WorkResponse!\n\n"
+ + "Did you try to print something to stdout? Workers aren't allowed to do "
+ + "this, as it breaks the protocol between Bazel and the worker process.")
.logText(recordingStream.getRecordedDataAsString())
.exception(e)
.build()
diff --git a/src/test/shell/integration/bazel_worker_test.sh b/src/test/shell/integration/bazel_worker_test.sh
index fc2e296..f29f746 100755
--- a/src/test/shell/integration/bazel_worker_test.sh
+++ b/src/test/shell/integration/bazel_worker_test.sh
@@ -360,7 +360,8 @@
&& fail "expected build to fail" || true
# Check that a helpful error message was printed.
- expect_log "Worker process returned an unparseable WorkResponse:"
+ expect_log "Worker process returned an unparseable WorkResponse!"
+ expect_log "Did you try to print something to stdout"
expect_log "I'm a poisoned worker and this is not a protobuf."
}