Code Review
/
mdsal.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Fix infinite loop on cancel transaction
[mdsal.git]
/
dom
/
mdsal-dom-broker
/
src
/
main
/
java
/
org
/
opendaylight
/
mdsal
/
dom
/
broker
/
DOMForwardedWriteTransaction.java
diff --git
a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMForwardedWriteTransaction.java
b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMForwardedWriteTransaction.java
index 6292f82e3add44f7fe31f24de44eba68ba09b2fc..2c9cb721c1a61f6ec0a6b780261fdfe755a348c7 100644
(file)
--- a/
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMForwardedWriteTransaction.java
+++ b/
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMForwardedWriteTransaction.java
@@
-124,6
+124,7
@@
class DOMForwardedWriteTransaction<T extends DOMStoreWriteTransaction> extends
}
@Override
}
@Override
+ @SuppressWarnings("checkstyle:illegalcatch")
public CheckedFuture<Void, TransactionCommitFailedException> submit() {
final AbstractDOMForwardedTransactionFactory<?> impl = IMPL_UPDATER.getAndSet(this, null);
checkRunning(impl);
public CheckedFuture<Void, TransactionCommitFailedException> submit() {
final AbstractDOMForwardedTransactionFactory<?> impl = IMPL_UPDATER.getAndSet(this, null);
checkRunning(impl);
@@
-131,12
+132,17
@@
class DOMForwardedWriteTransaction<T extends DOMStoreWriteTransaction> extends
final Collection<T> txns = getSubtransactions();
final Collection<DOMStoreThreePhaseCommitCohort> cohorts = new ArrayList<>(txns.size());
final Collection<T> txns = getSubtransactions();
final Collection<DOMStoreThreePhaseCommitCohort> cohorts = new ArrayList<>(txns.size());
- // FIXME: deal with errors thrown by backed (ready and submit can fail in theory)
- for (final DOMStoreWriteTransaction txn : txns) {
- cohorts.add(txn.ready());
- }
+ CheckedFuture<Void, TransactionCommitFailedException> ret;
+ try {
+ for (final DOMStoreWriteTransaction txn : txns) {
+ cohorts.add(txn.ready());
+ }
- final CheckedFuture<Void, TransactionCommitFailedException> 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;
}
FUTURE_UPDATER.lazySet(this, ret);
return ret;
}