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