class ConcurrentDOMDataBroker extends AbstractDOMBroker {

    @Override
    protected FluentFuture<? extends CommitInfo> commit(final DOMDataTreeWriteTransaction transaction,
            final Collection<DOMStoreThreePhaseCommitCohort> cohorts) {

        checkArgument(transaction != null, "Transaction must not be null.");
        checkArgument(cohorts != null, "Cohorts must not be null.");
        LOG.debug("Tx: {} is submitted for execution.", transaction.getIdentifier());

        if (cohorts.isEmpty()) {
            return CommitInfo.emptyFluentFuture();
        }

        final AsyncNotifyingSettableFuture clientSubmitFuture =
                new AsyncNotifyingSettableFuture(clientFutureCallbackExecutor);

        doCanCommit(clientSubmitFuture, transaction, cohorts);

        return FluentFuture.from(clientSubmitFuture).transform(ignored -> CommitInfo.empty(),
                MoreExecutors.directExecutor());
    }

    public  ConcurrentDOMDataBroker(final Map<LogicalDatastoreType, DOMStore> datastores,
            final Executor listenableFutureExecutor);
    public  ConcurrentDOMDataBroker(final Map<LogicalDatastoreType, DOMStore> datastores,
            final Executor listenableFutureExecutor, final DurationStatisticsTracker commitStatsTracker);

}