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()));