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%2FTransactionContextWrapper.java;h=e8dab2c17ebb12e54241543f7ace660e2940009f;hb=87c8362c7501408b281f5ddc9b78ed7440280fa1;hp=b08d4192b48c1ddd7b3cf3162782b68ef129c855;hpb=d71b6614d6cdb5a98f086edeb56f5c52f365c61c;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionContextWrapper.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionContextWrapper.java index b08d4192b4..e8dab2c17e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionContextWrapper.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionContextWrapper.java @@ -14,8 +14,10 @@ import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.TimeUnit; import javax.annotation.concurrent.GuardedBy; import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier; +import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.Future; @@ -37,6 +39,8 @@ class TransactionContextWrapper { @GuardedBy("queuedTxOperations") private final List queuedTxOperations = Lists.newArrayList(); + private final TransactionIdentifier identifier; + /** * The resulting TransactionContext. */ @@ -44,8 +48,11 @@ class TransactionContextWrapper { private final OperationLimiter limiter; - TransactionContextWrapper(final OperationLimiter limiter) { - this.limiter = Preconditions.checkNotNull(limiter); + TransactionContextWrapper(TransactionIdentifier identifier, final ActorContext actorContext) { + this.identifier = Preconditions.checkNotNull(identifier); + this.limiter = new OperationLimiter(identifier, + actorContext.getDatastoreContext().getShardBatchedModificationCount() + 1, // 1 extra permit for the ready operation + TimeUnit.MILLISECONDS.toSeconds(actorContext.getDatastoreContext().getOperationTimeoutInMillis())); } TransactionContext getTransactionContext() { @@ -53,7 +60,7 @@ class TransactionContextWrapper { } TransactionIdentifier getIdentifier() { - return limiter.getIdentifier(); + return identifier; } /** @@ -106,7 +113,10 @@ class TransactionContextWrapper { if (queuedTxOperations.isEmpty()) { // We're done invoking the TransactionOperations so we can now publish the // TransactionContext. - localTransactionContext.operationHandoffComplete(); + localTransactionContext.operationHandOffComplete(); + if(!localTransactionContext.usesOperationLimiting()){ + limiter.releaseAll(); + } transactionContext = localTransactionContext; break; } @@ -140,4 +150,10 @@ class TransactionContextWrapper { return promise.future(); } + + public OperationLimiter getLimiter() { + return limiter; + } + + }