X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardTransaction.java;h=f43dd7b52a62b745a17929d545107a9b57fbc1ff;hp=b316b9df04966d82faf19ffc0743994dc684ec4a;hb=5ff14f6824d1a831b9c1def6b820a2516fed435f;hpb=3c0667dedcd089624c4de1fdf39f9c971bdce209 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java index b316b9df04..f43dd7b52a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java @@ -28,6 +28,12 @@ import org.opendaylight.controller.cluster.datastore.messages.ReadyTransaction; import org.opendaylight.controller.cluster.datastore.messages.ReadyTransactionReply; import org.opendaylight.controller.cluster.datastore.messages.WriteData; import org.opendaylight.controller.cluster.datastore.messages.WriteDataReply; +import org.opendaylight.controller.cluster.datastore.modification.CompositeModification; +import org.opendaylight.controller.cluster.datastore.modification.DeleteModification; +import org.opendaylight.controller.cluster.datastore.modification.ImmutableCompositeModification; +import org.opendaylight.controller.cluster.datastore.modification.MergeModification; +import org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification; +import org.opendaylight.controller.cluster.datastore.modification.WriteModification; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; @@ -37,27 +43,32 @@ import java.util.concurrent.ExecutionException; /** * The ShardTransaction Actor represents a remote transaction - * + *

* The ShardTransaction Actor delegates all actions to DOMDataReadWriteTransaction - * + *

+ *

* Even though the DOMStore and the DOMStoreTransactionChain implement multiple types of transactions * the ShardTransaction Actor only works with read-write transactions. This is just to keep the logic simple. At this * time there are no known advantages for creating a read-only or write-only transaction which may change over time * at which point we can optimize things in the distributed store as well. - * - * Handles Messages - * ---------------- - * {@link org.opendaylight.controller.cluster.datastore.messages.ReadData} - * {@link org.opendaylight.controller.cluster.datastore.messages.WriteData} - * {@link org.opendaylight.controller.cluster.datastore.messages.MergeData} - * {@link org.opendaylight.controller.cluster.datastore.messages.DeleteData} - * {@link org.opendaylight.controller.cluster.datastore.messages.ReadyTransaction} - * {@link org.opendaylight.controller.cluster.datastore.messages.CloseTransaction} + *

+ *

+ * Handles Messages
+ * ----------------
+ *

  • {@link org.opendaylight.controller.cluster.datastore.messages.ReadData} + *
  • {@link org.opendaylight.controller.cluster.datastore.messages.WriteData} + *
  • {@link org.opendaylight.controller.cluster.datastore.messages.MergeData} + *
  • {@link org.opendaylight.controller.cluster.datastore.messages.DeleteData} + *
  • {@link org.opendaylight.controller.cluster.datastore.messages.ReadyTransaction} + *
  • {@link org.opendaylight.controller.cluster.datastore.messages.CloseTransaction} + *

    */ public class ShardTransaction extends UntypedActor { private final DOMStoreReadWriteTransaction transaction; + private final MutableCompositeModification modification = new MutableCompositeModification(); + private final LoggingAdapter log = Logging.getLogger(getContext().system(), this); public ShardTransaction(DOMStoreReadWriteTransaction transaction) { @@ -89,6 +100,9 @@ public class ShardTransaction extends UntypedActor { readyTransaction((ReadyTransaction) message); } else if(message instanceof CloseTransaction){ closeTransaction((CloseTransaction) message); + } else if(message instanceof GetCompositedModification){ + // This is here for testing only + getSender().tell(new GetCompositeModificationReply(new ImmutableCompositeModification(modification)), getSelf()); } } @@ -118,16 +132,19 @@ public class ShardTransaction extends UntypedActor { private void writeData(WriteData message){ + modification.addModification(new WriteModification(message.getPath(), message.getData())); transaction.write(message.getPath(), message.getData()); getSender().tell(new WriteDataReply(), getSelf()); } private void mergeData(MergeData message){ + modification.addModification(new MergeModification(message.getPath(), message.getData())); transaction.merge(message.getPath(), message.getData()); getSender().tell(new MergeDataReply(), getSelf()); } private void deleteData(DeleteData message){ + modification.addModification(new DeleteModification(message.getPath())); transaction.delete(message.getPath()); getSender().tell(new DeleteDataReply(), getSelf()); } @@ -143,4 +160,25 @@ public class ShardTransaction extends UntypedActor { transaction.close(); getSender().tell(new CloseTransactionReply(), getSelf()); } + + + // These classes are in here for test purposes only + + static class GetCompositedModification { + + } + + static class GetCompositeModificationReply { + private final CompositeModification modification; + + + GetCompositeModificationReply(CompositeModification modification) { + this.modification = modification; + } + + + public CompositeModification getModification() { + return modification; + } + } }