Search in sources :

Example 6 with BufferApi

use of bio.terra.buffer.api.BufferApi in project terra-resource-buffer by DataBiosphere.

the class BufferServiceUtils method pollUntilResourceCountExceeds.

/**
 * Poll pool info from Buffer Service until READY resource is more than expect number.
 */
public static PoolInfo pollUntilResourceCountExceeds(ServerSpecification server, Duration timeout, int mimimumSize) throws InterruptedException, ApiException, IOException {
    Instant deadline = Instant.now().plus(timeout);
    int count = 0;
    while (true) {
        ApiClient apiClient = BufferServiceUtils.getClient(server);
        BufferApi bufferApi = new BufferApi(apiClient);
        count++;
        PoolInfo poolInfo = bufferApi.getPoolInfo(POOL_ID);
        logger.info("Total polling count: {}, poolInfo: {}", count, poolInfo);
        if (poolInfo.getResourceStateCount().get("READY") >= mimimumSize) {
            logger.info("Done after {} times poll. ", count);
            return poolInfo;
        }
        if (Instant.now().plus(POLLING_INTERVAL).isAfter(deadline)) {
            throw new InterruptedException("Timeout during pollUntilPoolFull");
        }
        Thread.sleep(POLLING_INTERVAL.toMillis());
    }
}
Also used : BufferApi(bio.terra.buffer.api.BufferApi) Instant(java.time.Instant) PoolInfo(bio.terra.buffer.model.PoolInfo) ApiClient(bio.terra.buffer.client.ApiClient)

Example 7 with BufferApi

use of bio.terra.buffer.api.BufferApi in project terra-workspace-manager by DataBiosphere.

the class BufferService method getPoolInfo.

/**
 * Return the PoolInfo object for the ResourceBuffer pool that we are using to create Google Cloud
 * projects. Note that this is configured once per Workspace Manager instance (both the instance
 * of RBS to use and which pool) so no configuration happens here.
 *
 * @return PoolInfo
 */
@Traced
public PoolInfo getPoolInfo() {
    try {
        BufferApi bufferApi = bufferApi(bufferServiceConfiguration.getInstanceUrl());
        PoolInfo info = bufferApi.getPoolInfo(bufferServiceConfiguration.getPoolId());
        logger.info("Retrieved pool {} on Buffer Service instance {}", bufferServiceConfiguration.getPoolId(), bufferServiceConfiguration.getInstanceUrl());
        return info;
    } catch (IOException e) {
        throw new BufferServiceAuthorizationException("Error reading or parsing credentials file", e.getCause());
    } catch (ApiException e) {
        if (e.getCode() == HttpStatus.UNAUTHORIZED.value()) {
            throw new BufferServiceAuthorizationException("Not authorized to access Buffer Service", e.getCause());
        } else {
            throw new BufferServiceAPIException(e);
        }
    }
}
Also used : BufferServiceAPIException(bio.terra.workspace.service.buffer.exception.BufferServiceAPIException) BufferApi(bio.terra.buffer.api.BufferApi) BufferServiceAuthorizationException(bio.terra.workspace.service.buffer.exception.BufferServiceAuthorizationException) PoolInfo(bio.terra.buffer.model.PoolInfo) IOException(java.io.IOException) ApiException(bio.terra.buffer.client.ApiException) Traced(io.opencensus.contrib.spring.aop.Traced)

Aggregations

BufferApi (bio.terra.buffer.api.BufferApi)7 ApiClient (bio.terra.buffer.client.ApiClient)5 ApiException (bio.terra.buffer.client.ApiException)4 PoolInfo (bio.terra.buffer.model.PoolInfo)3 BufferServiceAPIException (bio.terra.workspace.service.buffer.exception.BufferServiceAPIException)2 BufferServiceAuthorizationException (bio.terra.workspace.service.buffer.exception.BufferServiceAuthorizationException)2 IOException (java.io.IOException)2 ResourceInfo (bio.terra.buffer.model.ResourceInfo)1 Traced (io.opencensus.contrib.spring.aop.Traced)1 Instant (java.time.Instant)1