Don't set requestId on non-multiplex requests.
RELNOTES: n/a
PiperOrigin-RevId: 343728512
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 386bf80..7be36ea 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
@@ -293,7 +293,8 @@
Spawn spawn,
SpawnExecutionContext context,
List<String> flagfiles,
- MetadataProvider inputFileCache)
+ MetadataProvider inputFileCache,
+ WorkerKey key)
throws IOException {
WorkRequest.Builder requestBuilder = WorkRequest.newBuilder();
for (String flagfile : flagfiles) {
@@ -318,7 +319,10 @@
.setDigest(digest)
.build();
}
- return requestBuilder.setRequestId(requestIdCounter.getAndIncrement()).build();
+ if (key.getProxied()) {
+ requestBuilder.setRequestId(requestIdCounter.getAndIncrement());
+ }
+ return requestBuilder.build();
}
/**
@@ -420,7 +424,7 @@
try {
worker = workers.borrowObject(key);
worker.setReporter(workerOptions.workerVerbose ? reporter : null);
- request = createWorkRequest(spawn, context, flagFiles, inputFileCache);
+ request = createWorkRequest(spawn, context, flagFiles, inputFileCache, key);
} catch (IOException e) {
String message = "IOException while borrowing a worker from the pool:";
throw createUserExecException(e, message, Code.BORROW_FAILURE);
diff --git a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java
index 16fe7d9..471218c 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java
@@ -55,6 +55,9 @@
// Keep state across multiple builds.
static final LinkedHashMap<String, String> inputs = new LinkedHashMap<>();
+ // Contains the request currently being worked on.
+ private static WorkRequest currentRequest;
+
public static void main(String[] args) throws Exception {
if (ImmutableSet.copyOf(args).contains("--persistent_worker")) {
OptionsParser parser =
@@ -92,6 +95,8 @@
break;
}
+ currentRequest = request;
+
inputs.clear();
for (Input input : request.getInputsList()) {
inputs.put(input.getPath(), input.getDigest().toStringUtf8());
@@ -127,6 +132,7 @@
} finally {
System.setOut(originalStdOut);
System.setErr(originalStdErr);
+ currentRequest = null;
}
if (workerOptions.exitDuring > 0 && workUnitCounter > workerOptions.exitDuring) {
@@ -198,6 +204,10 @@
}
}
+ if (options.printRequests) {
+ outputs.add("REQUEST: " + currentRequest);
+ }
+
if (options.printEnv) {
for (Map.Entry<String, String> entry : System.getenv().entrySet()) {
outputs.add(entry.getKey() + "=" + entry.getValue());
diff --git a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java
index 3e78481..40d6faa 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java
@@ -66,12 +66,19 @@
public boolean writeCounter;
@Option(
- name = "print_inputs",
- documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
- effectTags = {OptionEffectTag.NO_OP},
- defaultValue = "false",
- help = "Writes a list of input files and their digests."
- )
+ name = "print_requests",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.NO_OP},
+ defaultValue = "false",
+ help = "Prints out all requests.")
+ public boolean printRequests;
+
+ @Option(
+ name = "print_inputs",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.NO_OP},
+ defaultValue = "false",
+ help = "Writes a list of input files and their digests.")
public boolean printInputs;
@Option(
diff --git a/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java
index 224c200..0b035a9 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/WorkerSpawnRunnerTest.java
@@ -110,9 +110,8 @@
WorkerKey key = createWorkerKey(fs, "mnem", false);
Path logFile = fs.getPath("/worker.log");
when(worker.getLogFile()).thenReturn(logFile);
- when(worker.getResponse(1))
- .thenReturn(
- WorkResponse.newBuilder().setExitCode(0).setOutput("out").setRequestId(1).build());
+ when(worker.getResponse(0))
+ .thenReturn(WorkResponse.newBuilder().setExitCode(0).setOutput("out").build());
WorkResponse response =
runner.execInWorker(
spawn,
@@ -126,7 +125,7 @@
assertThat(response).isNotNull();
assertThat(response.getExitCode()).isEqualTo(0);
- assertThat(response.getRequestId()).isEqualTo(1);
+ assertThat(response.getRequestId()).isEqualTo(0);
assertThat(response.getOutput()).isEqualTo("out");
assertThat(logFile.exists()).isFalse();
}
@@ -149,7 +148,7 @@
WorkerKey key = createWorkerKey(fs, "mnem", false);
Path logFile = fs.getPath("/worker.log");
when(worker.getLogFile()).thenReturn(logFile);
- when(worker.getResponse(1)).thenThrow(new IOException("Bad protobuf"));
+ when(worker.getResponse(0)).thenThrow(new IOException("Bad protobuf"));
when(worker.getRecordingStreamMessage()).thenReturn(recordedResponse);
String workerLog = "Log from worker\n";
FileSystemUtils.writeIsoLatin1(logFile, workerLog);
diff --git a/src/test/shell/integration/bazel_worker_test.sh b/src/test/shell/integration/bazel_worker_test.sh
index f1dc2e2..438fb99 100755
--- a/src/test/shell/integration/bazel_worker_test.sh
+++ b/src/test/shell/integration/bazel_worker_test.sh
@@ -206,6 +206,39 @@
assert_equals "HELLO WORLD" "$(cat $BINS/hello_world_uppercase.out)"
}
+function test_worker_requests() {
+ prepare_example_worker
+ cat >>BUILD <<EOF
+work(
+ name = "hello_world",
+ worker = ":worker",
+ worker_args = ["--worker_protocol=${WORKER_PROTOCOL}"],
+ args = ["hello world", "--print_requests"],
+)
+
+work(
+ name = "hello_world_uppercase",
+ worker = ":worker",
+ worker_args = ["--worker_protocol=${WORKER_PROTOCOL}"],
+ args = ["--uppercase", "hello world", "--print_requests"],
+)
+EOF
+
+ bazel build :hello_world &> $TEST_log \
+ || fail "build failed"
+ assert_contains "hello world" "$BINS/hello_world.out"
+ assert_contains "arguments: \"hello world\"" "$BINS/hello_world.out"
+ assert_contains "path:.*hello_world_worker_input" "$BINS/hello_world.out"
+ assert_not_contains "request_id" "$BINS/hello_world.out"
+
+ bazel build :hello_world_uppercase &> $TEST_log \
+ || fail "build failed"
+ assert_contains "HELLO WORLD" "$BINS/hello_world_uppercase.out"
+ assert_contains "arguments: \"hello world\"" "$BINS/hello_world_uppercase.out"
+ assert_contains "path:.*hello_world_uppercase_worker_input" "$BINS/hello_world_uppercase.out"
+ assert_not_contains "request_id" "$BINS/hello_world_uppercase.out"
+}
+
function test_shared_worker() {
prepare_example_worker
cat >>BUILD <<EOF