This is an automated email from the ASF dual-hosted git repository. ofuks pushed a commit to branch DLAB-1357 in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/DLAB-1357 by this push: new 41f3742 Stop/terminate odahu iun case of stopping/terminating project/endpoint new 0ee7696 Merge remote-tracking branch 'origin/DLAB-1357' into DLAB-1357 41f3742 is described below commit 41f374220fb2670da7027b5ed4621965cb0c4142 Author: Oleh Fuks <olegfuk...@gmail.com> AuthorDate: Thu Jan 30 17:50:06 2020 +0200 Stop/terminate odahu iun case of stopping/terminating project/endpoint --- .../com/epam/dlab/backendapi/dao/OdahuDAOImpl.java | 9 ++--- .../dlab/backendapi/resources/OdahuResource.java | 6 +-- .../epam/dlab/backendapi/service/OdahuService.java | 11 +++-- .../service/impl/EndpointServiceImpl.java | 9 ++++- .../backendapi/service/impl/OdahuServiceImpl.java | 47 +++++++++++++--------- .../service/impl/ProjectServiceImpl.java | 24 +++++++---- .../epam/dlab/backendapi/util/RequestBuilder.java | 8 ++-- 7 files changed, 69 insertions(+), 45 deletions(-) diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAOImpl.java index ef02c1d..a84ad1d 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAOImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAOImpl.java @@ -61,9 +61,9 @@ public class OdahuDAOImpl extends BaseDAO implements OdahuDAO { fields(include(ODAHU_FIELD), excludeId()), ProjectDTO.class); - return one.map(ProjectDTO::getOdahu) - .filter(odahu -> !odahu.isEmpty()) - .map(odahu -> odahu.get(0)); + return one.flatMap(projectDTO -> projectDTO.getOdahu().stream() + .filter(odahu -> project.equals(odahu.getProject()) && endpoint.equals(odahu.getEndpoint())) + .findAny()); } @Override @@ -102,8 +102,7 @@ public class OdahuDAOImpl extends BaseDAO implements OdahuDAO { } private Bson odahuProjectEndpointCondition(String projectName, String endpointName) { - return and(eq(NAME_FIELD, projectName), and(elemMatch(ODAHU_FIELD, and(eq(ENDPOINT_FIELD, endpointName), - eq(PROJECT_FIELD, projectName))))); + return elemMatch(ODAHU_FIELD, and(eq(ENDPOINT_FIELD, endpointName), eq(PROJECT_FIELD, projectName))); } private Bson projectEndpointCondition(String projectName, String endpointName) { diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java index 9856cf4..3c0ef58 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java @@ -72,7 +72,7 @@ public class OdahuResource { @RolesAllowed("/api/odahu") public Response startOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo, @Valid OdahuActionDTO startOdahuDTO) { - odahuService.start(startOdahuDTO.getProject(), startOdahuDTO, userInfo); + odahuService.start(startOdahuDTO.getName(), startOdahuDTO.getProject(), startOdahuDTO.getEndpoint(), userInfo); return Response.accepted().build(); } @@ -81,7 +81,7 @@ public class OdahuResource { @RolesAllowed("/api/odahu") public Response stopOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo, @Valid OdahuActionDTO stopOdahuDTO) { - odahuService.stop(stopOdahuDTO.getProject(), stopOdahuDTO, userInfo); + odahuService.stop(stopOdahuDTO.getName(), stopOdahuDTO.getProject(), stopOdahuDTO.getEndpoint(), userInfo); return Response.accepted().build(); } @@ -90,7 +90,7 @@ public class OdahuResource { @RolesAllowed("/api/odahu") public Response terminateOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo, @Valid OdahuActionDTO terminateOdahuDTO) { - odahuService.terminate(terminateOdahuDTO.getProject(), terminateOdahuDTO, userInfo); + odahuService.terminate(terminateOdahuDTO.getName(), terminateOdahuDTO.getProject(), terminateOdahuDTO.getEndpoint(), userInfo); return Response.accepted().build(); } } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java index 4ad0d95..671af91 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java @@ -26,17 +26,22 @@ import com.epam.dlab.dto.UserInstanceStatus; import com.epam.dlab.dto.base.odahu.OdahuResult; import java.util.List; +import java.util.Optional; public interface OdahuService { List<OdahuDTO> findOdahu(); + Optional<OdahuDTO> get(String project, String endpoint); + void create(String project, OdahuActionDTO createOdahuDTO, UserInfo userInfo); - void start(String project, OdahuActionDTO startOdahuDTO, UserInfo userInfo); + void start(String name, String project, String endpoint, UserInfo user); - void stop(String project, OdahuActionDTO stopOdahuDTO, UserInfo userInfo); + void stop(String name, String project, String endpoint, UserInfo user); - void terminate(String project, OdahuActionDTO terminateOdahuDTO, UserInfo userInfo); + void terminate(String name, String project, String endpoint, UserInfo user); void updateStatus(OdahuResult odahuResult, UserInstanceStatus status); + + boolean inProgress(String project, String endpoint); } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java index 169857d..520d23f 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java @@ -7,6 +7,7 @@ import com.epam.dlab.backendapi.domain.EndpointDTO; import com.epam.dlab.backendapi.domain.EndpointResourcesDTO; import com.epam.dlab.backendapi.domain.ProjectDTO; import com.epam.dlab.backendapi.service.EndpointService; +import com.epam.dlab.backendapi.service.OdahuService; import com.epam.dlab.backendapi.service.ProjectService; import com.epam.dlab.constants.ServiceConsts; import com.epam.dlab.dto.UserInstanceDTO; @@ -31,15 +32,18 @@ public class EndpointServiceImpl implements EndpointService { private final ProjectService projectService; private final ExploratoryDAO exploratoryDAO; private final RESTService provisioningService; + private final OdahuService odahuService; @Inject public EndpointServiceImpl(EndpointDAO endpointDAO, ProjectService projectService, ExploratoryDAO exploratoryDAO, - @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) RESTService provisioningService) { + @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) RESTService provisioningService, + OdahuService odahuService) { this.endpointDAO = endpointDAO; this.projectService = projectService; this.exploratoryDAO = exploratoryDAO; this.provisioningService = provisioningService; + this.odahuService = odahuService; } @Override @@ -116,7 +120,8 @@ public class EndpointServiceImpl implements EndpointService { private void checkProjectEndpointResourcesStatuses(List<ProjectDTO> projects, String endpoint) { boolean isTerminationEnabled = projects.stream().anyMatch(p -> - !projectService.checkExploratoriesAndComputationalProgress(p.getName(), Collections.singletonList(endpoint)) || + odahuService.inProgress(p.getName(), endpoint) || + !projectService.checkExploratoriesAndComputationalProgress(p.getName(), Collections.singletonList(endpoint)) || p.getEndpoints().stream().anyMatch(e -> e.getName().equals(endpoint) && Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING, UserInstanceStatus.TERMINATING).contains(e.getStatus()))); diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java index 4d728b2..f61c419 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java @@ -40,6 +40,7 @@ import com.google.inject.Inject; import com.google.inject.name.Named; import lombok.extern.slf4j.Slf4j; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -77,6 +78,11 @@ public class OdahuServiceImpl implements OdahuService { return odahuDAO.findOdahuClusters(); } + @Override + public Optional<OdahuDTO> get(String project, String endpoint) { + return odahuDAO.getByProjectEndpoint(project, endpoint); + } + @BudgetLimited @Override public void create(@Project String project, OdahuActionDTO createOdahuDTO, UserInfo user) { @@ -107,27 +113,21 @@ public class OdahuServiceImpl implements OdahuService { @BudgetLimited @Override - public void start(@Project String project, OdahuActionDTO startOdahuDTO, UserInfo user) { - ProjectDTO projectDTO = projectService.get(project); - odahuDAO.updateStatus(startOdahuDTO.getName(), startOdahuDTO.getProject(), startOdahuDTO.getEndpoint(), - UserInstanceStatus.STARTING); - actionOnCloud(user, startOdahuDTO, projectDTO, START_ODAHU_API); + public void start(String name, @Project String project, String endpoint, UserInfo user) { + odahuDAO.updateStatus(name, project, endpoint, UserInstanceStatus.STARTING); + actionOnCloud(user, START_ODAHU_API, name, project, endpoint); } @Override - public void stop(String project, OdahuActionDTO stopOdahuDTO, UserInfo user) { - ProjectDTO projectDTO = projectService.get(project); - odahuDAO.updateStatus(stopOdahuDTO.getName(), stopOdahuDTO.getProject(), stopOdahuDTO.getEndpoint(), - UserInstanceStatus.STOPPING); - actionOnCloud(user, stopOdahuDTO, projectDTO, STOP_ODAHU_API); + public void stop(String name, String project, String endpoint, UserInfo user) { + odahuDAO.updateStatus(name, project, endpoint, UserInstanceStatus.STOPPING); + actionOnCloud(user, STOP_ODAHU_API, name, project, endpoint); } @Override - public void terminate(String project, OdahuActionDTO terminateOdahuDTO, UserInfo user) { - ProjectDTO projectDTO = projectService.get(project); - odahuDAO.updateStatus(terminateOdahuDTO.getName(), terminateOdahuDTO.getProject(), terminateOdahuDTO.getEndpoint(), - UserInstanceStatus.TERMINATING); - actionOnCloud(user, terminateOdahuDTO, projectDTO, TERMINATE_ODAHU_API); + public void terminate(String name, String project, String endpoint, UserInfo user) { + odahuDAO.updateStatus(name, project, endpoint, UserInstanceStatus.TERMINATING); + actionOnCloud(user, TERMINATE_ODAHU_API, name, project, endpoint); } @Override @@ -140,18 +140,25 @@ public class OdahuServiceImpl implements OdahuService { } } - private void actionOnCloud(UserInfo user, OdahuActionDTO odahuActionDTO, ProjectDTO projectDTO, String uri) { + @Override + public boolean inProgress(String project, String endpoint) { + return get(project, endpoint) + .filter(odahu -> Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, + UserInstanceStatus.STOPPING, UserInstanceStatus.TERMINATING).contains(odahu.getStatus())) + .isPresent(); + } + + private void actionOnCloud(UserInfo user, String uri, String name, String project, String endpoint) { String url = null; try { - url = endpointService.get(odahuActionDTO.getEndpoint()).getUrl() + uri; + url = endpointService.get(endpoint).getUrl() + uri; String uuid = provisioningService.post(url, user.getAccessToken(), - requestBuilder.newOdahuAction(user, odahuActionDTO, projectDTO), String.class); + requestBuilder.newOdahuAction(user, name, project, endpoint), String.class); requestId.put(user.getName(), uuid); } catch (Exception e) { log.error("Can not perform {} due to: {}, {}", url, e.getMessage(), e); - odahuDAO.updateStatus(odahuActionDTO.getName(), odahuActionDTO.getProject(), odahuActionDTO.getEndpoint(), - UserInstanceStatus.FAILED); + odahuDAO.updateStatus(name, project, project, UserInstanceStatus.FAILED); } } } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java index bdafb26..1e932e1 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java @@ -13,8 +13,8 @@ import com.epam.dlab.backendapi.domain.RequestId; import com.epam.dlab.backendapi.domain.UpdateProjectDTO; import com.epam.dlab.backendapi.service.EndpointService; import com.epam.dlab.backendapi.service.ExploratoryService; +import com.epam.dlab.backendapi.service.OdahuService; import com.epam.dlab.backendapi.service.ProjectService; -import com.epam.dlab.backendapi.service.SecurityService; import com.epam.dlab.backendapi.util.RequestBuilder; import com.epam.dlab.constants.ServiceConsts; import com.epam.dlab.dto.UserInstanceStatus; @@ -54,14 +54,14 @@ public class ProjectServiceImpl implements ProjectService { private final RequestBuilder requestBuilder; private final EndpointService endpointService; private final ExploratoryDAO exploratoryDAO; - private final SecurityService securityService; + private final OdahuService odahuService; @Inject public ProjectServiceImpl(ProjectDAO projectDAO, ExploratoryService exploratoryService, UserGroupDao userGroupDao, @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) RESTService provisioningService, RequestId requestId, RequestBuilder requestBuilder, EndpointService endpointService, - ExploratoryDAO exploratoryDAO, SecurityService securityService) { + ExploratoryDAO exploratoryDAO, OdahuService odahuService) { this.projectDAO = projectDAO; this.exploratoryService = exploratoryService; this.userGroupDao = userGroupDao; @@ -70,7 +70,7 @@ public class ProjectServiceImpl implements ProjectService { this.requestBuilder = requestBuilder; this.endpointService = endpointService; this.exploratoryDAO = exploratoryDAO; - this.securityService = securityService; + this.odahuService = odahuService; } @Override @@ -122,10 +122,17 @@ public class ProjectServiceImpl implements ProjectService { projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API, endpoint); projectDAO.updateEdgeStatus(name, endpoint, UserInstanceStatus.TERMINATING); exploratoryService.updateProjectExploratoryStatuses(name, endpoint, UserInstanceStatus.TERMINATING); + odahuService.get(name, endpoint) + .ifPresent(odahu -> odahuService.terminate(odahu.getName(), name, endpoint, userInfo)); } @Override public void terminateEndpoint(UserInfo userInfo, List<String> endpoints, String name) { + List<ProjectEndpointDTO> projectEndpoint = get(name).getEndpoints().stream() + .filter(e -> endpoints.contains(e.getName())) + .collect(Collectors.toList()); + checkProjectRelatedResourcesInProgress(name, projectEndpoint, TERMINATE_ACTION); + endpoints.forEach(endpoint -> terminateEndpoint(userInfo, endpoint, name)); } @@ -253,12 +260,13 @@ public class ProjectServiceImpl implements ProjectService { } private void checkProjectRelatedResourcesInProgress(String projectName, List<ProjectEndpointDTO> endpoints, String action) { - boolean edgeProgress = endpoints.stream().anyMatch(e -> - Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING, - UserInstanceStatus.TERMINATING).contains(e.getStatus())); + boolean edgeAndOdahuProgress = endpoints.stream().anyMatch(e -> + Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING, + UserInstanceStatus.TERMINATING).contains(e.getStatus()) + || odahuService.inProgress(projectName, e.getName())); List<String> endpointsName = endpoints.stream().map(ProjectEndpointDTO::getName).collect(Collectors.toList()); - if (edgeProgress || !checkExploratoriesAndComputationalProgress(projectName, endpointsName)) { + if (edgeAndOdahuProgress || !checkExploratoriesAndComputationalProgress(projectName, endpointsName)) { throw new ResourceConflictException((String.format("Can not %s environment because one of project " + "resource is in processing stage", action))); } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java index ea3c211..5c00b99 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java @@ -674,11 +674,11 @@ public class RequestBuilder { .withCloudSettings(cloudSettings(user)); } - public ActionOdahuDTO newOdahuAction(UserInfo user, OdahuActionDTO actionDTO, ProjectDTO projectDTO) { + public ActionOdahuDTO newOdahuAction(UserInfo user, String name, String project, String endpoint) { return ActionOdahuDTO.builder() - .name(actionDTO.getName()) - .project(projectDTO.getName()) - .endpoint(actionDTO.getEndpoint()) + .name(name) + .project(project) + .endpoint(endpoint) .build() .withEdgeUserName(getEdgeUserName(user)) .withCloudSettings(cloudSettings(user)); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org