From 9e4b94dba7bddbbe13c357c88377657e57f2864c Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 1 Oct 2018 11:50:13 +0200 Subject: [PATCH] Correct exception handling in LegacyDOMDataBrokerAdapter When a TransactionChain is closed, we need to make sure we throw the correct (controller) exception instead of re-wrapping the mdsal one. Change-Id: I74434115fe14a18ba520fc789fa8a21d932a4a15 Signed-off-by: Robert Varga --- .../core/compat/LegacyDOMDataBrokerAdapter.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/opendaylight/md-sal/sal-dom-compat/src/main/java/org/opendaylight/controller/sal/core/compat/LegacyDOMDataBrokerAdapter.java b/opendaylight/md-sal/sal-dom-compat/src/main/java/org/opendaylight/controller/sal/core/compat/LegacyDOMDataBrokerAdapter.java index 9d68bd3bd9..2367244e4f 100644 --- a/opendaylight/md-sal/sal-dom-compat/src/main/java/org/opendaylight/controller/sal/core/compat/LegacyDOMDataBrokerAdapter.java +++ b/opendaylight/md-sal/sal-dom-compat/src/main/java/org/opendaylight/controller/sal/core/compat/LegacyDOMDataBrokerAdapter.java @@ -20,6 +20,7 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Supplier; import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.common.api.MappingCheckedFuture; import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; @@ -27,6 +28,7 @@ import org.opendaylight.controller.md.sal.common.api.data.DataStoreUnavailableEx import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataTreeChangeListener; @@ -180,17 +182,17 @@ public class LegacyDOMDataBrokerAdapter extends ForwardingObject implements DOMD legacyChain.set(new DOMTransactionChain() { @Override public DOMDataReadOnlyTransaction newReadOnlyTransaction() { - return new DOMDataReadOnlyTransactionAdapter(delegateChain.newReadOnlyTransaction()); + return new DOMDataReadOnlyTransactionAdapter(wrapException(delegateChain::newReadOnlyTransaction)); } @Override public DOMDataReadWriteTransaction newReadWriteTransaction() { - return new DOMDataTransactionAdapter(delegateChain.newReadWriteTransaction()); + return new DOMDataTransactionAdapter(wrapException(delegateChain::newReadWriteTransaction)); } @Override public DOMDataWriteTransaction newWriteOnlyTransaction() { - return new DOMDataTransactionAdapter(delegateChain.newWriteOnlyTransaction()); + return new DOMDataTransactionAdapter(wrapException(delegateChain::newWriteOnlyTransaction)); } @Override @@ -202,6 +204,14 @@ public class LegacyDOMDataBrokerAdapter extends ForwardingObject implements DOMD return legacyChain.get(); } + static T wrapException(final Supplier supplier) { + try { + return supplier.get(); + } catch (org.opendaylight.mdsal.common.api.TransactionChainClosedException e) { + throw new TransactionChainClosedException("Transaction chain already closed", e); + } + } + private static class DOMDataTransactionAdapter implements DOMDataReadWriteTransaction { private final DOMDataTreeReadTransaction readDelegate; private final DOMDataTreeWriteTransaction writeDelegate; -- 2.36.6