-
- OperationCompleter getCompleter() {
- OperationCompleter ret = operationCompleter;
- if (ret == null) {
- final Semaphore s = getLimiter();
- ret = new OperationCompleter(s);
- operationCompleter = ret;
- }
-
- return ret;
- }
-
- Semaphore getLimiter() {
- Semaphore ret = operationLimiter;
- if (ret == null) {
- // Note : Currently mailbox-capacity comes from akka.conf and not from the config-subsystem
- ret = new Semaphore(getActorContext().getTransactionOutstandingOperationLimit());
- operationLimiter = ret;
- }
- return ret;
- }
-
- void throttleOperation() {
- throttleOperation(1);
- }
-
- private void throttleOperation(int acquirePermits) {
- try {
- if (!getLimiter().tryAcquire(acquirePermits,
- getActorContext().getDatastoreContext().getOperationTimeoutInSeconds(), TimeUnit.SECONDS)){
- LOG.warn("Failed to acquire operation permit for transaction {}", getIdentifier());
- }
- } catch (InterruptedException e) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Interrupted when trying to acquire operation permit for transaction {}", getIdentifier(), e);
- } else {
- LOG.warn("Interrupted when trying to acquire operation permit for transaction {}", getIdentifier());
- }
- }
- }