use of bio.terra.buffer.common.exception.NotFoundException in project terra-resource-buffer by DataBiosphere.
the class PoolService method handoutResourceTransactionally.
/**
* Process handout resource in on transaction (anything failure will cause database rollback).
*/
private Resource handoutResourceTransactionally(PoolId poolId, RequestHandoutId requestHandoutId) {
Optional<Pool> pool = bufferDao.retrievePool(poolId);
if (pool.isEmpty() || !pool.get().status().equals(PoolStatus.ACTIVE)) {
throw new BadRequestException(String.format("Invalid pool id: %s.", poolId));
}
try {
// Retry 20 times of 2 seconds each.
Optional<Resource> resource = executeAndRetry(() -> bufferDao.updateOneReadyResourceToHandedOut(poolId, requestHandoutId), Duration.ofSeconds(2), 20);
Resource result = resource.orElseThrow(() -> new NotFoundException(String.format("No resource is ready to use at this moment for pool: %s. Please try later", poolId)));
logger.info("Handed out resource ID {}, Handout ID {}, Pool ID {}", result.cloudResourceUid(), result.requestHandoutId(), poolId);
return result;
} catch (InterruptedException | DataAccessException e) {
throw new InternalServerErrorException(String.format("Failed to update one resource state from READY to HANDED_OUT for pool %s", poolId));
}
}
use of bio.terra.buffer.common.exception.NotFoundException in project terra-resource-buffer by DataBiosphere.
the class PoolService method getPoolInfo.
/**
* Gets pool information by given {@link PoolId}.
*/
public PoolInfo getPoolInfo(PoolId poolId) {
Optional<PoolAndResourceStates> poolAndResourceStates = bufferDao.retrievePoolAndResourceStatesById(poolId);
if (poolAndResourceStates.isEmpty()) {
throw new NotFoundException(String.format("Pool %s not found", poolId));
}
Pool pool = poolAndResourceStates.get().pool();
Multiset<ResourceState> resourceStates = poolAndResourceStates.get().resourceStates();
return new PoolInfo().poolConfig(new PoolConfig().poolId(poolId.toString()).size(pool.size()).resourceConfigName(pool.resourceConfig().getConfigName())).status(bio.terra.buffer.generated.model.PoolStatus.valueOf(pool.status().toString())).putResourceStateCountItem(ResourceState.CREATING.name(), resourceStates.count(ResourceState.CREATING)).putResourceStateCountItem(ResourceState.READY.name(), resourceStates.count(ResourceState.READY)).putResourceStateCountItem(ResourceState.DELETED.name(), resourceStates.count(ResourceState.DELETED)).putResourceStateCountItem(ResourceState.HANDED_OUT.name(), resourceStates.count(ResourceState.HANDED_OUT));
}
Aggregations