X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2FAbstractDOMBrokerWriteTransaction.java;h=cfc6c283856f8810e67430de02aaab9a45fd9aa3;hp=5dd8bd3e3ed7fcb0b42b3fd3acb6a32f2f229d65;hb=7ab6f974861e01daa16ff56658eeb1be163cbfec;hpb=d6dc62697ecc8fea9098fb2011a666312c1f0ff7 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java index 5dd8bd3e3e..cfc6c28385 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java @@ -22,6 +22,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.md.sal.dom.broker.impl.TransactionCommitFailedExceptionMapper; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionFactory; import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; @@ -131,6 +132,7 @@ public abstract class AbstractDOMBrokerWriteTransaction submit() { final AbstractDOMTransactionFactory impl = IMPL_UPDATER.getAndSet(this, null); checkRunning(impl); @@ -138,12 +140,17 @@ public abstract class AbstractDOMBrokerWriteTransaction txns = getSubtransactions(); final Collection cohorts = new ArrayList<>(txns.size()); - // FIXME: deal with errors thrown by backed (ready and submit can fail in theory) - for (final T txn : txns) { - cohorts.add(txn.ready()); - } + CheckedFuture ret; + try { + for (final T txn : txns) { + cohorts.add(txn.ready()); + } - final CheckedFuture ret = impl.submit(this, cohorts); + ret = impl.submit(this, cohorts); + } catch (RuntimeException e) { + ret = Futures.immediateFailedCheckedFuture( + TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER.apply(e)); + } FUTURE_UPDATER.lazySet(this, ret); return ret; }