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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to