Migrate use of AbstractDOMStoreTransaction
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / databroker / ClientBackedTransactionChain.java
index 4168fc9acd835ca09034a47389719697fda5cedc..3893dbd21f89f2363cfe3f424e150682728669be 100644 (file)
@@ -7,15 +7,18 @@
  */
 package org.opendaylight.controller.cluster.databroker;
 
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.WeakHashMap;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.controller.cluster.databroker.actors.dds.AbstractClientHandle;
 import org.opendaylight.controller.cluster.databroker.actors.dds.ClientLocalHistory;
 import org.opendaylight.controller.cluster.databroker.actors.dds.ClientSnapshot;
 import org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransaction;
-import org.opendaylight.mdsal.common.api.TransactionChainClosedException;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain;
@@ -38,7 +41,7 @@ final class ClientBackedTransactionChain implements DOMStoreTransactionChain {
     private final boolean debugAllocation;
 
     ClientBackedTransactionChain(final ClientLocalHistory history, final boolean debugAllocation) {
-        this.history = Preconditions.checkNotNull(history);
+        this.history = requireNonNull(history);
         this.debugAllocation = debugAllocation;
     }
 
@@ -59,12 +62,19 @@ final class ClientBackedTransactionChain implements DOMStoreTransactionChain {
 
     @Override
     public synchronized void close() {
+        final List<TransactionIdentifier> abortedSnapshots = new ArrayList<>();
         for (AbstractClientHandle<?> snap : openSnapshots.keySet()) {
-            LOG.warn("Aborting unclosed transaction {}", snap.getIdentifier());
-            snap.abort();
+            final TransactionIdentifier id = snap.getIdentifier();
+            LOG.debug("Aborting recorded transaction {}", id);
+            if (snap.abort()) {
+                abortedSnapshots.add(id);
+            }
         }
         openSnapshots.clear();
 
+        if (!abortedSnapshots.isEmpty()) {
+            LOG.warn("Aborted unclosed transactions {}", abortedSnapshots, new Throwable("at"));
+        }
         history.close();
     }
 
@@ -73,19 +83,11 @@ final class ClientBackedTransactionChain implements DOMStoreTransactionChain {
     }
 
     private ClientSnapshot createSnapshot() {
-        try {
-            return recordSnapshot(history.takeSnapshot());
-        } catch (org.opendaylight.mdsal.common.api.TransactionChainClosedException e) {
-            throw new TransactionChainClosedException("Transaction chain has been closed", e);
-        }
+        return recordSnapshot(history.takeSnapshot());
     }
 
     private ClientTransaction createTransaction() {
-        try {
-            return recordSnapshot(history.createTransaction());
-        } catch (org.opendaylight.mdsal.common.api.TransactionChainClosedException e) {
-            throw new TransactionChainClosedException("Transaction chain has been closed", e);
-        }
+        return recordSnapshot(history.createTransaction());
     }
 
     private Throwable allocationContext() {