Show users that multiplex-worker is in use

Fix: #10535

Closes #10732.

PiperOrigin-RevId: 303129331
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
index be83573..ea07cff 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
@@ -54,8 +54,9 @@
   @Override
   public Worker create(WorkerKey key) throws Exception {
     int workerId = pidCounter.getAndIncrement();
+    String workTypeName = WorkerKey.makeWorkerTypeName(key.getProxied());
     Path logFile =
-        workerBaseDir.getRelative("worker-" + workerId + "-" + key.getMnemonic() + ".log");
+        workerBaseDir.getRelative(workTypeName + "-" + workerId + "-" + key.getMnemonic() + ".log");
 
     Worker worker;
     boolean sandboxed = workerOptions.workerSandboxing || key.mustBeSandboxed();
@@ -77,9 +78,10 @@
       reporter.handle(
           Event.info(
               String.format(
-                  "Created new %s %s worker (id %d), logging to %s",
+                  "Created new %s %s %s (id %d), logging to %s",
                   sandboxed ? "sandboxed" : "non-sandboxed",
                   key.getMnemonic(),
+                  workTypeName,
                   workerId,
                   logFile)));
     }
@@ -89,7 +91,12 @@
   Path getSandboxedWorkerPath(WorkerKey key, int workerId) {
     String workspaceName = key.getExecRoot().getBaseName();
     return workerBaseDir
-        .getRelative("worker-" + workerId + "-" + key.getMnemonic())
+        .getRelative(
+            WorkerKey.makeWorkerTypeName(key.getProxied())
+                + "-"
+                + workerId
+                + "-"
+                + key.getMnemonic())
         .getRelative(workspaceName);
   }
 
@@ -110,7 +117,10 @@
       reporter.handle(
           Event.info(
               String.format(
-                  "Destroying %s worker (id %d)", key.getMnemonic(), p.getObject().getWorkerId())));
+                  "Destroying %s %s (id %d)",
+                  key.getMnemonic(),
+                  WorkerKey.makeWorkerTypeName(key.getProxied()),
+                  p.getObject().getWorkerId())));
     }
     p.getObject().destroy();
   }
@@ -126,8 +136,10 @@
       StringBuilder msg = new StringBuilder();
       msg.append(
           String.format(
-              "%s worker (id %d) can no longer be used, because its files have changed on disk:",
-              key.getMnemonic(), worker.getWorkerId()));
+              "%s %s (id %d) can no longer be used, because its files have changed on disk:",
+              key.getMnemonic(),
+              WorkerKey.makeWorkerTypeName(key.getProxied()),
+              worker.getWorkerId()));
       TreeSet<PathFragment> files = new TreeSet<>();
       files.addAll(key.getWorkerFilesWithHashes().keySet());
       files.addAll(worker.getWorkerFilesWithHashes().keySet());
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerKey.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerKey.java
index ab96192..5aa7bc7 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerKey.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerKey.java
@@ -110,6 +110,15 @@
     return proxied;
   }
 
+  /** Returns a user-friendly name for this worker type. */
+  public static String makeWorkerTypeName(boolean proxied) {
+    if (proxied) {
+      return "multiplex-worker";
+    } else {
+      return "worker";
+    }
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
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 ea2b558..556ef48 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
@@ -129,7 +129,9 @@
       return fallbackRunner.exec(spawn, context);
     }
 
-    context.report(ProgressStatus.SCHEDULING, getName());
+    context.report(
+        ProgressStatus.SCHEDULING,
+        WorkerKey.makeWorkerTypeName(Spawns.supportsMultiplexWorkers(spawn)));
     return actuallyExec(spawn, context);
   }
 
