aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
diff options
context:
space:
mode:
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.java32
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;
}
}