Пример #1
0
 /** Calculate the job state based on the state of its tasks */
 private boolean calculateJobState(boolean force) {
   boolean err = false, sched = false, run = false, reb = false, stopped = false;
   for (JobTask t : nodes) {
     if (t.getWasStopped()) {
       stopped = true;
     }
     if (t.getState() == JobTaskState.REBALANCE) {
       reb = true;
     } else if (t.isRunning()) {
       run = true;
     } else if (t.getState() == JobTaskState.ALLOCATED || t.getState().isQueuedState()) {
       sched = true;
     } else if (t.getState() == JobTaskState.ERROR) {
       err = true;
       break;
     }
   }
   JobState oldJobState = getState();
   JobState nextState =
       (err)
           ? JobState.ERROR
           : (reb)
               ? JobState.REBALANCE
               : (run) ? JobState.RUNNING : (sched) ? JobState.SCHEDULED : JobState.IDLE;
   if (setState(nextState, force)) {
     // If transitioning from error to non-error state, enable job as long as it has run recently.
     if (oldJobState == JobState.ERROR
         && nextState != JobState.ERROR
         && getSubmitTime() != null
         && System.currentTimeMillis() - getSubmitTime() < AUTO_ENABLE_CUTOFF) {
       setEnabled(true);
     }
     wasStopped = stopped;
     return true;
   } else {
     return false;
   }
 }