BUG-5280: add AbstractClientConnection
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / databroker / actors / dds / ClientTransaction.java
index 81d00ee8bce3279842696f6a912d4744423a2e47..8450c67224fb7625bffbf64d3d4741737d3049db 100644 (file)
@@ -12,12 +12,12 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Iterables;
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Iterables;
 import com.google.common.util.concurrent.CheckedFuture;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort;
+import org.opendaylight.mdsal.common.api.ReadFailedException;
+import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
 import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -62,7 +62,7 @@ public final class ClientTransaction extends LocalAbortable implements Identifia
     private static final int OPEN_STATE = 0;
     private static final int CLOSED_STATE = 1;
 
     private static final int OPEN_STATE = 0;
     private static final int CLOSED_STATE = 1;
 
-    private final Map<Long, AbstractProxyTransaction> proxies = new HashMap<>();
+    private final Map<Long, AbstractProxyTransaction> proxies = new ConcurrentHashMap<>();
     private final TransactionIdentifier transactionId;
     private final AbstractClientHistory parent;
 
     private final TransactionIdentifier transactionId;
     private final AbstractClientHistory parent;
 
@@ -84,8 +84,7 @@ public final class ClientTransaction extends LocalAbortable implements Identifia
     private AbstractProxyTransaction ensureProxy(final YangInstanceIdentifier path) {
         checkNotClosed();
 
     private AbstractProxyTransaction ensureProxy(final YangInstanceIdentifier path) {
         checkNotClosed();
 
-        final ModuleShardBackendResolver resolver = parent.getClient().resolver();
-        final Long shard = resolver.resolveShardForPath(path);
+        final Long shard = parent.resolveShardForPath(path);
         return proxies.computeIfAbsent(shard, this::createProxy);
     }
 
         return proxies.computeIfAbsent(shard, this::createProxy);
     }
 
@@ -116,13 +115,13 @@ public final class ClientTransaction extends LocalAbortable implements Identifia
 
     private boolean ensureClosed() {
         final int local = state;
 
     private boolean ensureClosed() {
         final int local = state;
-        if (local != CLOSED_STATE) {
-            final boolean success = STATE_UPDATER.compareAndSet(this, OPEN_STATE, CLOSED_STATE);
-            Preconditions.checkState(success, "Transaction %s raced during close", this);
-            return true;
-        } else {
+        if (local == CLOSED_STATE) {
             return false;
         }
             return false;
         }
+
+        final boolean success = STATE_UPDATER.compareAndSet(this, OPEN_STATE, CLOSED_STATE);
+        Preconditions.checkState(success, "Transaction %s raced during close", this);
+        return true;
     }
 
     public DOMStoreThreePhaseCommitCohort ready() {
     }
 
     public DOMStoreThreePhaseCommitCohort ready() {