@@ -358,7 +360,7 @@
 
       try (ResourceHandle handle =
           resourceManager.acquireResources(owner, spawn.getLocalResources())) {
-        context.report(ProgressStatus.EXECUTING, getName());
+        context.report(ProgressStatus.EXECUTING, WorkerKey.makeWorkerTypeName(key.getProxied()));
         try {
           worker.prepareExecution(inputFiles, outputs, key.getWorkerFilesWithHashes().keySet());
         } catch (IOException e) {
diff --git a/src/test/java/com/google/devtools/build/lib/worker/WorkerKeyTest.java b/src/test/java/com/google/devtools/build/lib/worker/WorkerKeyTest.java
index a0a0fe2..83bbc01 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/WorkerKeyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/WorkerKeyTest.java
@@ -48,6 +48,8 @@
   public void testWorkerKeyGetter() {
     assertThat(workerKey.mustBeSandboxed()).isEqualTo(true);
     assertThat(workerKey.getProxied()).isEqualTo(true);
+    assertThat(WorkerKey.makeWorkerTypeName(false)).isEqualTo("worker");
+    assertThat(WorkerKey.makeWorkerTypeName(true)).isEqualTo("multiplex-worker");
     // Hash code contains args, env, execRoot, and mnemonic.
     assertThat(workerKey.hashCode()).isEqualTo(322455166);
   }
diff --git a/src/test/shell/integration/bazel_worker_multiplexer_test.sh b/src/test/shell/integration/bazel_worker_multiplexer_test.sh
index d64c3ec..564bffe 100755
--- a/src/test/shell/integration/bazel_worker_multiplexer_test.sh
+++ b/src/test/shell/integration/bazel_worker_multiplexer_test.sh
@@ -371,8 +371,8 @@
 
   bazel build --worker_quit_after_build :hello_world_1 &> $TEST_log \
     || fail "build failed"
-  expect_log "Created new ${WORKER_TYPE_LOG_STRING} Work worker (id [0-9]\+)"
-  expect_log "Destroying Work worker (id [0-9]\+)"
+  expect_log "Created new ${WORKER_TYPE_LOG_STRING} Work multiplex-worker (id [0-9]\+)"
+  expect_log "Destroying Work multiplex-worker (id [0-9]\+)"
   expect_log "Build completed, shutting down worker pool..."
 }
 
@@ -389,9 +389,9 @@
   bazel build --worker_quit_after_build :hello_world_1 &> $TEST_log \
     || fail "build failed"
 
-  expect_log "Created new ${WORKER_TYPE_LOG_STRING} Work worker (id [0-9]\+)"
+  expect_log "Created new ${WORKER_TYPE_LOG_STRING} Work multiplex-worker (id [0-9]\+)"
 
-  worker_log=$(egrep -o -- 'logging to .*/b(azel|laze)-workers/worker-[0-9]-Work.log' "$TEST_log" | sed 's/^logging to //')
+  worker_log=$(egrep -o -- 'logging to .*/b(azel|laze)-workers/multiplex-worker-[0-9]-Work.log' "$TEST_log" | sed 's/^logging to //')
 
   [ -e "$worker_log" ] \
     || fail "Worker log was not found"
@@ -420,8 +420,8 @@
   bazel build --worker_quit_after_build :hello_world &> $TEST_log \
     || fail "build failed"
 
-  expect_not_log "Created new ${WORKER_TYPE_LOG_STRING} Work worker (id [0-9]\+)"
-  expect_not_log "Destroying Work worker (id [0-9]\+)"
+  expect_not_log "Created new ${WORKER_TYPE_LOG_STRING} Work multiplex-worker (id [0-9]\+)"
+  expect_not_log "Destroying Work multiplex-worker (id [0-9]\+)"
 
   # WorkerSpawnStrategy falls back to standalone strategy, so we still expect the output to be generated.
   [ -e "$BINS/hello_world.out" ] \
@@ -460,12 +460,12 @@
   bazel build :hello_clean &> $TEST_log \
     || fail "build failed"
   assert_equals "hello clean" "$(cat $BINS/hello_clean.out)"
-  expect_log "Created new ${WORKER_TYPE_LOG_STRING} Work worker (id [0-9]\+)"
+  expect_log "Created new ${WORKER_TYPE_LOG_STRING} Work multiplex-worker (id [0-9]\+)"
 
   bazel clean &> $TEST_log \
     || fail "clean failed"
   expect_log "Clean command is running, shutting down worker pool..."
-  expect_log "Destroying Work worker (id [0-9]\+)"
+  expect_log "Destroying Work multiplex-worker (id [0-9]\+)"
 }
 
 function test_crashed_worker_causes_log_dump() {