diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java | 32 |
1 files changed, 31 insertions, 1 deletions
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 3c444a2577..8f997536e9 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 @@ -79,6 +79,36 @@ final class WorkerFactory extends BaseKeyedPooledObjectFactory<WorkerKey, Worker @Override public boolean validateObject(WorkerKey key, PooledObject<Worker> p) { Worker worker = p.getObject(); - return key.getWorkerFilesHash().equals(worker.getWorkerFilesHash()) && worker.isAlive(); + + boolean hashMatches = key.getWorkerFilesHash().equals(worker.getWorkerFilesHash()); + boolean workerIsAlive = worker.isAlive(); + boolean workerIsStillValid = hashMatches && workerIsAlive; + + if (reporter != null && !workerIsStillValid) { + StringBuilder msg = new StringBuilder(); + msg.append(key.getMnemonic()); + msg.append(" worker (id "); + msg.append(p.getObject().getWorkerId()); + msg.append(") can no longer be used, because"); + + if (!workerIsAlive) { + msg.append(" its process terminated itself or got killed"); + } + + if (!hashMatches) { + if (!workerIsAlive) { + msg.append(" and"); + } + msg.append(" its files have changed on disk ["); + msg.append(worker.getWorkerFilesHash()); + msg.append(" -> "); + msg.append(key.getWorkerFilesHash()); + msg.append("]"); + } + + reporter.handle(Event.warn(msg.toString())); + } + + return workerIsStillValid; } } |