/* * 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(); } } } }