You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by yk...@apache.org on 2021/07/01 23:45:30 UTC
[incubator-datalab] branch develop updated: [DATALAB] -- fixed bugs
with statuses
This is an automated email from the ASF dual-hosted git repository.
ykinash pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git
The following commit(s) were added to refs/heads/develop by this push:
new dcb1818 [DATALAB] -- fixed bugs with statuses
new 2084983 Merge remote-tracking branch 'origin/develop' into develop
dcb1818 is described below
commit dcb1818cfbc06f9079b949ffab33a1f720291b83
Author: KinashYurii <ur...@gmail.com>
AuthorDate: Fri Jul 2 02:44:56 2021 +0300
[DATALAB] -- fixed bugs with statuses
---
.../response/handlers/ProjectCallbackHandler.java | 32 +++++---
.../response/handlers/ResourceCallbackHandler.java | 15 ++--
.../handlers/dao/FileSystemCallbackHandlerDao.java | 1 +
.../service/impl/ProjectServiceImpl.java | 86 +++++++++++-----------
.../backendapi/resources/ProjectResource.java | 7 ++
.../resources/callback/ProjectCallback.java | 51 +++++++++----
6 files changed, 118 insertions(+), 74 deletions(-)
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ProjectCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ProjectCallbackHandler.java
index cad5635..1fd151a 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ProjectCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ProjectCallbackHandler.java
@@ -26,10 +26,12 @@ import com.epam.datalab.dto.base.project.ProjectResult;
import com.epam.datalab.exceptions.DatalabException;
import com.epam.datalab.rest.client.RESTService;
import com.fasterxml.jackson.databind.JsonNode;
+import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.Arrays;
+@Slf4j
public class ProjectCallbackHandler extends ResourceCallbackHandler<ProjectResult> {
@@ -55,18 +57,24 @@ public class ProjectCallbackHandler extends ResourceCallbackHandler<ProjectResul
@Override
protected ProjectResult parseOutResponse(JsonNode resultNode, ProjectResult baseStatus) {
- baseStatus.setProjectName(projectName);
- baseStatus.setEndpointName(endpointName);
- if (resultNode != null && Arrays.asList(DockerAction.CREATE, DockerAction.RECREATE).contains(getAction()) &&
- UserInstanceStatus.of(baseStatus.getStatus()) != UserInstanceStatus.FAILED) {
- try {
- final EdgeInfo projectEdgeInfo = mapper.readValue(resultNode.toString(), clazz);
- baseStatus.setEdgeInfo(projectEdgeInfo);
- } catch (IOException e) {
- throw new DatalabException("Cannot parse the EDGE info in JSON: " + e.getLocalizedMessage(), e);
- }
- }
+ log.info("TEST LOG!!!: resultNoe: {}, projectResult: {} , projectName: {}, endpointName: {}"
+ , resultNode, baseStatus, projectName, endpointName);
- return baseStatus;
+ baseStatus.setProjectName(projectName);
+ baseStatus.setEndpointName(endpointName);
+ if (resultNode != null &&
+ Arrays.asList(DockerAction.CREATE, DockerAction.RECREATE, DockerAction.START).contains(getAction()) &&
+ UserInstanceStatus.of(baseStatus.getStatus()) != UserInstanceStatus.FAILED) {
+ log.info("TEST LOG!!!: result!=null, dockerAction = create,recreate");
+ try {
+ final EdgeInfo projectEdgeInfo = mapper.readValue(resultNode.toString(), clazz);
+ log.info("TEST LOG!!!: edgeInfo:{}", projectEdgeInfo);
+ baseStatus.setEdgeInfo(projectEdgeInfo);
+ log.info("TEST LOG!!!: baseStatus:{}", baseStatus);
+ } catch (IOException e) {
+ throw new DatalabException("Cannot parse the EDGE info in JSON: " + e.getLocalizedMessage(), e);
+ }
+ }
+ return baseStatus;
}
}
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourceCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourceCallbackHandler.java
index 5690657..94909be 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourceCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourceCallbackHandler.java
@@ -104,10 +104,12 @@ public abstract class ResourceCallbackHandler<T extends StatusBaseDTO<?>> implem
debugMessage("Send post request to self service {} for UUID {}, object is {}",
getCallbackURI(), uuid, object);
try {
+ log.info("TEST LOG!!!: post to ss. SS: {}, uri: {}, obj: {}, resultType: {}"
+ , selfService, getCallbackURI(), object, resultType);
selfService.post(getCallbackURI(), object, resultType);
} catch (Exception e) {
- log.error("Send request or response error for UUID {}: {}", uuid, e.getLocalizedMessage(), e);
- throw new DatalabException("Send request or responce error for UUID " + uuid + ": " + e.getLocalizedMessage()
+ log.error("{} Send request or response error for UUID {}: {}", this.getClass().toString(), uuid, e.getLocalizedMessage(), e);
+ throw new DatalabException("Send request or response error for UUID " + uuid + ": " + e.getLocalizedMessage()
, e);
}
}
@@ -129,7 +131,7 @@ public abstract class ResourceCallbackHandler<T extends StatusBaseDTO<?>> implem
result.setErrorMessage(getTextValue(resultNode.get(ERROR_NODE)));
}
result = parseOutResponse(resultNode, result);
-
+ log.info("TEST LOG!!!: send to ss: {}", result);
selfServicePost(result);
return !UserInstanceStatus.FAILED.equals(status);
}
@@ -141,7 +143,8 @@ public abstract class ResourceCallbackHandler<T extends StatusBaseDTO<?>> implem
selfServicePost((T) getBaseStatusDTO(UserInstanceStatus.FAILED)
.withErrorMessage(errorMessage));
} catch (Exception t) {
- throw new DatalabException("Could not send error message to Self Service for UUID " + uuid + ", user " + user + ": " + errorMessage, t);
+ throw new DatalabException("Could not send error message to Self Service for UUID "
+ + uuid + ", user " + user + ": " + errorMessage, t);
}
}
@@ -176,8 +179,8 @@ public abstract class ResourceCallbackHandler<T extends StatusBaseDTO<?>> implem
case CREATE_IMAGE:
return UserInstanceStatus.CREATED; // Any status besides failed
case CREATE:
- case RECREATE:
- case CONFIGURE:
+ case RECREATE:
+ case CONFIGURE:
case START:
case RECONFIGURE_SPARK:
return UserInstanceStatus.RUNNING;
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
index 6e39555..002b498 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
@@ -111,6 +111,7 @@ public class FileSystemCallbackHandlerDao implements CallbackHandlerDao {
}
private Optional<PersistentFileHandler> toPersistentFileHandler(Path path) {
+ log.info("TEST LOG!!!: path: {}",path);
try {
return Optional.of(mapper.readValue(path.toFile(), PersistentFileHandler.class));
} catch (Exception e) {
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java
index 640190c..f92e1f4 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/service/impl/ProjectServiceImpl.java
@@ -21,11 +21,7 @@ package com.epam.datalab.backendapi.service.impl;
import com.epam.datalab.auth.UserInfo;
import com.epam.datalab.backendapi.ProvisioningServiceApplicationConfiguration;
-import com.epam.datalab.backendapi.core.commands.CommandBuilder;
-import com.epam.datalab.backendapi.core.commands.DockerAction;
-import com.epam.datalab.backendapi.core.commands.DockerCommands;
-import com.epam.datalab.backendapi.core.commands.ICommandExecutor;
-import com.epam.datalab.backendapi.core.commands.RunDockerCommand;
+import com.epam.datalab.backendapi.core.commands.*;
import com.epam.datalab.backendapi.core.response.folderlistener.FolderListenerExecutor;
import com.epam.datalab.backendapi.core.response.handlers.ProjectCallbackHandler;
import com.epam.datalab.backendapi.service.ProjectService;
@@ -45,51 +41,56 @@ import java.util.Objects;
@Slf4j
public class ProjectServiceImpl implements ProjectService {
- private static final String PROJECT_IMAGE = "docker.datalab-project";
- private static final String EDGE_IMAGE = "docker.datalab-edge";
- private static final String CALLBACK_URI = "/api/project/status";
- private static final String PROJECT_RESOURCE_TYPE = "project";
- private static final String EDGE_RESOURCE_TYPE = "edge";
-
- protected final RESTService selfService;
- private final ProvisioningServiceApplicationConfiguration configuration;
- private final FolderListenerExecutor folderListenerExecutor;
- private final ICommandExecutor commandExecutor;
- private final CommandBuilder commandBuilder;
-
- @Inject
- public ProjectServiceImpl(RESTService selfService, ProvisioningServiceApplicationConfiguration configuration,
- FolderListenerExecutor folderListenerExecutor, ICommandExecutor commandExecutor, CommandBuilder commandBuilder) {
- this.selfService = selfService;
- this.configuration = configuration;
- this.folderListenerExecutor = folderListenerExecutor;
- this.commandExecutor = commandExecutor;
- this.commandBuilder = commandBuilder;
+ private static final String PROJECT_IMAGE = "docker.datalab-project";
+ private static final String EDGE_IMAGE = "docker.datalab-edge";
+ private static final String CALLBACK_URI = "/api/project/status";
+ private static final String PROJECT_RESOURCE_TYPE = "project";
+ private static final String EDGE_RESOURCE_TYPE = "edge";
+
+ protected final RESTService selfService;
+ private final ProvisioningServiceApplicationConfiguration configuration;
+ private final FolderListenerExecutor folderListenerExecutor;
+ private final ICommandExecutor commandExecutor;
+ private final CommandBuilder commandBuilder;
+
+ @Inject
+ public ProjectServiceImpl(RESTService selfService, ProvisioningServiceApplicationConfiguration configuration,
+ FolderListenerExecutor folderListenerExecutor, ICommandExecutor commandExecutor, CommandBuilder commandBuilder) {
+ this.selfService = selfService;
+ this.configuration = configuration;
+ this.folderListenerExecutor = folderListenerExecutor;
+ this.commandExecutor = commandExecutor;
+ this.commandBuilder = commandBuilder;
}
- @Override
- public String create(UserInfo userInfo, ProjectCreateDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.CREATE, dto.getName(), PROJECT_RESOURCE_TYPE, PROJECT_IMAGE, dto.getEndpoint());
- }
+ @Override
+ public String create(UserInfo userInfo, ProjectCreateDTO dto) {
+ log.info("Trying to create project: {}", dto);
+ return executeDocker(userInfo, dto, DockerAction.CREATE, dto.getName(), PROJECT_RESOURCE_TYPE, PROJECT_IMAGE, dto.getEndpoint());
+ }
- @Override
- public String recreate(UserInfo userInfo, ProjectCreateDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.RECREATE, dto.getName(), PROJECT_RESOURCE_TYPE, PROJECT_IMAGE, dto.getEndpoint());
- }
+ @Override
+ public String recreate(UserInfo userInfo, ProjectCreateDTO dto) {
+ log.info("Trying to recreate project: {}", dto);
+ return executeDocker(userInfo, dto, DockerAction.RECREATE, dto.getName(), PROJECT_RESOURCE_TYPE, PROJECT_IMAGE, dto.getEndpoint());
+ }
- @Override
- public String terminate(UserInfo userInfo, ProjectActionDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.TERMINATE, dto.getName(), PROJECT_RESOURCE_TYPE, PROJECT_IMAGE, dto.getEndpoint());
- }
+ @Override
+ public String terminate(UserInfo userInfo, ProjectActionDTO dto) {
+ log.info("Trying to terminate project: {}", dto);
+ return executeDocker(userInfo, dto, DockerAction.TERMINATE, dto.getName(), PROJECT_RESOURCE_TYPE, PROJECT_IMAGE, dto.getEndpoint());
+ }
- @Override
- public String start(UserInfo userInfo, ProjectActionDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.START, dto.getName(), EDGE_RESOURCE_TYPE, EDGE_IMAGE, dto.getEndpoint());
- }
+ @Override
+ public String start(UserInfo userInfo, ProjectActionDTO dto) {
+ log.info("Trying to start project: {}", dto);
+ return executeDocker(userInfo, dto, DockerAction.START, dto.getName(), EDGE_RESOURCE_TYPE, EDGE_IMAGE, dto.getEndpoint());
+ }
@Override
public String stop(UserInfo userInfo, ProjectActionDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.STOP, dto.getName(), EDGE_RESOURCE_TYPE, EDGE_IMAGE, dto.getEndpoint());
+ log.info("Trying to stop project: {}", dto);
+ return executeDocker(userInfo, dto, DockerAction.STOP, dto.getName(), EDGE_RESOURCE_TYPE, EDGE_IMAGE, dto.getEndpoint());
}
private String executeDocker(UserInfo userInfo, ResourceBaseDTO dto, DockerAction action, String projectName,
@@ -113,6 +114,7 @@ public class ProjectServiceImpl implements ProjectService {
.withConfKeyName(configuration.getAdminKey())
.withImage(image)
.withAction(action);
+ log.info("Docker command : {}", runDockerCommand);
if (configuration.getCloudProvider() == CloudProvider.AZURE &&
Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ProjectResource.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ProjectResource.java
index a0f3407..15eae6a 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ProjectResource.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ProjectResource.java
@@ -39,6 +39,7 @@ import io.swagger.v3.oas.annotations.headers.Header;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import lombok.extern.slf4j.Slf4j;
import javax.annotation.security.RolesAllowed;
import javax.validation.Valid;
@@ -61,6 +62,7 @@ import java.util.List;
import java.util.stream.Collectors;
@Path("project")
+@Slf4j
public class ProjectResource {
private final ProjectService projectService;
private final AccessKeyService keyService;
@@ -90,6 +92,7 @@ public class ProjectResource {
@RolesAllowed("/api/project/create")
public Response createProject(@Parameter(hidden = true) @Auth UserInfo userInfo,
@Valid CreateProjectDTO projectDTO) {
+ log.info("Trying to create project: {}", projectDTO);
List<ProjectEndpointDTO> projectEndpointDTOS = projectDTO.getEndpoints()
.stream()
.map(e -> new ProjectEndpointDTO(e, UserInstanceStatus.CREATING, null))
@@ -115,6 +118,8 @@ public class ProjectResource {
@RolesAllowed("/api/project")
public Response recreateProject(@Parameter(hidden = true) @Auth UserInfo userInfo,
@NotNull @Valid ProjectActionFormDTO startProjectDto) {
+ log.info("Trying to recreate project: {}", startProjectDto);
+
startProjectDto.getEndpoints()
.forEach(endpoint -> projectService.recreate(userInfo, endpoint, startProjectDto.getProjectName()));
return Response
@@ -133,6 +138,7 @@ public class ProjectResource {
@RolesAllowed("/api/project")
public Response startProject(@Parameter(hidden = true) @Auth UserInfo userInfo,
@NotNull @Valid ProjectActionFormDTO startProjectDto) {
+ log.info("Trying to start project: {}", startProjectDto);
projectService.start(userInfo, startProjectDto.getEndpoints(), startProjectDto.getProjectName());
return Response
.accepted()
@@ -150,6 +156,7 @@ public class ProjectResource {
@RolesAllowed("/api/project")
public Response stopProject(@Parameter(hidden = true) @Auth UserInfo userInfo,
@NotNull @Valid ProjectActionFormDTO stopProjectDTO) {
+ log.info("Trying to stop project: {}", stopProjectDTO);
projectService.stopWithResources(userInfo, stopProjectDTO.getEndpoints(), stopProjectDTO.getProjectName());
return Response
.accepted()
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/callback/ProjectCallback.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/callback/ProjectCallback.java
index 42a1297..be8f076 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/callback/ProjectCallback.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/callback/ProjectCallback.java
@@ -23,10 +23,12 @@ import com.epam.datalab.backendapi.dao.EndpointDAO;
import com.epam.datalab.backendapi.dao.GpuDAO;
import com.epam.datalab.backendapi.dao.ProjectDAO;
import com.epam.datalab.backendapi.domain.RequestId;
+import com.epam.datalab.backendapi.schedulers.CheckInfrastructureStatusScheduler;
import com.epam.datalab.backendapi.service.ExploratoryService;
import com.epam.datalab.dto.UserInstanceStatus;
import com.epam.datalab.dto.base.project.ProjectResult;
import com.epam.datalab.dto.imagemetadata.EdgeGPU;
+import com.epam.datalab.exceptions.DatalabException;
import com.google.inject.Inject;
import lombok.extern.slf4j.Slf4j;
@@ -47,36 +49,57 @@ public class ProjectCallback {
private final ExploratoryService exploratoryService;
private final RequestId requestId;
private final GpuDAO gpuDAO;
+ private final CheckInfrastructureStatusScheduler scheduler;
@Inject
public ProjectCallback(ProjectDAO projectDAO, EndpointDAO endpointDAO, ExploratoryService exploratoryService, RequestId requestId,
- GpuDAO gpuDAO) {
+ GpuDAO gpuDAO, CheckInfrastructureStatusScheduler scheduler) {
this.projectDAO = projectDAO;
this.exploratoryService = exploratoryService;
this.requestId = requestId;
this.gpuDAO = gpuDAO;
+ this.scheduler = scheduler;
}
@POST
public Response updateProjectStatus(ProjectResult projectResult) {
- requestId.checkAndRemove(projectResult.getRequestId());
- final String projectName = projectResult.getProjectName();
- final UserInstanceStatus status = UserInstanceStatus.of(projectResult.getStatus());
- if (projectResult.getEdgeInfo().getGpuList() != null) {
- List<String> gpuList = projectResult.getEdgeInfo().getGpuList();
- log.info("Adding edgeGpu with gpu_types: {}, for project: {}", gpuList, projectName);
- gpuDAO.create(new EdgeGPU(projectName, gpuList));
- }
- if (UserInstanceStatus.RUNNING == status && Objects.nonNull(projectResult.getEdgeInfo())) {
- projectDAO.updateEdgeInfo(projectName, projectResult.getEndpointName(), projectResult.getEdgeInfo());
- } else {
- updateExploratoriesStatusIfNeeded(status, projectResult.getProjectName(), projectResult.getEndpointName());
- projectDAO.updateEdgeStatus(projectName, projectResult.getEndpointName(), status);
+ try {
+
+ log.info("TEST LOG!!!: projectResult: {}", projectResult);
+
+ requestId.checkAndRemove(projectResult.getRequestId());
+ final String projectName = projectResult.getProjectName();
+ final UserInstanceStatus status = UserInstanceStatus.of(projectResult.getStatus());
+ saveGpuForProject(projectResult, projectName);
+ if (UserInstanceStatus.RUNNING == status && Objects.nonNull(projectResult.getEdgeInfo())) {
+ projectDAO.updateEdgeInfo(projectName, projectResult.getEndpointName(), projectResult.getEdgeInfo());
+ } else {
+ updateExploratoriesStatusIfNeeded(status, projectResult.getProjectName(), projectResult.getEndpointName());
+ projectDAO.updateEdgeStatus(projectName, projectResult.getEndpointName(), status);
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ log.info("Run scheduler");
+ scheduler.execute(null);
}
return Response.ok().build();
}
+ private void saveGpuForProject(ProjectResult projectResult, String projectName) {
+ try {
+
+ if (projectResult.getEdgeInfo().getGpuList() != null) {
+ List<String> gpuList = projectResult.getEdgeInfo().getGpuList();
+ log.info("Adding edgeGpu with gpu_types: {}, for project: {}", gpuList, projectName);
+ gpuDAO.create(new EdgeGPU(projectName, gpuList));
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ throw new DatalabException(e.getMessage(), e);
+ }
+ }
+
private void updateExploratoriesStatusIfNeeded(UserInstanceStatus status, String projectName, String endpoint) {
if (UserInstanceStatus.TERMINATED == status) {
exploratoryService.updateProjectExploratoryStatuses(projectName, endpoint, UserInstanceStatus.TERMINATED);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org