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=dfd60afa21b84c7462a5459bc8752d4548276e57;hb=b5cb353e3553a39f576c284119af75ffa5ea66a9;hp=2b109b056c55c5d70f9f43a1f8ff01a1184b6c47;hpb=925cb4a228d0fda99c7bfeb432eb25285a223887;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 2b109b056c..dfd60afa21 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 @@ -15,6 +15,7 @@ import akka.actor.ReceiveTimeout; import akka.japi.Creator; import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActorWithMetering; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; @@ -22,6 +23,7 @@ import org.opendaylight.controller.cluster.datastore.messages.CloseTransaction; import org.opendaylight.controller.cluster.datastore.messages.CloseTransactionReply; import org.opendaylight.controller.cluster.datastore.messages.DataExists; import org.opendaylight.controller.cluster.datastore.messages.DataExistsReply; +import org.opendaylight.controller.cluster.datastore.messages.PersistAbortTransactionPayload; import org.opendaylight.controller.cluster.datastore.messages.ReadData; import org.opendaylight.controller.cluster.datastore.messages.ReadDataReply; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; @@ -34,17 +36,18 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public abstract class ShardTransaction extends AbstractUntypedActorWithMetering { private final ActorRef shardActor; private final ShardStats shardStats; - private final TransactionIdentifier transactionID; + private final TransactionIdentifier transactionId; - protected ShardTransaction(ActorRef shardActor, ShardStats shardStats, TransactionIdentifier transactionID) { + protected ShardTransaction(final ActorRef shardActor, final ShardStats shardStats, + final TransactionIdentifier transactionId) { super("shard-tx"); //actor name override used for metering. This does not change the "real" actor name this.shardActor = shardActor; this.shardStats = shardStats; - this.transactionID = Preconditions.checkNotNull(transactionID); + this.transactionId = Preconditions.checkNotNull(transactionId); } - public static Props props(TransactionType type, AbstractShardDataTreeTransaction transaction, - ActorRef shardActor, DatastoreContext datastoreContext, ShardStats shardStats) { + public static Props props(final TransactionType type, final AbstractShardDataTreeTransaction transaction, + final ActorRef shardActor, final DatastoreContext datastoreContext, final ShardStats shardStats) { return Props.create(new ShardTransactionCreator(type, transaction, shardActor, datastoreContext, shardStats)); } @@ -54,16 +57,16 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering return shardActor; } - protected final TransactionIdentifier getTransactionID() { - return transactionID; + protected final TransactionIdentifier getTransactionId() { + return transactionId; } @Override - public void handleReceive(Object message) { + public void handleReceive(final Object message) { if (CloseTransaction.isSerializedType(message)) { closeTransaction(true); } else if (message instanceof ReceiveTimeout) { - LOG.debug("Got ReceiveTimeout for inactivity - closing transaction {}", transactionID); + LOG.debug("Got ReceiveTimeout for inactivity - closing transaction {}", transactionId); closeTransaction(false); } else { unknownMessage(message); @@ -74,8 +77,9 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering return true; } - private void closeTransaction(boolean sendReply) { - getDOMStoreTransaction().abort(); + private void closeTransaction(final boolean sendReply) { + getDOMStoreTransaction().abortFromTransactionActor(); + shardActor.tell(new PersistAbortTransactionPayload(transactionId), ActorRef.noSender()); if (sendReply && returnCloseTransactionReply()) { getSender().tell(new CloseTransactionReply(), getSelf()); @@ -84,7 +88,7 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering getSelf().tell(PoisonPill.getInstance(), getSelf()); } - private boolean checkClosed(AbstractShardDataTreeTransaction transaction) { + private boolean checkClosed(final AbstractShardDataTreeTransaction transaction) { final boolean ret = transaction.isClosed(); if (ret) { shardStats.incrementFailedReadTransactionsCount(); @@ -94,7 +98,7 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering return ret; } - protected void readData(AbstractShardDataTreeTransaction transaction, ReadData message) { + protected void readData(final AbstractShardDataTreeTransaction transaction, final ReadData message) { if (checkClosed(transaction)) { return; } @@ -105,7 +109,7 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering sender().tell(readDataReply.toSerializable(), self()); } - protected void dataExists(AbstractShardDataTreeTransaction transaction, DataExists message) { + protected void dataExists(final AbstractShardDataTreeTransaction transaction, final DataExists message) { if (checkClosed(transaction)) { return; } @@ -115,6 +119,8 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering getSender().tell(new DataExistsReply(exists, message.getVersion()).toSerializable(), getSelf()); } + @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "Some fields are not Serializable but we don't " + + "create remote instances of this actor and thus don't need it to be Serializable.") private static class ShardTransactionCreator implements Creator { private static final long serialVersionUID = 1L; @@ -125,8 +131,8 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering final ShardStats shardStats; final TransactionType type; - ShardTransactionCreator(TransactionType type, AbstractShardDataTreeTransaction transaction, - ActorRef shardActor, DatastoreContext datastoreContext, ShardStats shardStats) { + ShardTransactionCreator(final TransactionType type, final AbstractShardDataTreeTransaction transaction, + final ActorRef shardActor, final DatastoreContext datastoreContext, final ShardStats shardStats) { this.transaction = Preconditions.checkNotNull(transaction); this.shardActor = shardActor; this.shardStats = shardStats;