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

Reply via email to