Refactor TransactionContext.executeModification()
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / TransactionProxy.java
index 019b0dbebe20c18f964b6f8c5f0f385bf59d3a76..98e115efc6270342e4f54ce99f5dcf0e95d99bc8 100644 (file)
@@ -29,13 +29,12 @@ import java.util.SortedSet;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
+import org.opendaylight.controller.cluster.datastore.TransactionModificationOperation.DeleteOperation;
+import org.opendaylight.controller.cluster.datastore.TransactionModificationOperation.MergeOperation;
+import org.opendaylight.controller.cluster.datastore.TransactionModificationOperation.WriteOperation;
 import org.opendaylight.controller.cluster.datastore.messages.AbstractRead;
 import org.opendaylight.controller.cluster.datastore.messages.DataExists;
 import org.opendaylight.controller.cluster.datastore.messages.ReadData;
-import org.opendaylight.controller.cluster.datastore.modification.AbstractModification;
-import org.opendaylight.controller.cluster.datastore.modification.DeleteModification;
-import org.opendaylight.controller.cluster.datastore.modification.MergeModification;
-import org.opendaylight.controller.cluster.datastore.modification.WriteModification;
 import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
 import org.opendaylight.controller.cluster.datastore.utils.NormalizedNodeAggregator;
 import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTransaction;
@@ -104,7 +103,7 @@ public class TransactionProxy extends AbstractDOMStoreTransaction<TransactionIde
         requireNonNull(path, "path should not be null");
 
         LOG.trace("Tx {} read {}", getIdentifier(), path);
-        return path.isEmpty() ? readAllData() :  singleShardRead(shardNameFromIdentifier(path), path);
+        return path.isEmpty() ? readAllData() : singleShardRead(shardNameFromIdentifier(path), path);
     }
 
     private FluentFuture<Optional<NormalizedNode<?, ?>>> singleShardRead(
@@ -138,46 +137,41 @@ public class TransactionProxy extends AbstractDOMStoreTransaction<TransactionIde
 
     @Override
     public void delete(final YangInstanceIdentifier path) {
-        executeModification(new DeleteModification(path));
+        checkModificationState("delete", path);
+
+        executeModification(new DeleteOperation(path));
     }
 
     @Override
     public void merge(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
-        executeModification(new MergeModification(path, data));
+        checkModificationState("merge", path);
+
+        executeModification(new MergeOperation(path, data));
     }
 
     @Override
     public void write(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
-        executeModification(new WriteModification(path, data));
-    }
+        checkModificationState("write", path);
 
-    private void executeModification(final AbstractModification modification) {
-        checkModificationState();
-
-        LOG.trace("Tx {} executeModification {} {}", getIdentifier(), modification.getClass().getSimpleName(),
-                modification.getPath());
+        executeModification(new WriteOperation(path, data));
+    }
 
-        TransactionContextWrapper contextWrapper = getContextWrapper(modification.getPath());
-        contextWrapper.maybeExecuteTransactionOperation(new TransactionOperation() {
-            @Override
-            protected void invoke(final TransactionContext transactionContext, final Boolean havePermit) {
-                transactionContext.executeModification(modification, havePermit);
-            }
-        });
+    private void executeModification(final TransactionModificationOperation operation) {
+        getContextWrapper(operation.path()).maybeExecuteTransactionOperation(operation);
     }
 
-    private void checkModificationState() {
+    private void checkModificationState(final String opName, final YangInstanceIdentifier path) {
         checkState(type != TransactionType.READ_ONLY, "Modification operation on read-only transaction is not allowed");
         checkState(state == TransactionState.OPEN, "Transaction is sealed - further modifications are not allowed");
+        LOG.trace("Tx {} {} {}", getIdentifier(), opName, path);
     }
 
     private boolean seal(final TransactionState newState) {
         if (state == TransactionState.OPEN) {
             state = newState;
             return true;
-        } else {
-            return false;
         }
+        return false;
     }
 
     @Override