Example #1
0
        @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();
        }