X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardTransaction.java;h=75744cad5b920b942efda865d0fa6ed29c41f3d7;hb=81aa5072801e6453306e296b91dba3dbeeaf046d;hp=b316b9df04966d82faf19ffc0743994dc684ec4a;hpb=2a35e5ab8c3300757a425841d017097c1fa31e68;p=controller.git 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..75744cad5b 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,40 +43,48 @@ 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 ActorRef shardActor; + private final DOMStoreReadWriteTransaction transaction; + private final MutableCompositeModification modification = new MutableCompositeModification(); + private final LoggingAdapter log = Logging.getLogger(getContext().system(), this); - public ShardTransaction(DOMStoreReadWriteTransaction transaction) { + public ShardTransaction(DOMStoreReadWriteTransaction transaction, ActorRef shardActor) { this.transaction = transaction; + this.shardActor = shardActor; } - public static Props props(final DOMStoreReadWriteTransaction transaction){ + public static Props props(final DOMStoreReadWriteTransaction transaction, final ActorRef shardActor){ return Props.create(new Creator(){ @Override public ShardTransaction create() throws Exception { - return new ShardTransaction(transaction); + return new ShardTransaction(transaction, shardActor); } }); } @@ -89,6 +103,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,23 +135,26 @@ 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()); } private void readyTransaction(ReadyTransaction message){ DOMStoreThreePhaseCommitCohort cohort = transaction.ready(); - ActorRef cohortActor = getContext().actorOf(ThreePhaseCommitCohort.props(cohort)); + ActorRef cohortActor = getContext().actorOf(ThreePhaseCommitCohort.props(cohort, shardActor, modification)); getSender().tell(new ReadyTransactionReply(cohortActor.path()), getSelf()); } @@ -143,4 +163,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; + } + } }