@Override public void handle(Resources.Cancel event) { TaskPlaceholder.Deferred placeholder = waitingConfirmation.remove(event.taskId); if (placeholder != null) { borrowers.claim(placeholder.taskMaster, placeholder.required); // res.workingQueue.running.remove(remove.getId()); log.debug("{} REMOVED {}", getId(), event.taskId); pop(); } else { log.warn("Cancelling a non-waiting task?"); } }
@Override public void handle(FdetPort.Dead event) { ArrayList<Long> removed = new ArrayList<Long>(); boolean popAfter = false; Iterator<Entry<Long, TaskPlaceholder.Direct>> i = res.workingQueue.running.entrySet().iterator(); while (i.hasNext()) { Entry<Long, TaskPlaceholder.Direct> e = i.next(); TaskPlaceholder.Direct tph = e.getValue(); if (tph.taskMaster.equals(event.ref)) { borrowers.claim(event.ref, tph.task.required); removed.add(e.getKey()); i.remove(); popAfter = true; } } Iterator<Entry<Long, Deferred>> j = waitingConfirmation.entrySet().iterator(); while (j.hasNext()) { Entry<Long, TaskPlaceholder.Deferred> e = j.next(); TaskPlaceholder.Deferred tph = e.getValue(); if (tph.taskMaster.equals(event.ref)) { borrowers.claim(event.ref, tph.required); removed.add(e.getKey()); j.remove(); } } assert borrowers.countCredits(event.ref) == 0; log.debug( getId() + ": {} DETECTED AS DEAD. RELEASED RESOURCES FOR {}", event.ref.getIp().getHostAddress(), removed); /* If we eliminated at least one running task, the pop() call will be skipped. * We need therefore to do it here. */ if (popAfter) pop(); }
@Override public void handle(TaskDone event) { TaskPlaceholder.Direct tph = res.workingQueue.running.remove(event.referenceId); if (tph == null) { log.error(getId() + " IGNORING TASK " + event.referenceId + ", TASK MASTER WAS FAULTY"); } else { Task t = tph.task; t.deallocate(); borrowers.claim(tph.taskMaster, t.required); res.workingQueue.done.add(t); log.info( "{} Done {}, QueueTime={}, TotalTime={}", new Object[] { getId(), t.id, t.getQueueTime(), (float) (t.timeToHoldResource) / t.getTotalTime() }); trigger(new Resources.Completed(tph.taskMaster, t), workerPort); /* last */ pop(); } }