BUG-5280: move transactions keeping to history
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / databroker / actors / dds / ClientLocalHistory.java
index 807cf98cb73b3dcf5e4841eaf0f4d5b171ac025f..102d0506173a24bfc01bb6239e7fa4af98cc9698 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.controller.cluster.databroker.actors.dds;
 import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Verify;
-import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import java.util.Optional;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
@@ -27,27 +27,10 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  */
 @Beta
 public final class ClientLocalHistory extends AbstractClientHistory implements AutoCloseable {
-
-    private static final AtomicLongFieldUpdater<ClientLocalHistory> NEXT_TX_UPDATER =
-            AtomicLongFieldUpdater.newUpdater(ClientLocalHistory.class, "nextTx");
-
-    // Used via NEXT_TX_UPDATER
-    @SuppressWarnings("unused")
-    private volatile long nextTx = 0;
-
     ClientLocalHistory(final DistributedDataStoreClientBehavior client, final LocalHistoryIdentifier historyId) {
         super(client, historyId);
     }
 
-    public ClientTransaction createTransaction() {
-        final State local = state();
-        Preconditions.checkState(local == State.IDLE, "Local history %s state is %s", this, local);
-        updateState(local, State.TX_OPEN);
-
-        return new ClientTransaction(this, new TransactionIdentifier(getIdentifier(),
-            NEXT_TX_UPDATER.getAndIncrement(this)));
-    }
-
     @Override
     public void close() {
         final State local = state();
@@ -58,10 +41,28 @@ public final class ClientLocalHistory extends AbstractClientHistory implements A
     }
 
     @Override
-    void onTransactionReady(final ClientTransaction transaction) {
+    ClientTransaction doCreateTransaction() {
+        final State local = state();
+        Preconditions.checkState(local == State.IDLE, "Local history %s state is %s", this, local);
+        updateState(local, State.TX_OPEN);
+
+        return new ClientTransaction(this, new TransactionIdentifier(getIdentifier(), nextTx()));
+    }
+
+    @Override
+    AbstractTransactionCommitCohort onTransactionReady(final TransactionIdentifier txId,
+            final AbstractTransactionCommitCohort cohort) {
+        // FIXME: deal with CLOSED here
         final State local = state();
         Verify.verify(local == State.TX_OPEN, "Local history %s is in unexpected state %s", this, local);
         updateState(local, State.IDLE);
-        super.onTransactionReady(transaction);
+
+        return super.onTransactionReady(txId, cohort);
+    }
+
+    @Override
+    AbstractProxyHistory createHistoryProxy(final LocalHistoryIdentifier historyId,
+            final Optional<ShardBackendInfo> backendInfo) {
+        return AbstractProxyHistory.createClient(getClient(), backendInfo, historyId);
     }
 }