diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java index 9d444cc775b53bcd39986733e0db0120aa0706e2..bcbda0e9f20ebbff63c6467db503e01c13dc3aa4 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java @@ -1,5 +1,6 @@ package cz.muni.ics.kypo.training.adaptive.service.api; +import com.querydsl.core.Tuple; import cz.muni.ics.kypo.training.adaptive.dto.responses.LockedPoolInfo; import cz.muni.ics.kypo.training.adaptive.dto.responses.PoolInfoDTO; import cz.muni.ics.kypo.training.adaptive.dto.responses.SandboxDefinitionInfo; @@ -7,6 +8,7 @@ import cz.muni.ics.kypo.training.adaptive.dto.responses.SandboxInfo; import cz.muni.ics.kypo.training.adaptive.exceptions.CustomWebClientException; import cz.muni.ics.kypo.training.adaptive.exceptions.ForbiddenException; import cz.muni.ics.kypo.training.adaptive.exceptions.MicroserviceApiException; +import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; @@ -36,7 +38,7 @@ public class SandboxServiceApi { } - public String getAndLockSandboxForTrainingRun(Long poolId) { + public Pair<Integer, String> getAndLockSandboxForTrainingRun(Long poolId) { try { SandboxInfo sandboxInfo = sandboxServiceWebClient .get() @@ -44,7 +46,7 @@ public class SandboxServiceApi { .retrieve() .bodyToMono(SandboxInfo.class) .block(); - return sandboxInfo.getId(); + return Pair.of((sandboxInfo.getAllocationUnitId(), sandboxInfo.getId()); } catch (CustomWebClientException ex) { if (ex.getStatusCode() == HttpStatus.CONFLICT) { throw new ForbiddenException("There is no available sandbox, wait a minute and try again or ask organizer to allocate more sandboxes."); @@ -102,21 +104,6 @@ public class SandboxServiceApi { } } } - public SandboxInfo getAndLockSandbox(Long poolId) { - try { - return sandboxServiceWebClient - .get() - .uri("/pools/{poolId}/sandboxes/get-and-lock", poolId) - .retrieve() - .bodyToMono(SandboxInfo.class) - .block(); - } catch (CustomWebClientException ex) { - if (ex.getStatusCode() == HttpStatus.CONFLICT) { - throw new ForbiddenException("There is no available sandbox, wait a minute and try again or ask organizer to allocate more sandboxes."); - } - throw new MicroserviceApiException("Error when calling OpenStack Sandbox Service API to get unlocked sandbox from pool (ID: " + poolId + ").", ex); - } - } /** * Gets sandbox definition id. diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java index b99c404ec4ce84cc1dcff4bc6840b6535d7be716..c47ae1efe42567f29e77d7bdc793db67a00bef6b 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java @@ -27,6 +27,7 @@ import cz.muni.ics.kypo.training.adaptive.service.api.SandboxServiceApi; import cz.muni.ics.kypo.training.adaptive.service.api.SmartAssistantServiceApi; import cz.muni.ics.kypo.training.adaptive.service.api.UserManagementServiceApi; import cz.muni.ics.kypo.training.adaptive.service.audit.AuditEventsService; +import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -604,10 +605,9 @@ public class TrainingRunService { * @throws MicroserviceApiException error calling OpenStack Sandbox Service API */ public TrainingRun assignSandbox(TrainingRun trainingRun, long poolId) { - String sandboxInstanceRef = this.sandboxServiceApi.getAndLockSandboxForTrainingRun(poolId); - Integer sandboxInstanceAllocationId = this.sandboxServiceApi.getAndLockSandbox(poolId).getAllocationUnitId(); - trainingRun.setSandboxInstanceRefId(sandboxInstanceRef); - trainingRun.setSandboxInstanceAllocationId(sandboxInstanceAllocationId); + Pair<Integer, String> sandboxRefAndId = this.sandboxServiceApi.getAndLockSandboxForTrainingRun(poolId); + trainingRun.setSandboxInstanceRefId(sandboxRefAndId.getRight()); + trainingRun.setSandboxInstanceAllocationId(sandboxRefAndId.getLeft()); return trainingRunRepository.save(trainingRun); }