code: @Override
    public void onFailedTask() {
      LOG.entering("TaskNodeImpl", "onFailedTask", getQualifiedName());
      if (!running.compareAndSet(true, false)) {
        LOG.fine(getQualifiedName() + "Trying to set failed on an already failed task. Something fishy!!!");
        LOG.exiting("TaskNodeImpl", "onFailedTask", getQualifiedName() +
            "Trying to set failed on an already failed task. Something fishy!!!");
        return;
      }
      taskNodeStatus.clearStateAndReleaseLocks();
      LOG.finest(getQualifiedName() + "Changed status to failed.");
      LOG.finest(getQualifiedName() + "Resetting topoSetupSent to false");
      topoSetupSent.set(false);
      if (parent != null && parent.isRunning()) {
        parent.onChildDead(taskId);
      } else {
        LOG.finest(getQualifiedName() + "Skipping asking parent to process child death");
      }
      for (final TaskNode child : children) {
        if (child.isRunning()) {
          child.onParentDead();
        }
      }
      final int newVersion = this.version.incrementAndGet();
      LOG.finest(getQualifiedName() + "Bumping up to version-" + newVersion);
      LOG.exiting("TaskNodeImpl", "onFailedTask", getQualifiedName());
    }
docs: * Methods pertaining to my status change ***.