class SimpleShardDataTreeCohort extends ShardDataTreeCohort {

    @Override
    public void abort(final FutureCallback<Void> abortCallback) {
        if (!dataTree.startAbort(this)) {
            abortCallback.onSuccess(null);
            return;
        }

        candidate = null;
        state = State.ABORTED;

        final Optional<CompletionStage<?>> maybeAborts = userCohorts.abort();
        if (!maybeAborts.isPresent()) {
            abortCallback.onSuccess(null);
            return;
        }

        maybeAborts.get().whenComplete((noop, failure) -> {
            if (failure != null) {
                abortCallback.onFailure(failure);
            } else {
                abortCallback.onSuccess(null);
            }
        });
    }

      SimpleShardDataTreeCohort(final ShardDataTree dataTree, final DataTreeModification transaction,
            final TransactionIdentifier transactionId, final CompositeDataTreeCohort userCohorts,
            final Optional<SortedSet<String>> participatingShardNames);
      SimpleShardDataTreeCohort(final ShardDataTree dataTree, final DataTreeModification transaction,
        final TransactionIdentifier transactionId, final Exception nextFailure);

}