You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by of...@apache.org on 2020/10/20 12:15:38 UTC

[incubator-datalab] branch odahu-integration updated: [DLAB-1650] Creating ODAHU cluster in same project (#926)

This is an automated email from the ASF dual-hosted git repository.

ofuks pushed a commit to branch odahu-integration
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git


The following commit(s) were added to refs/heads/odahu-integration by this push:
     new ac3bbf9  [DLAB-1650] Creating ODAHU cluster in same project (#926)
ac3bbf9 is described below

commit ac3bbf925e539e2d00e78056b7808c9b80c9f304
Author: Pavel Papou <pp...@gmail.com>
AuthorDate: Tue Oct 20 08:15:30 2020 -0400

    [DLAB-1650] Creating ODAHU cluster in same project (#926)
    
    [DLAB-1650] Creating ODAHU cluster in the same project
---
 .../com/epam/dlab/backendapi/dao/OdahuDAO.java     |  2 ++
 .../com/epam/dlab/backendapi/dao/OdahuDAOImpl.java | 35 +++++++++++++++-------
 .../dlab/backendapi/domain/OdahuFieldsDTO.java     |  1 +
 .../backendapi/service/impl/OdahuServiceImpl.java  | 26 +++++++++-------
 4 files changed, 43 insertions(+), 21 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAO.java
index f323dbc..26c8919 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/OdahuDAO.java
@@ -34,6 +34,8 @@ public interface OdahuDAO {
 
     List<OdahuDTO> findOdahuClusters();
 
+    List<OdahuDTO> findOdahuClusters(String project, String endpoint);
+
     boolean create(OdahuDTO odahuDTO);
 
     void updateStatus(String name, String project, String endpoint, UserInstanceStatus status);
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 5ba4c80..74dc06e 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
@@ -25,6 +25,7 @@ import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.dto.ResourceURL;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.odahu.OdahuResult;
+import com.epam.dlab.exceptions.DlabException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.mongodb.BasicDBObject;
 import com.mongodb.client.result.UpdateResult;
@@ -36,6 +37,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 import static com.mongodb.client.model.Filters.and;
 import static com.mongodb.client.model.Filters.eq;
@@ -69,23 +71,34 @@ public class OdahuDAOImpl extends BaseDAO implements OdahuDAO {
                 fields(include(ODAHU_FIELD), excludeId()),
                 ProjectDTO.class);
 
-        return projectDTO.flatMap(p -> p.getOdahu()
-                .stream()
+        return projectDTO.flatMap(p -> p.getOdahu().stream()
                 .filter(odahu -> project.equals(odahu.getProject()) && endpoint.equals(odahu.getEndpoint()))
                 .findAny());
     }
 
     @Override
+    public List<OdahuDTO> findOdahuClusters(String project, String endpoint) {
+        Optional<ProjectDTO> projectDTO = findOne(PROJECTS_COLLECTION, odahuProjectEndpointCondition(project, endpoint),
+                fields(include(ODAHU_FIELD), excludeId()),
+                ProjectDTO.class);
+
+        return projectDTO.map(p -> p.getOdahu().stream()
+                .filter(odahu -> project.equals(odahu.getProject()) && endpoint.equals(odahu.getEndpoint()))
+                .collect(Collectors.toList()))
+                .orElseThrow(() -> new DlabException("Unable to find the odahu clusters in the " + project));
+    }
+
+    @Override
     public OdahuFieldsDTO getFields(String name, String project, String endpoint) {
-        Optional<Document> one = findOne(PROJECTS_COLLECTION, odahuProjectEndpointCondition(name, project, endpoint),
-                fields(include(ODAHU_FIELD), excludeId()));
-        OdahuFieldsDTO odahuFields = null;
-        if (one.isPresent()) {
-            List<OdahuFieldsDTO> list = convertFromDocument(one.get().get(ODAHU_FIELD, ArrayList.class), new TypeReference<List<OdahuFieldsDTO>>() {
-            });
-            odahuFields = list.get(0);
-        }
-        return odahuFields;
+        Document odahuDocument = findOne(PROJECTS_COLLECTION, odahuProjectEndpointCondition(name, project, endpoint),
+                fields(include(ODAHU_FIELD), excludeId()))
+                .orElseThrow(() -> new DlabException(project.toString() + " does not contain odahu " + name.toString() + " cluster"));
+
+        List<OdahuFieldsDTO> list = convertFromDocument(odahuDocument.get(ODAHU_FIELD, ArrayList.class), new TypeReference<List<OdahuFieldsDTO>>() {});
+        return list.stream()
+                .filter(odahuFieldsDTO -> name.equals(odahuFieldsDTO.getName()))
+                .findAny()
+                .orElseThrow(() -> new DlabException("Unable to find the " + name + " cluster fields"));
     }
 
     @Override
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuFieldsDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuFieldsDTO.java
index 7a71795..41712a7 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuFieldsDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuFieldsDTO.java
@@ -26,6 +26,7 @@ import lombok.Data;
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class OdahuFieldsDTO {
+    private String name;
     @JsonProperty("grafana_admin")
     private String grafanaAdmin;
     @JsonProperty("grafana_pass")
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 3f5671b..3aa16e7 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
@@ -49,6 +49,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Slf4j
 public class OdahuServiceImpl implements OdahuService {
@@ -91,8 +92,9 @@ public class OdahuServiceImpl implements OdahuService {
     @BudgetLimited
     @Override
     public void create(@Project String project, OdahuCreateDTO odahuCreateDTO, UserInfo user) {
-        Optional<OdahuDTO> odahuDTO = odahuDAO.getByProjectEndpoint(odahuCreateDTO.getProject(), odahuCreateDTO.getEndpoint());
-        if (odahuDTO.isPresent()) {
+        boolean activeCluster = odahuDAO.findOdahuClusters(odahuCreateDTO.getProject(), odahuCreateDTO.getEndpoint()).stream()
+                .noneMatch(o -> !o.getStatus().equals(UserInstanceStatus.FAILED) && !o.getStatus().equals(UserInstanceStatus.TERMINATED));
+        if (!activeCluster) {
             throw new ResourceConflictException(String.format("Odahu cluster already exist in system for project %s " +
                     "and endpoint %s", odahuCreateDTO.getProject(), odahuCreateDTO.getEndpoint()));
         }
@@ -132,14 +134,18 @@ public class OdahuServiceImpl implements OdahuService {
 
     @Override
     public void terminate(String name, String project, String endpoint, UserInfo user) {
-        Optional<OdahuDTO> odahuDTO = get(project, endpoint);
-        if (odahuDTO.isPresent() && UserInstanceStatus.RUNNING == odahuDTO.get().getStatus()) {
-            odahuDAO.updateStatus(name, project, endpoint, UserInstanceStatus.TERMINATING);
-            actionOnCloud(user, TERMINATE_ODAHU_API, name, project, endpoint);
-        } else {
-            log.error("Cannot terminate odahu cluster {}", odahuDTO);
-            throw new DlabException(String.format("Cannot terminate odahu cluster %s", odahuDTO));
-        }
+        odahuDAO.findOdahuClusters(project, endpoint).stream()
+                .filter(odahuDTO -> name.equals(odahuDTO.getName())
+                        && !odahuDTO.getStatus().equals(UserInstanceStatus.FAILED))
+                .forEach(odahuDTO -> {
+                    if (UserInstanceStatus.RUNNING == odahuDTO.getStatus()) {
+                        odahuDAO.updateStatus(name, project, endpoint, UserInstanceStatus.TERMINATING);
+                        actionOnCloud(user, TERMINATE_ODAHU_API, name, project, endpoint);
+                    } else {
+                        log.error("Cannot terminate odahu cluster {}", odahuDTO);
+                        throw new DlabException(String.format("Cannot terminate odahu cluster %s", odahuDTO));
+                    }
+                });
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org