Beispiel #1
0
 @Override
 public void killFragment(String fragmentId) {
   synchronized (lock) {
     TaskWrapper taskWrapper = knownTasks.remove(fragmentId);
     // Can be null since the task may have completed meanwhile.
     if (taskWrapper != null) {
       if (taskWrapper.inWaitQueue) {
         if (isDebugEnabled) {
           LOG.debug("Removing {} from waitQueue", fragmentId);
         }
         taskWrapper.setIsInWaitQueue(false);
         waitQueue.remove(taskWrapper);
       }
       if (taskWrapper.inPreemptionQueue) {
         if (isDebugEnabled) {
           LOG.debug("Removing {} from preemptionQueue", fragmentId);
         }
         taskWrapper.setIsInPreemptableQueue(false);
         preemptionQueue.remove(taskWrapper);
       }
       taskWrapper.getTaskRunnerCallable().killTask();
     } else {
       LOG.info("Ignoring killFragment request for {} since it isn't known", fragmentId);
     }
     lock.notify();
   }
 }
Beispiel #2
0
  private void finishableStateUpdated(TaskWrapper taskWrapper, boolean newFinishableState) {
    synchronized (lock) {
      if (taskWrapper.isInWaitQueue()) {
        // Re-order the wait queue
        LOG.debug(
            "Re-ordering the wait queue since {} finishable state moved to {}",
            taskWrapper.getRequestId(),
            newFinishableState);
        if (waitQueue.remove(taskWrapper)) {
          // Put element back only if it existed.
          waitQueue.offer(taskWrapper);
        } else {
          LOG.warn(
              "Failed to remove {} from waitQueue",
              taskWrapper.getTaskRunnerCallable().getRequestId());
        }
      }

      if (newFinishableState == true && taskWrapper.isInPreemptionQueue()) {
        LOG.debug(
            "Removing {} from preemption queue because it's state changed to {}",
            taskWrapper.getRequestId(),
            newFinishableState);
        preemptionQueue.remove(taskWrapper.getTaskRunnerCallable());
      } else if (newFinishableState == false
          && !taskWrapper.isInPreemptionQueue()
          && !taskWrapper.isInWaitQueue()) {
        LOG.debug(
            "Adding {} to preemption queue since finishable state changed to {}",
            taskWrapper.getRequestId(),
            newFinishableState);
        preemptionQueue.offer(taskWrapper);
      }
      lock.notify();
    }
  }