/*
  * This is called when
  * 1) Current file deletion task ran and finished.
  * 2) This can be even directly called by predecessor task if one of the
  * dependent tasks of it has failed marking its success = false.
  */
 private synchronized void fileDeletionTaskFinished() {
   try {
     delService.stateStore.removeDeletionTask(taskId);
   } catch (IOException e) {
     LOG.error("Unable to remove deletion task " + taskId + " from state store", e);
   }
   Iterator<FileDeletionTask> successorTaskI = this.successorTaskSet.iterator();
   while (successorTaskI.hasNext()) {
     FileDeletionTask successorTask = successorTaskI.next();
     if (!success) {
       successorTask.setSuccess(success);
     }
     int count = successorTask.decrementAndGetPendingPredecessorTasks();
     if (count == 0) {
       if (successorTask.getSucess()) {
         successorTask.delService.scheduleFileDeletionTask(successorTask);
       } else {
         successorTask.fileDeletionTaskFinished();
       }
     }
   }
 }