import java.util.List;
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;
@GuardedBy("queuedTxOperations")
private final List<TransactionOperation> queuedTxOperations = Lists.newArrayList();
+ private final TransactionIdentifier identifier;
+
/**
* The resulting TransactionContext.
*/
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
+ actorContext.getDatastoreContext().getOperationTimeoutInSeconds());
}
TransactionContext getTransactionContext() {
}
TransactionIdentifier getIdentifier() {
- return limiter.getIdentifier();
+ return identifier;
}
/**
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;
}
return promise.future();
}
+
+ public OperationLimiter getLimiter() {
+ return limiter;
+ }
+
+
}