You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/07/22 13:00:31 UTC

[incubator-dlab] branch develop updated: DLAB-926 update instance statuses where project is terminated

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

bhliva pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/develop by this push:
     new ca8afeb  DLAB-926 update instance statuses where project is terminated
ca8afeb is described below

commit ca8afeb83792d02a45633c79c70161ed0f292f08
Author: bhliva <bo...@epam.com>
AuthorDate: Mon Jul 22 16:00:07 2019 +0300

    DLAB-926 update instance statuses where project is terminated
---
 .../java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java    |  2 +-
 .../java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java    |  7 +++----
 .../dlab/backendapi/resources/callback/ProjectCallback.java  | 12 +++++++++++-
 .../com/epam/dlab/backendapi/service/EnvironmentService.java |  2 +-
 .../com/epam/dlab/backendapi/service/ExploratoryService.java |  1 +
 .../dlab/backendapi/service/impl/EnvironmentServiceImpl.java |  9 ---------
 .../dlab/backendapi/service/impl/ExploratoryServiceImpl.java |  8 +++++++-
 .../dlab/backendapi/service/impl/ProjectServiceImpl.java     | 11 ++++++-----
 8 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java
index 499ca20..bda1d6a 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java
@@ -209,7 +209,7 @@ public class ExploratoryDAO extends BaseDAO {
 		final List<String> statusList = statusList(statuses);
 		return getUserInstances(
 				and(
-						eq(USER, project),
+						eq(PROJECT, project),
 						not(in(STATUS, statusList))
 				),
 				false);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
index 013e38c..dccc7df 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
@@ -12,9 +12,7 @@ import com.mongodb.client.result.UpdateResult;
 import org.bson.Document;
 import org.bson.conversions.Bson;
 
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 
 import static com.mongodb.client.model.Filters.*;
 
@@ -102,7 +100,8 @@ public class ProjectDAOImpl extends BaseDAO implements ProjectDAO {
 
 	@Override
 	public boolean isAnyProjectAssigned(Set<String> groups) {
-		return !Iterables.isEmpty(find(PROJECTS_COLLECTION, in(GROUPS, groups)));
+		return !Iterables.isEmpty(find(PROJECTS_COLLECTION, in(GROUPS,
+				Sets.union(groups, Collections.singleton("$anyuser")))));
 	}
 
 	private Bson projectCondition(String name) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
index 78489ab..971c0cc 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
@@ -4,6 +4,7 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ProjectDAO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
+import com.epam.dlab.backendapi.service.ExploratoryService;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.project.ProjectResult;
 import com.google.inject.Inject;
@@ -23,11 +24,13 @@ import java.util.Objects;
 public class ProjectCallback {
 
 	private final ProjectDAO projectDAO;
+	private final ExploratoryService exploratoryService;
 	private final RequestId requestId;
 
 	@Inject
-	public ProjectCallback(ProjectDAO projectDAO, RequestId requestId) {
+	public ProjectCallback(ProjectDAO projectDAO, ExploratoryService exploratoryService, RequestId requestId) {
 		this.projectDAO = projectDAO;
+		this.exploratoryService = exploratoryService;
 		this.requestId = requestId;
 	}
 
@@ -40,8 +43,15 @@ public class ProjectCallback {
 		if (UserInstanceStatus.RUNNING == status && Objects.nonNull(projectResult.getEdgeInfo())) {
 			projectDAO.updateEdgeInfoAndStatus(projectName, projectResult.getEdgeInfo(), ProjectDTO.Status.ACTIVE);
 		} else {
+			updateExploratoriesStatusIfNeeded(status, projectResult.getProjectName());
 			projectDAO.updateStatus(projectName, ProjectDTO.Status.from(status));
 		}
 		return Response.ok().build();
 	}
+
+	private void updateExploratoriesStatusIfNeeded(UserInstanceStatus status, String projectName) {
+		if (UserInstanceStatus.TERMINATED == status) {
+			exploratoryService.updateProjectExploratoryStatuses(projectName, UserInstanceStatus.TERMINATED);
+		}
+	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EnvironmentService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EnvironmentService.java
index 230e50e..e36d936 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EnvironmentService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EnvironmentService.java
@@ -36,6 +36,7 @@ public interface EnvironmentService {
 	void stopAll();
 
 	void stopEnvironment(String user);
+
 	void stopProjectEnvironment(String project);
 
 	void stopEdge(String user);
@@ -47,7 +48,6 @@ public interface EnvironmentService {
 	void terminateAll();
 
 	void terminateEnvironment(String user);
-	void terminateProjectEnvironment(String project);
 
 	void terminateExploratory(String user, String exploratoryName);
 
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
index e3729aa..2dec798 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
@@ -40,6 +40,7 @@ public interface ExploratoryService {
 	String create(UserInfo userInfo, Exploratory exploratory, String project);
 
 	void updateExploratoryStatuses(String user, UserInstanceStatus status);
+	void updateProjectExploratoryStatuses(String project, UserInstanceStatus status);
 
 	void updateExploratoriesReuploadKeyFlag(String user, boolean reuploadKeyRequired,
 											UserInstanceStatus... exploratoryStatuses);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
index af853e0..0678ae5 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
@@ -162,15 +162,6 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	}
 
 	@Override
-	public void terminateProjectEnvironment(String project) {
-		log.debug("Terminating environment for project {}", project);
-		checkProjectResourceConditions(project, "terminate");
-		exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(project, UserInstanceStatus.TERMINATED,
-				UserInstanceStatus.FAILED, UserInstanceStatus.TERMINATING)
-				.forEach(this::terminateNotebook);
-	}
-
-	@Override
 	public void terminateExploratory(String user, String exploratoryName) {
 		terminateNotebook(new UserInstanceDTO().withUser(user).withExploratoryName(exploratoryName));
 	}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index 9ce4a48..572fc88 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -103,7 +103,7 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 			isAdded = true;
 			final ExploratoryGitCredsDTO gitCreds = gitCredsDAO.findGitCreds(userInfo.getName());
 			log.debug("Created exploratory environment {} for user {}", exploratory.getName(), userInfo.getName());
-				final String uuid = provisioningService.post(EXPLORATORY_CREATE, userInfo.getAccessToken(),
+			final String uuid = provisioningService.post(EXPLORATORY_CREATE, userInfo.getAccessToken(),
 					requestBuilder.newExploratoryCreate(exploratory, userInfo, gitCreds, userInstanceDTO.getTags()),
 					String.class);
 			requestId.put(userInfo.getName(), uuid);
@@ -125,6 +125,12 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 				.forEach(ui -> updateExploratoryStatus(ui.getExploratoryName(), status, user));
 	}
 
+	@Override
+	public void updateProjectExploratoryStatuses(String project, UserInstanceStatus status) {
+		exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(project, TERMINATED, FAILED)
+				.forEach(ui -> updateExploratoryStatus(ui.getExploratoryName(), status, ui.getUser()));
+	}
+
 	/**
 	 * Updates parameter 'reuploadKeyRequired' for corresponding user's exploratories with allowable statuses.
 	 *
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 c246582..22e2f7e 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
@@ -6,9 +6,10 @@ import com.epam.dlab.backendapi.dao.UserGroupDao;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.domain.UpdateProjectDTO;
-import com.epam.dlab.backendapi.service.EnvironmentService;
+import com.epam.dlab.backendapi.service.ExploratoryService;
 import com.epam.dlab.backendapi.service.ProjectService;
 import com.epam.dlab.constants.ServiceConsts;
+import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.project.ProjectActionDTO;
 import com.epam.dlab.dto.project.ProjectCreateDTO;
 import com.epam.dlab.exceptions.ResourceConflictException;
@@ -34,18 +35,18 @@ public class ProjectServiceImpl implements ProjectService {
 	private static final String STOP_PRJ_API = "infrastructure/project/stop";
 	private static final String ANY_USER_ROLE = "$anyuser";
 	private final ProjectDAO projectDAO;
-	private final EnvironmentService environmentService;
+	private final ExploratoryService exploratoryService;
 	private final UserGroupDao userGroupDao;
 	private final RESTService provisioningService;
 	private final RequestId requestId;
 
 	@Inject
-	public ProjectServiceImpl(ProjectDAO projectDAO, EnvironmentService environmentService,
+	public ProjectServiceImpl(ProjectDAO projectDAO, ExploratoryService exploratoryService,
 							  UserGroupDao userGroupDao,
 							  @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) RESTService provisioningService,
 							  RequestId requestId) {
 		this.projectDAO = projectDAO;
-		this.environmentService = environmentService;
+		this.exploratoryService = exploratoryService;
 		this.userGroupDao = userGroupDao;
 		this.provisioningService = provisioningService;
 		this.requestId = requestId;
@@ -86,7 +87,7 @@ public class ProjectServiceImpl implements ProjectService {
 	@Override
 	public void terminate(UserInfo userInfo, String name) {
 		projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API);
-		environmentService.terminateProjectEnvironment(name);
+		exploratoryService.updateProjectExploratoryStatuses(name, UserInstanceStatus.TERMINATING);
 		projectDAO.updateStatus(name, ProjectDTO.Status.DELETING);
 	}
 


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