Prefetch inputs before acquiring a worker

This reduces the how long we hold exclusive access to a worker
and will make it easier to measure the queuing time (acquiring
both a worker and the necessary resources).

RELNOTES: None.
PiperOrigin-RevId: 318442224
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 ee2f6ea..898a6ac 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
@@ -343,6 +343,13 @@
       }
 
       try {
+        context.prefetchInputs();
+      } catch (IOException e) {
+        String message = "IOException while prefetching for worker:";
+        throw createUserExecException(e, message, Code.PREFETCH_FAILURE);
+      }
+
+      try {
         worker = workers.borrowObject(key);
         request =
             createWorkRequest(spawn, context, flagFiles, inputFileCache, worker.getWorkerId());
@@ -351,13 +358,6 @@
         throw createUserExecException(e, message, Code.BORROW_FAILURE);
       }
 
-      try {
-        context.prefetchInputs();
-      } catch (IOException e) {
-        String message = "IOException while prefetching for worker:";
-        throw createUserExecException(e, message, Code.PREFETCH_FAILURE);
-      }
-
       try (ResourceHandle handle =
           resourceManager.acquireResources(owner, spawn.getLocalResources())) {
         context.report(ProgressStatus.EXECUTING, WorkerKey.makeWorkerTypeName(key.getProxied()));