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

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


The following commit(s) were added to refs/heads/audit by this push:
     new 5973a0e  Code refactoring
5973a0e is described below

commit 5973a0e8c5b2c80c7ab21c6ba0e823aa1de4d662
Author: Oleh Fuks <olegfuk...@gmail.com>
AuthorDate: Thu Jun 11 14:59:50 2020 +0300

    Code refactoring
---
 .../dlab/backendapi/domain/AuditCreateDTO.java     |   4 +-
 .../com/epam/dlab/backendapi/domain/AuditDTO.java  |   3 +-
 .../backendapi/interceptor/AuditInterceptor.java   |  12 +-
 .../resources/aws/ComputationalResourceAws.java    |   5 +-
 .../azure/ComputationalResourceAzure.java          |   5 +-
 .../resources/gcp/ComputationalResourceGcp.java    |   5 +-
 .../backendapi/service/ComputationalService.java   |  40 +++---
 .../backendapi/service/ExploratoryService.java     |   6 +-
 .../dlab/backendapi/service/ProjectService.java    |   2 +-
 .../service/impl/ComputationalServiceImpl.java     | 134 +++++++++----------
 .../service/impl/EnvironmentServiceImpl.java       |  16 +--
 .../service/impl/ExploratoryServiceImpl.java       |  34 ++---
 .../service/impl/ProjectServiceImpl.java           | 144 ++++++++++-----------
 .../service/impl/SchedulerJobServiceImpl.java      |  61 +++++----
 .../resources/ExploratoryResourceTest.java         |  89 +++++++------
 .../service/impl/ComputationalServiceImplTest.java |  32 ++---
 .../service/impl/EnvironmentServiceImplTest.java   |  49 ++++---
 .../service/impl/SchedulerJobServiceImplTest.java  | 134 +++++++++----------
 18 files changed, 380 insertions(+), 395 deletions(-)

diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
index b99b909..1deb5ae 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
@@ -24,8 +24,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import org.hibernate.validator.constraints.NotBlank;
 
-import java.util.List;
-
 
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
@@ -33,5 +31,5 @@ public class AuditCreateDTO {
     @NotBlank(message = "field cannot be empty")
     @JsonProperty("resource_name")
     private final String resourceName;
-    private final List<String> info;
+    private final String info;
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
index f01237c..d7a2d98 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
@@ -24,7 +24,6 @@ import lombok.Builder;
 import lombok.Data;
 
 import java.util.Date;
-import java.util.List;
 
 @Data
 @Builder
@@ -34,6 +33,6 @@ public class AuditDTO {
     private final AuditActionEnum action;
     private final String project;
     private final String resourceName;
-    private final List<String> info;
+    private final String info;
     private Date timestamp;
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
index e4def6c..a5a9166 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
@@ -38,8 +38,6 @@ import org.apache.commons.lang3.StringUtils;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Parameter;
-import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
 import java.util.stream.IntStream;
 
@@ -56,14 +54,14 @@ public class AuditInterceptor implements MethodInterceptor {
         final AuditActionEnum action = getAuditActionEnum(method);
         final String project = getProject(mi, parameters);
         final String resourceName = getResourceName(mi, parameters);
-        final List<String> infoMap = getInfo(mi, parameters);
+        final String auditInfo = getInfo(mi, parameters);
 
         AuditDTO auditCreateDTO = AuditDTO.builder()
                 .user(user)
                 .action(action)
                 .project(project)
                 .resourceName(resourceName)
-                .info(infoMap)
+                .info(auditInfo)
                 .build();
         auditService.save(auditCreateDTO);
         return mi.proceed();
@@ -102,11 +100,11 @@ public class AuditInterceptor implements 
MethodInterceptor {
                 .orElseThrow(() -> new DlabException("Resource name parameter 
wanted!"));
     }
 
-    private List<String> getInfo(MethodInvocation mi, Parameter[] parameters) {
+    private String getInfo(MethodInvocation mi, Parameter[] parameters) {
         return IntStream.range(0, parameters.length)
                 .filter(i -> 
Objects.nonNull(parameters[i].getAnnotation(Info.class)) && 
Objects.nonNull(mi.getArguments()[i]))
-                .mapToObj(i -> (List<String>) mi.getArguments()[i])
+                .mapToObj(i -> (String) mi.getArguments()[i])
                 .findAny()
-                .orElseGet(Collections::emptyList);
+                .orElse(StringUtils.EMPTY);
     }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
index a6f2f97..9c82f04 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
@@ -48,7 +48,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.util.Collections;
 import java.util.List;
 
 import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
@@ -265,7 +264,7 @@ public class ComputationalResourceAws implements 
ComputationalAPI {
         }
     }
 
-    private List<String> getAuditInfo(String exploratoryName) {
-        return Collections.singletonList(String.format(AUDIT_MESSAGE, 
exploratoryName));
+    private String getAuditInfo(String exploratoryName) {
+        return String.format(AUDIT_MESSAGE, exploratoryName);
     }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
index e063d26..89dd91c 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
@@ -42,7 +42,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.util.Collections;
 import java.util.List;
 
 import static com.epam.dlab.rest.contracts.ComputationalAPI.AUDIT_MESSAGE;
@@ -174,7 +173,7 @@ public class ComputationalResourceAzure {
         return Response.ok(computationalService.getClusterConfig(userInfo, 
projectName, exploratoryName, computationalName)).build();
     }
 
-    private List<String> getAuditInfo(String exploratoryName) {
-        return Collections.singletonList(String.format(AUDIT_MESSAGE, 
exploratoryName));
+    private String getAuditInfo(String exploratoryName) {
+        return String.format(AUDIT_MESSAGE, exploratoryName);
     }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
index 336629b..c5a9b6b 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
@@ -48,7 +48,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.util.Collections;
 import java.util.List;
 
 import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
@@ -252,7 +251,7 @@ public class ComputationalResourceGcp implements 
ComputationalAPI {
         }
     }
 
-    private List<String> getAuditInfo(String exploratoryName) {
-        return Collections.singletonList(String.format(AUDIT_MESSAGE, 
exploratoryName));
+    private String getAuditInfo(String exploratoryName) {
+        return String.format(AUDIT_MESSAGE, exploratoryName);
     }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
index b9071b9..77722dd 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
@@ -33,36 +33,36 @@ public interface ComputationalService {
        ComputationalTemplatesDTO getComputationalNamesAndTemplates(UserInfo 
user, String project, String endpoint);
 
        /**
-        * Asynchronously triggers creation of Spark cluster
-        *
-        * @param userInfo     user authentication info
-        * @param resourceName name of computational resource
-        * @param form         input cluster parameters
-        * @param auditInfo    additional info for audit
-        * @return <code>true</code> if action is successfully triggered, 
<code>false</code>false if cluster with the same
-        * name already exists
-        * @throws IllegalArgumentException if input parameters exceed limits 
or docker image name is malformed
-        */
-       boolean createSparkCluster(UserInfo userInfo, String resourceName, 
SparkStandaloneClusterCreateForm form, String project, List<String> auditInfo);
+     * Asynchronously triggers creation of Spark cluster
+     *
+     * @param userInfo     user authentication info
+     * @param resourceName name of computational resource
+     * @param form         input cluster parameters
+     * @param auditInfo    additional info for audit
+     * @return <code>true</code> if action is successfully triggered, 
<code>false</code>false if cluster with the same
+     * name already exists
+     * @throws IllegalArgumentException if input parameters exceed limits or 
docker image name is malformed
+     */
+    boolean createSparkCluster(UserInfo userInfo, String resourceName, 
SparkStandaloneClusterCreateForm form, String project, String auditInfo);
 
-       /**
-        * Asynchronously triggers termination of computational resources
-        *
-        * @param userInfo          user info of authenticated user
-        * @param resourceCreator   username of resource creator
+    /**
+     * Asynchronously triggers termination of computational resources
+     *
+     * @param userInfo          user info of authenticated user
+     * @param resourceCreator   username of resource creator
      * @param project           project name
      * @param exploratoryName   name of exploratory where to terminate 
computational resources with <code>computationalName</code>
      * @param computationalName computational name
      * @param auditInfo         additional info for audit
      */
-    void terminateComputational(UserInfo userInfo, String resourceCreator, 
String project, String exploratoryName, String computationalName, List<String> 
auditInfo);
+    void terminateComputational(UserInfo userInfo, String resourceCreator, 
String project, String exploratoryName, String computationalName, String 
auditInfo);
 
     boolean createDataEngineService(UserInfo userInfo, String resourceName, 
ComputationalCreateFormDTO formDTO, UserComputationalResource
-            computationalResource, String project, List<String> auditInfo);
+            computationalResource, String project, String auditInfo);
 
-    void stopSparkCluster(UserInfo userInfo, String resourceCreator, String 
project, String exploratoryName, String computationalName, List<String> 
auditInfo);
+    void stopSparkCluster(UserInfo userInfo, String resourceCreator, String 
project, String exploratoryName, String computationalName, String auditInfo);
 
-    void startSparkCluster(UserInfo userInfo, String exploratoryName, String 
computationalName, String project, List<String> auditInfo);
+    void startSparkCluster(UserInfo userInfo, String exploratoryName, String 
computationalName, String project, String auditInfo);
 
     void updateSparkClusterConfig(UserInfo userInfo, String project, String 
exploratoryName, String computationalName,
                                   List<ClusterConfig> config);
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 7caa8f7..6b54473 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
@@ -34,11 +34,11 @@ import java.util.Set;
 
 public interface ExploratoryService {
 
-    String start(UserInfo userInfo, String exploratoryName, String project, 
List<String> auditInfo);
+    String start(UserInfo userInfo, String exploratoryName, String project, 
String auditInfo);
 
-    String stop(UserInfo userInfo, String resourceCreator, String project, 
String exploratoryName, List<String> auditInfo);
+    String stop(UserInfo userInfo, String resourceCreator, String project, 
String exploratoryName, String auditInfo);
 
-    String terminate(UserInfo userInfo, String resourceCreator, String 
project, String exploratoryName, List<String> auditInfo);
+    String terminate(UserInfo userInfo, String resourceCreator, String 
project, String exploratoryName, String auditInfo);
 
     String create(UserInfo userInfo, Exploratory exploratory, String project, 
String exploratoryName);
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index ad75f8a..e6745db 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -28,7 +28,7 @@ public interface ProjectService {
 
     void start(UserInfo userInfo, List<String> endpoints, String name);
 
-    void stop(UserInfo userInfo, String endpoint, String name, List<String> 
auditInfo);
+    void stop(UserInfo userInfo, String endpoint, String name, String 
auditInfo);
 
     void stopWithResources(UserInfo userInfo, List<String> endpoints, String 
projectName);
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
index 2895cbd..0f24936 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
@@ -152,20 +152,20 @@ public class ComputationalServiceImpl implements 
ComputationalService {
        }
 
        @BudgetLimited
-       @Audit(action = CREATE_DATA_ENGINE)
-       @Override
-       public boolean createSparkCluster(@User UserInfo userInfo, 
@ResourceName String resourceName, SparkStandaloneClusterCreateForm form, 
@Project String project,
-                                                                         @Info 
List<String> auditInfo) {
-               final ProjectDTO projectDTO = projectService.get(project);
-               final UserInstanceDTO instance =
-                               
exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, 
form.getNotebookName());
-               final SparkStandaloneClusterResource compResource = 
createInitialComputationalResource(form);
-               compResource.setTags(tagService.getResourceTags(userInfo, 
instance.getEndpoint(), project,
-                               form.getCustomTag()));
-               if (computationalDAO.addComputational(userInfo.getName(), 
form.getNotebookName(), project, compResource)) {
-                       try {
-                               EndpointDTO endpointDTO = 
endpointService.get(instance.getEndpoint());
-                               ComputationalBase<?> dto = 
requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, form, 
endpointDTO);
+    @Audit(action = CREATE_DATA_ENGINE)
+    @Override
+    public boolean createSparkCluster(@User UserInfo userInfo, @ResourceName 
String resourceName, SparkStandaloneClusterCreateForm form, @Project String 
project,
+                                      @Info String auditInfo) {
+        final ProjectDTO projectDTO = projectService.get(project);
+        final UserInstanceDTO instance =
+                exploratoryDAO.fetchExploratoryFields(userInfo.getName(), 
project, form.getNotebookName());
+        final SparkStandaloneClusterResource compResource = 
createInitialComputationalResource(form);
+        compResource.setTags(tagService.getResourceTags(userInfo, 
instance.getEndpoint(), project,
+                form.getCustomTag()));
+        if (computationalDAO.addComputational(userInfo.getName(), 
form.getNotebookName(), project, compResource)) {
+            try {
+                EndpointDTO endpointDTO = 
endpointService.get(instance.getEndpoint());
+                ComputationalBase<?> dto = 
requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, form, 
endpointDTO);
 
                                String uuid =
                                                
provisioningService.post(endpointDTO.getUrl() + 
ComputationalAPI.COMPUTATIONAL_CREATE_SPARK,
@@ -187,19 +187,19 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                }
        }
 
-       @Audit(action = TERMINATE_COMPUTATIONAL)
-       @Override
-       public void terminateComputational(@User UserInfo userInfo, String 
resourceCreator, @Project String project, String exploratoryName, @ResourceName 
String computationalName,
-                                                                          
@Info List<String> auditInfo) {
-               try {
-                       updateComputationalStatus(resourceCreator, project, 
exploratoryName, computationalName, TERMINATING);
+    @Audit(action = TERMINATE_COMPUTATIONAL)
+    @Override
+    public void terminateComputational(@User UserInfo userInfo, String 
resourceCreator, @Project String project, String exploratoryName, @ResourceName 
String computationalName,
+                                       @Info String auditInfo) {
+        try {
+            updateComputationalStatus(resourceCreator, project, 
exploratoryName, computationalName, TERMINATING);
 
-                       final UserInstanceDTO userInstanceDTO = 
exploratoryDAO.fetchExploratoryFields(resourceCreator, project, 
exploratoryName);
-                       UserComputationalResource compResource = 
computationalDAO.fetchComputationalFields(resourceCreator, project, 
exploratoryName, computationalName);
+            final UserInstanceDTO userInstanceDTO = 
exploratoryDAO.fetchExploratoryFields(resourceCreator, project, 
exploratoryName);
+            UserComputationalResource compResource = 
computationalDAO.fetchComputationalFields(resourceCreator, project, 
exploratoryName, computationalName);
 
-                       final DataEngineType dataEngineType = 
compResource.getDataEngineType();
-                       EndpointDTO endpointDTO = 
endpointService.get(userInstanceDTO.getEndpoint());
-                       ComputationalTerminateDTO dto = 
requestBuilder.newComputationalTerminate(resourceCreator, userInstanceDTO, 
compResource, endpointDTO);
+            final DataEngineType dataEngineType = 
compResource.getDataEngineType();
+            EndpointDTO endpointDTO = 
endpointService.get(userInstanceDTO.getEndpoint());
+            ComputationalTerminateDTO dto = 
requestBuilder.newComputationalTerminate(resourceCreator, userInstanceDTO, 
compResource, endpointDTO);
 
                        final String provisioningUrl = 
Optional.ofNullable(DATA_ENGINE_TYPE_TERMINATE_URLS.get(dataEngineType))
                                        
.orElseThrow(UnsupportedOperationException::new);
@@ -215,21 +215,21 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                }
        }
 
-       @BudgetLimited
-       @Audit(action = CREATE_DATA_ENGINE_SERVICE)
-       @Override
-       public boolean createDataEngineService(@User UserInfo userInfo, 
@ResourceName String resourceName, ComputationalCreateFormDTO formDTO,
-                                                                               
   UserComputationalResource computationalResource, @Project String project, 
@Info List<String> auditInfo) {
-               final ProjectDTO projectDTO = projectService.get(project);
-               final UserInstanceDTO instance = 
exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, formDTO
-                               .getNotebookName());
-               final Map<String, String> tags = 
tagService.getResourceTags(userInfo, instance.getEndpoint(), project,
-                               formDTO.getCustomTag());
-               computationalResource.setTags(tags);
-               boolean isAdded = 
computationalDAO.addComputational(userInfo.getName(), 
formDTO.getNotebookName(), project,
-                               computationalResource);
-
-               if (isAdded) {
+    @BudgetLimited
+    @Audit(action = CREATE_DATA_ENGINE_SERVICE)
+    @Override
+    public boolean createDataEngineService(@User UserInfo userInfo, 
@ResourceName String resourceName, ComputationalCreateFormDTO formDTO,
+                                           UserComputationalResource 
computationalResource, @Project String project, @Info String auditInfo) {
+        final ProjectDTO projectDTO = projectService.get(project);
+        final UserInstanceDTO instance = 
exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, formDTO
+                .getNotebookName());
+        final Map<String, String> tags = tagService.getResourceTags(userInfo, 
instance.getEndpoint(), project,
+                formDTO.getCustomTag());
+        computationalResource.setTags(tags);
+        boolean isAdded = 
computationalDAO.addComputational(userInfo.getName(), 
formDTO.getNotebookName(), project,
+                computationalResource);
+
+        if (isAdded) {
                        try {
                                EndpointDTO endpointDTO = 
endpointService.get(instance.getEndpoint());
                                String uuid =
@@ -255,19 +255,19 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                }
        }
 
-       @Audit(action = STOP_COMPUTATIONAL)
-       @Override
-       public void stopSparkCluster(@User UserInfo userInfo, String 
resourceCreator, @Project String project, String expName, @ResourceName String 
compName, @Info List<String> auditInfo) {
-               final UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(resourceCreator, project, expName, true);
-               final UserInstanceStatus requiredStatus = 
UserInstanceStatus.RUNNING;
-               if (computationalWithStatusResourceExist(compName, 
userInstance, requiredStatus)) {
-                       log.debug("{} spark cluster {} for userInstance {}", 
STOPPING.toString(), compName, expName);
-                       updateComputationalStatus(resourceCreator, project, 
expName, compName, STOPPING);
-                       EndpointDTO endpointDTO = 
endpointService.get(userInstance.getEndpoint());
-                       final String uuid = 
provisioningService.post(endpointDTO.getUrl() + 
ComputationalAPI.COMPUTATIONAL_STOP_SPARK,
-                                       userInfo.getAccessToken(),
-                                       
requestBuilder.newComputationalStop(resourceCreator, userInstance, compName, 
endpointDTO),
-                                       String.class);
+    @Audit(action = STOP_COMPUTATIONAL)
+    @Override
+    public void stopSparkCluster(@User UserInfo userInfo, String 
resourceCreator, @Project String project, String expName, @ResourceName String 
compName, @Info String auditInfo) {
+        final UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(resourceCreator, project, expName, true);
+        final UserInstanceStatus requiredStatus = UserInstanceStatus.RUNNING;
+        if (computationalWithStatusResourceExist(compName, userInstance, 
requiredStatus)) {
+            log.debug("{} spark cluster {} for userInstance {}", 
STOPPING.toString(), compName, expName);
+            updateComputationalStatus(resourceCreator, project, expName, 
compName, STOPPING);
+            EndpointDTO endpointDTO = 
endpointService.get(userInstance.getEndpoint());
+            final String uuid = provisioningService.post(endpointDTO.getUrl() 
+ ComputationalAPI.COMPUTATIONAL_STOP_SPARK,
+                    userInfo.getAccessToken(),
+                    requestBuilder.newComputationalStop(resourceCreator, 
userInstance, compName, endpointDTO),
+                    String.class);
                        requestId.put(resourceCreator, uuid);
                } else {
                        throw new 
IllegalStateException(String.format(DATAENGINE_NOT_PRESENT_FORMAT, 
requiredStatus.toString(), compName, expName));
@@ -275,20 +275,20 @@ public class ComputationalServiceImpl implements 
ComputationalService {
 
        }
 
-       @BudgetLimited
-       @Audit(action = START_COMPUTATIONAL)
-       @Override
-       public void startSparkCluster(@User UserInfo userInfo, String expName, 
@ResourceName String compName, @Project String project, @Info List<String> 
auditInfo) {
-               final UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, expName, 
true);
-               final UserInstanceStatus requiredStatus = 
UserInstanceStatus.STOPPED;
-               if (computationalWithStatusResourceExist(compName, 
userInstance, requiredStatus)) {
-                       log.debug("{} spark cluster {} for userInstance {}", 
STARTING.toString(), compName, expName);
-                       updateComputationalStatus(userInfo.getName(), project, 
expName, compName, STARTING);
-                       EndpointDTO endpointDTO = 
endpointService.get(userInstance.getEndpoint());
-                       final String uuid = 
provisioningService.post(endpointDTO.getUrl() + 
ComputationalAPI.COMPUTATIONAL_START_SPARK,
-                                       userInfo.getAccessToken(),
-                                       
requestBuilder.newComputationalStart(userInfo, userInstance, compName, 
endpointDTO),
-                                       String.class);
+    @BudgetLimited
+    @Audit(action = START_COMPUTATIONAL)
+    @Override
+    public void startSparkCluster(@User UserInfo userInfo, String expName, 
@ResourceName String compName, @Project String project, @Info String auditInfo) 
{
+        final UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, expName, 
true);
+        final UserInstanceStatus requiredStatus = UserInstanceStatus.STOPPED;
+        if (computationalWithStatusResourceExist(compName, userInstance, 
requiredStatus)) {
+            log.debug("{} spark cluster {} for userInstance {}", 
STARTING.toString(), compName, expName);
+            updateComputationalStatus(userInfo.getName(), project, expName, 
compName, STARTING);
+            EndpointDTO endpointDTO = 
endpointService.get(userInstance.getEndpoint());
+            final String uuid = provisioningService.post(endpointDTO.getUrl() 
+ ComputationalAPI.COMPUTATIONAL_START_SPARK,
+                    userInfo.getAccessToken(),
+                    requestBuilder.newComputationalStart(userInfo, 
userInstance, compName, endpointDTO),
+                    String.class);
                        requestId.put(userInfo.getName(), uuid);
                } else {
                        throw new 
IllegalStateException(String.format(DATAENGINE_NOT_PRESENT_FORMAT, 
requiredStatus.toString(), compName, expName));
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 d7fdef1..dff0a0b 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
@@ -44,7 +44,6 @@ import lombok.extern.slf4j.Slf4j;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Stream;
@@ -137,7 +136,7 @@ public class EnvironmentServiceImpl implements 
EnvironmentService {
                 .stream()
                 .filter(e -> UserInstanceStatus.RUNNING == e.getStatus())
                 .forEach(endpoint -> 
projectService.stop(securityService.getServiceAccountInfo(DLAB_SYSTEM_USER),
-                        endpoint.getName(), project, 
Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+                        endpoint.getName(), project, AUDIT_QUOTA_MESSAGE));
        }
 
        @ProjectAdmin
@@ -150,7 +149,7 @@ public class EnvironmentServiceImpl implements 
EnvironmentService {
     @Override
     public void stopComputational(@User UserInfo userInfo, String user, 
@Project String project, String exploratoryName, String computationalName) {
         computationalService.stopSparkCluster(userInfo, user, project, 
exploratoryName, computationalName,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, 
exploratoryName)));
+                String.format(AUDIT_MESSAGE, exploratoryName));
     }
 
        @ProjectAdmin
@@ -162,9 +161,8 @@ public class EnvironmentServiceImpl implements 
EnvironmentService {
        @ProjectAdmin
        @Override
        public void terminateComputational(@User UserInfo userInfo, String 
user, @Project String project, String exploratoryName, String 
computationalName) {
-               computationalService.terminateComputational(userInfo, user, 
project, exploratoryName, computationalName,
-                               
Collections.singletonList(String.format(AUDIT_MESSAGE, exploratoryName)));
-       }
+        computationalService.terminateComputational(userInfo, user, project, 
exploratoryName, computationalName, String.format(AUDIT_MESSAGE, 
exploratoryName));
+    }
 
        private UserDTO toUserDTO(String u, UserDTO.Status status) {
                return new UserDTO(u, 
settingsDAO.getAllowedBudget(u).orElse(null), status);
@@ -184,9 +182,9 @@ public class EnvironmentServiceImpl implements 
EnvironmentService {
        }
 
        private void stopNotebookWithServiceAccount(UserInstanceDTO instance) {
-               final UserInfo userInfo = 
securityService.getServiceAccountInfo(DLAB_SYSTEM_USER);
-               exploratoryService.stop(userInfo, instance.getUser(), 
instance.getProject(), instance.getExploratoryName(), 
Collections.singletonList(AUDIT_QUOTA_MESSAGE));
-       }
+        final UserInfo userInfo = 
securityService.getServiceAccountInfo(DLAB_SYSTEM_USER);
+        exploratoryService.stop(userInfo, instance.getUser(), 
instance.getProject(), instance.getExploratoryName(), AUDIT_QUOTA_MESSAGE);
+    }
 
        private List<UserResourceInfo> getProjectEnv(ProjectDTO projectDTO, 
List<UserInstanceDTO> allInstances) {
                final Stream<UserResourceInfo> userResources = allInstances
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 cb44f72..8e60635 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
@@ -116,23 +116,23 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
        }
 
        @BudgetLimited
-       @Audit(action = START_NOTEBOOK)
-       @Override
-       public String start(@User UserInfo userInfo, @ResourceName String 
exploratoryName, @Project String project, @Info List<String> auditInfo) {
-               return action(userInfo, userInfo.getName(), project, 
exploratoryName, EXPLORATORY_START, STARTING);
-       }
-
-       @Audit(action = STOP_NOTEBOOK)
-       @Override
-       public String stop(@User UserInfo userInfo, String resourceCreator, 
@Project String project, @ResourceName String exploratoryName, @Info 
List<String> auditInfo) {
-               return action(userInfo, resourceCreator, project, 
exploratoryName, EXPLORATORY_STOP, STOPPING);
-       }
-
-       @Audit(action = TERMINATE_NOTEBOOK)
-       @Override
-       public String terminate(@User UserInfo userInfo, String 
resourceCreator, @Project String project, @ResourceName String exploratoryName, 
@Info List<String> auditInfo) {
-               return action(userInfo, resourceCreator, project, 
exploratoryName, EXPLORATORY_TERMINATE, TERMINATING);
-       }
+    @Audit(action = START_NOTEBOOK)
+    @Override
+    public String start(@User UserInfo userInfo, @ResourceName String 
exploratoryName, @Project String project, @Info String auditInfo) {
+        return action(userInfo, userInfo.getName(), project, exploratoryName, 
EXPLORATORY_START, STARTING);
+    }
+
+    @Audit(action = STOP_NOTEBOOK)
+    @Override
+    public String stop(@User UserInfo userInfo, String resourceCreator, 
@Project String project, @ResourceName String exploratoryName, @Info String 
auditInfo) {
+        return action(userInfo, resourceCreator, project, exploratoryName, 
EXPLORATORY_STOP, STOPPING);
+    }
+
+    @Audit(action = TERMINATE_NOTEBOOK)
+    @Override
+    public String terminate(@User UserInfo userInfo, String resourceCreator, 
@Project String project, @ResourceName String exploratoryName, @Info String 
auditInfo) {
+        return action(userInfo, resourceCreator, project, exploratoryName, 
EXPLORATORY_TERMINATE, TERMINATING);
+    }
 
        @BudgetLimited
        @Audit(action = CREATE_NOTEBOOK)
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 106c608..b1156f6 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
@@ -32,9 +32,7 @@ import com.google.inject.Inject;
 import com.google.inject.name.Named;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
@@ -161,11 +159,11 @@ public class ProjectServiceImpl implements ProjectService 
{
        }
 
        @Audit(action = STOP_EDGE_NODE)
-       @Override
-       public void stop(@User UserInfo userInfo, @ResourceName String 
endpoint, @Project String name, @Info List<String> auditInfo) {
-               projectActionOnCloud(userInfo, name, STOP_PRJ_API, endpoint);
-               projectDAO.updateEdgeStatus(name, endpoint, 
UserInstanceStatus.STOPPING);
-       }
+    @Override
+    public void stop(@User UserInfo userInfo, @ResourceName String endpoint, 
@Project String name, @Info String auditInfo) {
+        projectActionOnCloud(userInfo, name, STOP_PRJ_API, endpoint);
+        projectDAO.updateEdgeStatus(name, endpoint, 
UserInstanceStatus.STOPPING);
+    }
 
        @ProjectAdmin
        @Override
@@ -194,29 +192,29 @@ public class ProjectServiceImpl implements ProjectService 
{
        @ProjectAdmin
        @Override
        public void update(@User UserInfo userInfo, UpdateProjectDTO 
projectDTO, @Project String projectName) {
-               final ProjectDTO project = 
projectDAO.get(projectDTO.getName()).orElseThrow(projectNotFound());
-               final Set<String> endpoints = project.getEndpoints()
-                               .stream()
-                               .map(ProjectEndpointDTO::getName)
-                               .collect(toSet());
-               final Set<String> newEndpoints = new 
HashSet<>(projectDTO.getEndpoints());
-               newEndpoints.removeAll(endpoints);
-               final List<String> projectAudit = 
updateProjectAudit(projectDTO, project, newEndpoints);
-               updateProject(userInfo, projectName, projectDTO, project, 
newEndpoints, projectAudit);
-       }
-
-       @Audit(action = UPDATE_PROJECT)
-       public void updateProject(@User UserInfo userInfo, @Project 
@ResourceName String projectName, UpdateProjectDTO projectDTO, ProjectDTO 
project, Set<String> newEndpoints,
-                                                         @Info List<String> 
projectAudit) {
-               final List<ProjectEndpointDTO> endpointsToBeCreated = 
newEndpoints
-                               .stream()
-                               .map(e -> new ProjectEndpointDTO(e, 
UserInstanceStatus.CREATING, null))
-                               .collect(Collectors.toList());
-               project.getEndpoints().addAll(endpointsToBeCreated);
-               projectDAO.update(new ProjectDTO(project.getName(), 
projectDTO.getGroups(), project.getKey(),
-                               project.getTag(), project.getBudget(), 
project.getEndpoints(), projectDTO.isSharedImageEnabled()));
-               endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, 
projectName, project, e.getName()));
-       }
+        final ProjectDTO project = 
projectDAO.get(projectDTO.getName()).orElseThrow(projectNotFound());
+        final Set<String> endpoints = project.getEndpoints()
+                .stream()
+                .map(ProjectEndpointDTO::getName)
+                .collect(toSet());
+        final Set<String> newEndpoints = new 
HashSet<>(projectDTO.getEndpoints());
+        newEndpoints.removeAll(endpoints);
+        final String projectUpdateAudit = updateProjectAudit(projectDTO, 
project, newEndpoints);
+        updateProject(userInfo, projectName, projectDTO, project, 
newEndpoints, projectUpdateAudit);
+    }
+
+    @Audit(action = UPDATE_PROJECT)
+    public void updateProject(@User UserInfo userInfo, @Project @ResourceName 
String projectName, UpdateProjectDTO projectDTO, ProjectDTO project, 
Set<String> newEndpoints,
+                              @Info String projectAudit) {
+        final List<ProjectEndpointDTO> endpointsToBeCreated = newEndpoints
+                .stream()
+                .map(e -> new ProjectEndpointDTO(e, 
UserInstanceStatus.CREATING, null))
+                .collect(Collectors.toList());
+        project.getEndpoints().addAll(endpointsToBeCreated);
+        projectDAO.update(new ProjectDTO(project.getName(), 
projectDTO.getGroups(), project.getKey(),
+                project.getTag(), project.getBudget(), project.getEndpoints(), 
projectDTO.isSharedImageEnabled()));
+        endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, 
projectName, project, e.getName()));
+    }
 
        @Override
        public void updateBudget(UserInfo userInfo, 
List<UpdateProjectBudgetDTO> dtos) {
@@ -229,10 +227,10 @@ public class ProjectServiceImpl implements ProjectService 
{
                projects.forEach(p -> updateBudget(userInfo, p.getName(), 
p.getBudget(), getUpdateBudgetAudit(p)));
        }
 
-       @Audit(action = UPDATE_PROJECT)
-       public void updateBudget(@User UserInfo userInfo, @Project 
@ResourceName String name, Integer budget, @Info List<String> 
updateBudgetAudit) {
-               projectDAO.updateBudget(name, budget);
-       }
+    @Audit(action = UPDATE_PROJECT)
+    public void updateBudget(@User UserInfo userInfo, @Project @ResourceName 
String name, Integer budget, @Info String updateBudgetAudit) {
+        projectDAO.updateBudget(name, budget);
+    }
 
        @Override
        public boolean isAnyProjectAssigned(UserInfo userInfo) {
@@ -285,43 +283,43 @@ public class ProjectServiceImpl implements ProjectService 
{
        private void checkProjectRelatedResourcesInProgress(String projectName, 
List<ProjectEndpointDTO> endpoints, String action) {
                boolean edgeProgress = endpoints
                                .stream().anyMatch(e ->
-                                               
Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, 
UserInstanceStatus.STOPPING,
-                                                               
UserInstanceStatus.TERMINATING).contains(e.getStatus()));
-
-               List<String> endpointsName = 
endpoints.stream().map(ProjectEndpointDTO::getName).collect(Collectors.toList());
-               if (edgeProgress || 
!checkExploratoriesAndComputationalProgress(projectName, endpointsName)) {
-                       throw new ResourceConflictException((String.format("Can 
not %s environment because one of project " +
-                                       "resource is in processing stage", 
action)));
-               }
-       }
-
-       private List<String> updateProjectAudit(UpdateProjectDTO projectDTO, 
ProjectDTO project, Set<String> newEndpoints) {
-               if (configuration.isAuditEnabled()) {
-                       return null;
-               }
-               final List<String> audit = new ArrayList<>();
-               final Set<String> newGroups = new 
HashSet<>(projectDTO.getGroups());
-               newGroups.removeAll(project.getGroups());
-               final Set<String> removedGroups = new 
HashSet<>(project.getGroups());
-               removedGroups.removeAll(projectDTO.getGroups());
-
-               if (!newEndpoints.isEmpty()) {
-                       audit.add(String.format(AUDIT_ADD_ENDPOINT, 
String.join(", ", newEndpoints)));
-               }
-               if (!newGroups.isEmpty()) {
-                       audit.add(String.format(AUDIT_ADD_GROUP, String.join(", 
", newGroups)));
-               }
-               if (!removedGroups.isEmpty()) {
-                       audit.add(String.format(AUDIT_REMOVE_GROUP, 
String.join(", ", removedGroups)));
-               }
-               return audit;
-       }
-
-       private List<String> getUpdateBudgetAudit(ProjectDTO p) {
-               return 
Collections.singletonList(String.format(AUDIT_UPDATE_BUDGET, 
get(p.getName()).getBudget(), p.getBudget()));
-       }
-
-       private Supplier<ResourceNotFoundException> projectNotFound() {
-               return () -> new ResourceNotFoundException("Project with passed 
name not found");
-       }
+                        Arrays.asList(UserInstanceStatus.CREATING, 
UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING,
+                                
UserInstanceStatus.TERMINATING).contains(e.getStatus()));
+
+        List<String> endpointsName = 
endpoints.stream().map(ProjectEndpointDTO::getName).collect(Collectors.toList());
+        if (edgeProgress || 
!checkExploratoriesAndComputationalProgress(projectName, endpointsName)) {
+            throw new ResourceConflictException((String.format("Can not %s 
environment because one of project " +
+                    "resource is in processing stage", action)));
+        }
+    }
+
+    private String updateProjectAudit(UpdateProjectDTO projectDTO, ProjectDTO 
project, Set<String> newEndpoints) {
+        if (configuration.isAuditEnabled()) {
+            return null;
+        }
+        StringBuilder audit = new StringBuilder();
+        final Set<String> newGroups = new HashSet<>(projectDTO.getGroups());
+        newGroups.removeAll(project.getGroups());
+        final Set<String> removedGroups = new HashSet<>(project.getGroups());
+        removedGroups.removeAll(projectDTO.getGroups());
+
+        if (!newEndpoints.isEmpty()) {
+            audit.append(String.format(AUDIT_ADD_ENDPOINT, String.join(", ", 
newEndpoints)));
+        }
+        if (!newGroups.isEmpty()) {
+            audit.append(String.format(AUDIT_ADD_GROUP, String.join(", ", 
newGroups)));
+        }
+        if (!removedGroups.isEmpty()) {
+            audit.append(String.format(AUDIT_REMOVE_GROUP, String.join(", ", 
removedGroups)));
+        }
+        return audit.toString();
+    }
+
+    private String getUpdateBudgetAudit(ProjectDTO p) {
+        return String.format(AUDIT_UPDATE_BUDGET, 
get(p.getName()).getBudget(), p.getBudget());
+    }
+
+    private Supplier<ResourceNotFoundException> projectNotFound() {
+        return () -> new ResourceNotFoundException("Project with passed name 
not found");
+    }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
index 6033576..127c394 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
@@ -51,7 +51,6 @@ import java.time.LocalTime;
 import java.time.OffsetDateTime;
 import java.time.ZoneOffset;
 import java.time.temporal.ChronoUnit;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -219,7 +218,7 @@ public class SchedulerJobServiceImpl implements 
SchedulerJobService {
         final String compName = job.getComputationalName();
         final String user = job.getUser();
         log.debug("Stopping exploratory {} computational {} for user {} by 
scheduler", expName, compName, user);
-        
computationalService.stopSparkCluster(securityService.getServiceAccountInfo(user),
 user, project, expName, compName, Collections.singletonList(AUDIT_MESSAGE));
+        
computationalService.stopSparkCluster(securityService.getServiceAccountInfo(user),
 user, project, expName, compName, AUDIT_MESSAGE);
     }
 
        private void terminateComputational(SchedulerJobData job) {
@@ -228,16 +227,16 @@ public class SchedulerJobServiceImpl implements 
SchedulerJobService {
         final String compName = job.getComputationalName();
         final UserInfo userInfo = securityService.getServiceAccountInfo(user);
         log.debug("Terminating exploratory {} computational {} for user {} by 
scheduler", expName, compName, user);
-        computationalService.terminateComputational(userInfo, user, 
job.getProject(), expName, compName, Collections.singletonList(AUDIT_MESSAGE));
+        computationalService.terminateComputational(userInfo, user, 
job.getProject(), expName, compName, AUDIT_MESSAGE);
     }
 
        private void stopExploratory(SchedulerJobData job) {
-               final String expName = job.getExploratoryName();
-               final String user = job.getUser();
-               final String project = job.getProject();
-               log.debug("Stopping exploratory {} for user {} by scheduler", 
expName, user);
-               
exploratoryService.stop(securityService.getServiceAccountInfo(user), user, 
project, expName, Collections.singletonList(AUDIT_MESSAGE));
-       }
+        final String expName = job.getExploratoryName();
+        final String user = job.getUser();
+        final String project = job.getProject();
+        log.debug("Stopping exploratory {} for user {} by scheduler", expName, 
user);
+        exploratoryService.stop(securityService.getServiceAccountInfo(user), 
user, project, expName, AUDIT_MESSAGE);
+    }
 
        private List<SchedulerJobData> 
getExploratorySchedulersForTerminating(OffsetDateTime now) {
                return 
schedulerJobDAO.getExploratorySchedulerDataWithOneOfStatus(RUNNING, STOPPED)
@@ -254,35 +253,35 @@ public class SchedulerJobServiceImpl implements 
SchedulerJobService {
        }
 
        private void startExploratory(SchedulerJobData schedulerJobData) {
-               final String user = schedulerJobData.getUser();
-               final String exploratoryName = 
schedulerJobData.getExploratoryName();
-               final String project = schedulerJobData.getProject();
-               log.debug("Starting exploratory {} for user {} by scheduler", 
exploratoryName, user);
-               
exploratoryService.start(securityService.getServiceAccountInfo(user), 
exploratoryName, project, Collections.singletonList(AUDIT_MESSAGE));
-               if (schedulerJobData.getJobDTO().isSyncStartRequired()) {
-                       log.trace("Starting computational for exploratory {} 
for user {} by scheduler", exploratoryName, user);
-                       final DataEngineType sparkCluster = 
DataEngineType.SPARK_STANDALONE;
-                       final List<UserComputationalResource> compToBeStarted =
-                                       
computationalDAO.findComputationalResourcesWithStatus(user, project, 
exploratoryName, STOPPED);
-
-                       compToBeStarted
-                                       .stream()
-                                       .filter(compResource -> 
shouldClusterBeStarted(sparkCluster, compResource))
-                                       .forEach(comp -> startSpark(user, 
exploratoryName, comp.getComputationalName(), project));
+        final String user = schedulerJobData.getUser();
+        final String exploratoryName = schedulerJobData.getExploratoryName();
+        final String project = schedulerJobData.getProject();
+        log.debug("Starting exploratory {} for user {} by scheduler", 
exploratoryName, user);
+        exploratoryService.start(securityService.getServiceAccountInfo(user), 
exploratoryName, project, AUDIT_MESSAGE);
+        if (schedulerJobData.getJobDTO().isSyncStartRequired()) {
+            log.trace("Starting computational for exploratory {} for user {} 
by scheduler", exploratoryName, user);
+            final DataEngineType sparkCluster = 
DataEngineType.SPARK_STANDALONE;
+            final List<UserComputationalResource> compToBeStarted =
+                    
computationalDAO.findComputationalResourcesWithStatus(user, project, 
exploratoryName, STOPPED);
+
+            compToBeStarted
+                    .stream()
+                    .filter(compResource -> 
shouldClusterBeStarted(sparkCluster, compResource))
+                    .forEach(comp -> startSpark(user, exploratoryName, 
comp.getComputationalName(), project));
                }
        }
 
        private void terminateExploratory(SchedulerJobData job) {
-               final String user = job.getUser();
-               final String project = job.getProject();
-               final String expName = job.getExploratoryName();
-               log.debug("Terminating exploratory {} for user {} by 
scheduler", expName, user);
-               
exploratoryService.terminate(securityService.getUserInfoOffline(user), user, 
project, expName, Collections.singletonList(AUDIT_MESSAGE));
-       }
+        final String user = job.getUser();
+        final String project = job.getProject();
+        final String expName = job.getExploratoryName();
+        log.debug("Terminating exploratory {} for user {} by scheduler", 
expName, user);
+        exploratoryService.terminate(securityService.getUserInfoOffline(user), 
user, project, expName, AUDIT_MESSAGE);
+    }
 
        private void startSpark(String user, String expName, String compName, 
String project) {
         log.debug("Starting exploratory {} computational {} for user {} by 
scheduler", expName, compName, user);
-        
computationalService.startSparkCluster(securityService.getServiceAccountInfo(user),
 expName, compName, project, Collections.singletonList(AUDIT_MESSAGE));
+        
computationalService.startSparkCluster(securityService.getServiceAccountInfo(user),
 expName, compName, project, AUDIT_MESSAGE);
     }
 
        private boolean shouldClusterBeStarted(DataEngineType sparkCluster, 
UserComputationalResource compResource) {
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
index a9ab5f2..b68ea11 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
@@ -46,7 +46,6 @@ import java.util.List;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyList;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.eq;
@@ -112,7 +111,7 @@ public class ExploratoryResourceTest extends TestBase {
        @Test
        public void start() {
         ExploratoryActionFormDTO exploratoryDTO = 
getExploratoryActionFormDTO();
-        when(exploratoryService.start(any(UserInfo.class), anyString(), 
anyString(), anyList())).thenReturn("someUuid");
+        when(exploratoryService.start(any(UserInfo.class), anyString(), 
anyString(), anyString())).thenReturn("someUuid");
         final Response response = resources.getJerseyTest()
                 .target("/infrastructure_provision/exploratory_environment")
                 .request()
@@ -130,7 +129,7 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void startUnprocessableEntity() {
-        when(exploratoryService.start(any(UserInfo.class), anyString(), 
anyString(), anyList())).thenReturn("someUuid");
+        when(exploratoryService.start(any(UserInfo.class), anyString(), 
anyString(), anyString())).thenReturn("someUuid");
         final Response response = resources.getJerseyTest()
                 .target("/infrastructure_provision/exploratory_environment")
                 .request()
@@ -145,16 +144,16 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void stop() {
-               when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList())).thenReturn("someUuid");
-               final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
-                               .request()
-                               .header("Authorization", "Bearer " + TOKEN)
-                               .delete();
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                
.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-               assertEquals(HttpStatus.SC_OK, response.getStatus());
-               assertEquals("someUuid", response.readEntity(String.class));
-               assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
                verify(exploratoryService).stop(getUserInfo(), 
getUserInfo().getName(), "project", "someName", null);
                verifyNoMoreInteractions(exploratoryService);
@@ -162,17 +161,17 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void stopWithFailedAuth() throws AuthenticationException {
-               authFailSetup();
-               when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList())).thenReturn("someUuid");
-               final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
-                               .request()
-                               .header("Authorization", "Bearer " + TOKEN)
-                               .delete();
+        authFailSetup();
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                
.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-               assertEquals(HttpStatus.SC_OK, response.getStatus());
-               assertEquals("someUuid", response.readEntity(String.class));
-               assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
                verify(exploratoryService).stop(getUserInfo(), 
getUserInfo().getName(), "project", "someName", null);
                verifyNoMoreInteractions(exploratoryService);
@@ -180,8 +179,8 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void stopWithException() {
-               doThrow(new DlabException("Could not stop exploratory 
environment"))
-                               
.when(exploratoryService).stop(any(UserInfo.class), anyString(), anyString(), 
anyString(), anyList());
+        doThrow(new DlabException("Could not stop exploratory environment"))
+                .when(exploratoryService).stop(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyString());
                final Response response = resources.getJerseyTest()
                                
.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
                                .request()
@@ -201,16 +200,16 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void terminate() {
-               when(exploratoryService.terminate(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyList())).thenReturn("someUuid");
-               final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
-                               .request()
-                               .header("Authorization", "Bearer " + TOKEN)
-                               .delete();
+        when(exploratoryService.terminate(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                
.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-               assertEquals(HttpStatus.SC_OK, response.getStatus());
-               assertEquals("someUuid", response.readEntity(String.class));
-               assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
                verify(exploratoryService).terminate(getUserInfo(), 
getUserInfo().getName(), "project", "someName", null);
                verifyNoMoreInteractions(exploratoryService);
@@ -218,17 +217,17 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void terminateWithFailedAuth() throws AuthenticationException {
-               authFailSetup();
-               when(exploratoryService.terminate(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyList())).thenReturn("someUuid");
-               final Response response = resources.getJerseyTest()
-                               
.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
-                               .request()
-                               .header("Authorization", "Bearer " + TOKEN)
-                               .delete();
+        authFailSetup();
+        when(exploratoryService.terminate(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                
.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-               assertEquals(HttpStatus.SC_OK, response.getStatus());
-               assertEquals("someUuid", response.readEntity(String.class));
-               assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, 
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
                verify(exploratoryService).terminate(getUserInfo(), 
getUserInfo().getName(), "project", "someName", null);
                verifyNoMoreInteractions(exploratoryService);
@@ -236,8 +235,8 @@ public class ExploratoryResourceTest extends TestBase {
 
        @Test
        public void terminateWithException() {
-               doThrow(new DlabException("Could not terminate exploratory 
environment"))
-                               
.when(exploratoryService).terminate(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList());
+        doThrow(new DlabException("Could not terminate exploratory 
environment"))
+                .when(exploratoryService).terminate(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyString());
                final Response response = resources.getJerseyTest()
                                
.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
                                .request()
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
index fb44f30..1b9babc 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
@@ -172,7 +172,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = 
(SparkStandaloneClusterCreateForm) formList.get(0);
         boolean creationResult = 
computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertTrue(creationResult);
 
         verify(projectService).get(PROJECT);
@@ -198,7 +198,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = 
(SparkStandaloneClusterCreateForm) formList.get(0);
         boolean creationResult = 
computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertFalse(creationResult);
         verify(computationalDAO).addComputational(eq(USER), 
eq(EXPLORATORY_NAME), eq(PROJECT), refEq(sparkClusterResource));
         verifyNoMoreInteractions(configuration, computationalDAO);
@@ -216,7 +216,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = 
(SparkStandaloneClusterCreateForm) formList.get(0);
         try {
-            computationalService.createSparkCluster(userInfo, form.getName(), 
form, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+            computationalService.createSparkCluster(userInfo, form.getName(), 
form, PROJECT, String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (ResourceNotFoundException e) {
             assertEquals("Exploratory for user with name not found", 
e.getMessage());
         }
@@ -246,7 +246,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = 
(SparkStandaloneClusterCreateForm) formList.get(0);
         try {
-            computationalService.createSparkCluster(userInfo, form.getName(), 
form, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+            computationalService.createSparkCluster(userInfo, form.getName(), 
form, PROJECT, String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (DlabException e) {
             assertEquals("Cannot create instance of resource class ", 
e.getMessage());
         }
@@ -283,7 +283,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn(UUID);
         when(requestId.put(anyString(), anyString())).thenReturn(UUID);
 
-        computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, 
Collections.singletonList(AUDIT_MESSAGE));
+        computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
 
         
verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusTerminating,
 "self"));
         verify(computationalDAO).fetchComputationalFields(USER, PROJECT, 
EXPLORATORY_NAME, COMP_NAME);
@@ -308,7 +308,7 @@ public class ComputationalServiceImplTest {
                                .thenReturn(mock(UpdateResult.class));
 
         try {
-            computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, 
Collections.singletonList(AUDIT_MESSAGE));
+            computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
         } catch (DlabException e) {
             assertEquals("Could not update computational resource status", 
e.getMessage());
         }
@@ -329,7 +329,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn(mock(UpdateResult.class));
 
         try {
-            computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, 
Collections.singletonList(AUDIT_MESSAGE));
+            computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
         } catch (DlabException e) {
             assertEquals("Computational resource for user with exploratory 
name not found.", e.getMessage());
         }
@@ -363,7 +363,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn(mock(UpdateResult.class));
 
         try {
-            computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, 
Collections.singletonList(AUDIT_MESSAGE));
+            computationalService.terminateComputational(userInfo, 
userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
         } catch (DlabException e) {
             assertEquals("Cannot create instance of resource class ", 
e.getMessage());
         }
@@ -397,7 +397,7 @@ public class ComputationalServiceImplTest {
 
         ComputationalCreateFormDTO form = formList.get(1);
         boolean creationResult = 
computationalService.createDataEngineService(userInfo, form.getName(), form, 
ucResource, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertTrue(creationResult);
 
         verify(projectService).get(PROJECT);
@@ -425,7 +425,7 @@ public class ComputationalServiceImplTest {
 
         ComputationalCreateFormDTO form = formList.get(1);
         boolean creationResult = 
computationalService.createDataEngineService(userInfo, form.getName(), form, 
ucResource, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertFalse(creationResult);
 
         verify(computationalDAO).addComputational(eq(USER), 
eq(EXPLORATORY_NAME), eq(PROJECT), refEq(ucResource));
@@ -445,7 +445,7 @@ public class ComputationalServiceImplTest {
         ComputationalCreateFormDTO form = formList.get(1);
         try {
             computationalService.createDataEngineService(userInfo, 
form.getName(), form, ucResource, PROJECT,
-                    Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+                    String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (DlabException e) {
             assertEquals("Exploratory for user with name not found", 
e.getMessage());
         }
@@ -479,7 +479,7 @@ public class ComputationalServiceImplTest {
         ComputationalCreateFormDTO form = formList.get(1);
         try {
             computationalService.createDataEngineService(userInfo, 
form.getName(), form, ucResource, PROJECT,
-                    Collections.singletonList(String.format(AUDIT_MESSAGE, 
form.getNotebookName())));
+                    String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (DlabException e) {
             assertEquals("Could not send request for creation the 
computational resource compName: " +
                     "Cannot create instance of resource class ", 
e.getMessage());
@@ -511,7 +511,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn("someUuid");
         when(requestId.put(anyString(), anyString())).thenReturn("someUuid");
 
-        computationalService.stopSparkCluster(userInfo, userInfo.getName(), 
PROJECT, EXPLORATORY_NAME, COMP_NAME, 
Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME)));
+        computationalService.stopSparkCluster(userInfo, userInfo.getName(), 
PROJECT, EXPLORATORY_NAME, COMP_NAME, String.format(AUDIT_MESSAGE, 
EXPLORATORY_NAME));
 
         
verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusStopping,
 "self"));
         verify(exploratoryDAO).fetchExploratoryFields(USER, PROJECT, 
EXPLORATORY_NAME, true);
@@ -532,7 +532,7 @@ public class ComputationalServiceImplTest {
         expectedException.expect(IllegalStateException.class);
         expectedException.expectMessage("There is no running dataengine 
compName for exploratory expName");
 
-        computationalService.stopSparkCluster(userInfo, userInfo.getName(), 
PROJECT, EXPLORATORY_NAME, COMP_NAME, 
Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME)));
+        computationalService.stopSparkCluster(userInfo, userInfo.getName(), 
PROJECT, EXPLORATORY_NAME, COMP_NAME, String.format(AUDIT_MESSAGE, 
EXPLORATORY_NAME));
     }
 
        @Test
@@ -551,7 +551,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn("someUuid");
         when(requestId.put(anyString(), anyString())).thenReturn("someUuid");
 
-        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, 
COMP_NAME, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, 
EXPLORATORY_NAME)));
+        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, 
COMP_NAME, PROJECT, String.format(AUDIT_MESSAGE, EXPLORATORY_NAME));
 
         
verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusStarting,
 "self"));
         verify(exploratoryDAO).fetchExploratoryFields(USER, PROJECT, 
EXPLORATORY_NAME, true);
@@ -575,7 +575,7 @@ public class ComputationalServiceImplTest {
         expectedException.expect(IllegalStateException.class);
         expectedException.expectMessage("There is no stopped dataengine 
compName for exploratory expName");
 
-        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, 
COMP_NAME, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, 
EXPLORATORY_NAME)));
+        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, 
COMP_NAME, PROJECT, String.format(AUDIT_MESSAGE, EXPLORATORY_NAME));
     }
 
        @Test
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
index bf4753e..fc619d2 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
@@ -48,7 +48,6 @@ import java.util.List;
 import java.util.Optional;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyList;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anySet;
 import static org.mockito.Mockito.anyString;
@@ -132,18 +131,18 @@ public class EnvironmentServiceImplTest {
         final ProjectDTO projectDTO = getProjectDTO();
         
when(exploratoryDAO.fetchRunningExploratoryFieldsForProject(anyString())).thenReturn(getUserInstances());
         
when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
-        when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList())).thenReturn(UUID);
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn(UUID);
         when(projectService.get(anyString())).thenReturn(projectDTO);
-        doNothing().when(projectService).stop(any(UserInfo.class), 
anyString(), anyString(), anyList());
+        doNothing().when(projectService).stop(any(UserInfo.class), 
anyString(), anyString(), anyString());
 
         environmentService.stopProjectEnvironment(PROJECT_NAME);
 
         
verify(exploratoryDAO).fetchRunningExploratoryFieldsForProject(PROJECT_NAME);
-        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), 
eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
-        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_2), 
eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(AUDIT_QUOTA_MESSAGE));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_2), eq(AUDIT_QUOTA_MESSAGE));
         verify(securityService, 
times(3)).getServiceAccountInfo(DLAB_SYSTEM_USER);
         verify(projectService).get(eq(PROJECT_NAME));
-        verify(projectService).stop(refEq(userInfo), eq(ENDPOINT_NAME), 
eq(PROJECT_NAME), eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        verify(projectService).stop(refEq(userInfo), eq(ENDPOINT_NAME), 
eq(PROJECT_NAME), eq(AUDIT_QUOTA_MESSAGE));
         
verify(exploratoryDAO).fetchProjectExploratoriesWhereStatusIn(PROJECT_NAME, 
Arrays.asList(UserInstanceStatus.CREATING,
                 UserInstanceStatus.STARTING, 
UserInstanceStatus.CREATING_IMAGE),
                 UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, 
UserInstanceStatus.CREATING_IMAGE);
@@ -152,49 +151,49 @@ public class EnvironmentServiceImplTest {
 
        @Test
        public void stopExploratory() {
-               final UserInfo userInfo = getUserInfo();
-               when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList())).thenReturn(UUID);
+        final UserInfo userInfo = getUserInfo();
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn(UUID);
 
-               environmentService.stopExploratory(userInfo, USER, 
PROJECT_NAME, EXPLORATORY_NAME_1);
+        environmentService.stopExploratory(userInfo, USER, PROJECT_NAME, 
EXPLORATORY_NAME_1);
 
-               verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
-               verifyNoMoreInteractions(securityService, exploratoryService);
-       }
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
+        verifyNoMoreInteractions(securityService, exploratoryService);
+    }
 
        @Test
        public void stopComputational() {
         final UserInfo userInfo = getUserInfo();
-        
doNothing().when(computationalService).stopSparkCluster(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyString(), anyList());
+        
doNothing().when(computationalService).stopSparkCluster(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyString(), anyString());
 
         environmentService.stopComputational(userInfo, USER, PROJECT_NAME, 
EXPLORATORY_NAME_1, "compName");
 
         verify(computationalService).stopSparkCluster(refEq(userInfo), 
eq(userInfo.getName()), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), 
eq("compName"),
-                eq(Collections.singletonList(String.format(AUDIT_MESSAGE, 
EXPLORATORY_NAME_1))));
+                eq(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME_1)));
         verifyNoMoreInteractions(securityService, computationalService);
     }
 
        @Test
        public void terminateExploratory() {
-               final UserInfo userInfo = getUserInfo();
-               when(exploratoryService.terminate(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyList())).thenReturn(UUID);
+        final UserInfo userInfo = getUserInfo();
+        when(exploratoryService.terminate(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString())).thenReturn(UUID);
 
-               environmentService.terminateExploratory(userInfo, USER, 
PROJECT_NAME, EXPLORATORY_NAME_1);
+        environmentService.terminateExploratory(userInfo, USER, PROJECT_NAME, 
EXPLORATORY_NAME_1);
 
-               verify(exploratoryService).terminate(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
-               verifyNoMoreInteractions(securityService, exploratoryService);
-       }
+        verify(exploratoryService).terminate(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
+        verifyNoMoreInteractions(securityService, exploratoryService);
+    }
 
        @Test
        public void terminateComputational() {
                final UserInfo userInfo = getUserInfo();
-               doNothing().when(computationalService)
-                               .terminateComputational(any(UserInfo.class), 
anyString(), anyString(), anyString(), anyString(), anyList());
+        doNothing().when(computationalService)
+                .terminateComputational(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyString(), anyString());
 
                environmentService.terminateComputational(userInfo, USER, 
PROJECT_NAME, EXPLORATORY_NAME_1, "compName");
 
-               
verify(computationalService).terminateComputational(refEq(userInfo), 
eq(userInfo.getName()), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), 
eq("compName"),
-                               
eq(Collections.singletonList(String.format(AUDIT_MESSAGE, 
EXPLORATORY_NAME_1))));
-               verifyNoMoreInteractions(securityService, computationalService);
+        verify(computationalService).terminateComputational(refEq(userInfo), 
eq(userInfo.getName()), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), 
eq("compName"),
+                eq(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME_1)));
+        verifyNoMoreInteractions(securityService, computationalService);
        }
 
        private UserInfo getUserInfo() {
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
index c8e9035..6c72ef8 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
@@ -420,7 +420,7 @@ public class SchedulerJobServiceImplTest {
                verify(schedulerJobDAO)
                 .getComputationalSchedulerDataWithOneOfStatus(RUNNING, 
DataEngineType.SPARK_STANDALONE, STOPPED);
         verify(computationalService).startSparkCluster(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME),
-                eq(COMPUTATIONAL_NAME), eq(PROJECT), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(COMPUTATIONAL_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, 
computationalService);
        }
 
@@ -521,7 +521,7 @@ public class SchedulerJobServiceImplTest {
         verify(schedulerJobDAO)
                 .getComputationalSchedulerDataWithOneOfStatus(RUNNING, 
DataEngineType.SPARK_STANDALONE, RUNNING);
         verify(computationalService).stopSparkCluster(refEq(userInfo), 
eq(userInfo.getName()), eq(PROJECT),
-                eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME), 
eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, 
computationalService);
     }
 
@@ -609,19 +609,19 @@ public class SchedulerJobServiceImplTest {
                
when(schedulerJobDAO.getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(any(UserInstanceStatus.class),
 any(Date.class))).
                                
thenReturn(singletonList(getSchedulerJobData(LocalDate.now(), 
LocalDate.now().plusDays(1),
                                                
Arrays.asList(DayOfWeek.values()), Arrays.asList(DayOfWeek.values()),
-                                               
LocalDateTime.of(LocalDate.now(),
-                                                               
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
-                                               
LocalTime.now().truncatedTo(ChronoUnit.MINUTES))));
-               
when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
+                        LocalDateTime.of(LocalDate.now(),
+                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
+                        LocalTime.now().truncatedTo(ChronoUnit.MINUTES))));
+        
when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
 
-               schedulerJobService.stopExploratoryByScheduler();
+        schedulerJobService.stopExploratoryByScheduler();
 
-               verify(securityService).getServiceAccountInfo(USER);
-               
verify(schedulerJobDAO).getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(eq(RUNNING),
-                               any(Date.class));
-               verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT), eq(EXPLORATORY_NAME), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
-               verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService);
-       }
+        verify(securityService).getServiceAccountInfo(USER);
+        
verify(schedulerJobDAO).getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(eq(RUNNING),
+                any(Date.class));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT), eq(EXPLORATORY_NAME), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService);
+    }
 
        @Test
        public void 
testStopExploratoryBySchedulerWhenSchedulerIsNotConfigured() {
@@ -704,22 +704,22 @@ public class SchedulerJobServiceImplTest {
                final List<DayOfWeek> stopDays = 
Arrays.asList(DayOfWeek.values());
                
when(schedulerJobDAO.getExploratorySchedulerDataWithStatus(any(UserInstanceStatus.class)))
                                
.thenReturn(singletonList(getSchedulerJobData(LocalDate.now(), finishDate,
-                                               
Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
-                                                               
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
-                                               
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-                               )));
-               
when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
+                        Arrays.asList(DayOfWeek.values()), stopDays, 
LocalDateTime.of(LocalDate.now(),
+                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
+                        LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
+                )));
+        
when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
 
-               schedulerJobService.startExploratoryByScheduler();
+        schedulerJobService.startExploratoryByScheduler();
 
-               verify(securityService).getServiceAccountInfo(USER);
-               
verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-               verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
-               verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService);
-               verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
-               verifyNoMoreInteractions(schedulerJobDAO, exploratoryService);
-               verifyZeroInteractions(computationalService, computationalDAO);
-       }
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
+        verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService);
+        verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(schedulerJobDAO, exploratoryService);
+        verifyZeroInteractions(computationalService, computationalDAO);
+    }
 
        @Test
        public void testStartExploratoryBySchedulerWithSyncComputationalStart() 
{
@@ -740,10 +740,10 @@ public class SchedulerJobServiceImplTest {
 
         verify(securityService, times(2)).getServiceAccountInfo(USER);
         verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-        verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
+        verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
         verify(computationalDAO).findComputationalResourcesWithStatus(USER, 
PROJECT, EXPLORATORY_NAME, STOPPED);
         verify(computationalService).startSparkCluster(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME),
-                eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(PROJECT), eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService, computationalService,
                 computationalDAO);
     }
@@ -757,21 +757,21 @@ public class SchedulerJobServiceImplTest {
                                                
Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
                                                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), true, USER,
                                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-                               )));
-               
when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
-               
when(computationalDAO.findComputationalResourcesWithStatus(anyString(), 
anyString(),
-                               anyString(), 
any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
-                               DataEngineType.CLOUD_SERVICE, true)));
+                )));
+        
when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
+        
when(computationalDAO.findComputationalResourcesWithStatus(anyString(), 
anyString(),
+                anyString(), 
any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
+                DataEngineType.CLOUD_SERVICE, true)));
 
-               schedulerJobService.startExploratoryByScheduler();
+        schedulerJobService.startExploratoryByScheduler();
 
-               verify(securityService).getServiceAccountInfo(USER);
-               
verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-               verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
-               
verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, 
EXPLORATORY_NAME, STOPPED);
-               verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService, computationalDAO);
-               verifyZeroInteractions(computationalService);
-       }
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
+        verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verify(computationalDAO).findComputationalResourcesWithStatus(USER, 
PROJECT, EXPLORATORY_NAME, STOPPED);
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService, computationalDAO);
+        verifyZeroInteractions(computationalService);
+    }
 
        @Test
        public void 
testStartExploratoryBySchedulerWithSyncComputationalStartOnExploratoryButNotOnComputational()
 {
@@ -782,21 +782,21 @@ public class SchedulerJobServiceImplTest {
                                                
Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
                                                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), true, USER,
                                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-                               )));
-               
when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
-               
when(computationalDAO.findComputationalResourcesWithStatus(anyString(), 
anyString(),
-                               anyString(), 
any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
-                               DataEngineType.SPARK_STANDALONE, false)));
+                )));
+        
when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
+        
when(computationalDAO.findComputationalResourcesWithStatus(anyString(), 
anyString(),
+                anyString(), 
any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
+                DataEngineType.SPARK_STANDALONE, false)));
 
-               schedulerJobService.startExploratoryByScheduler();
+        schedulerJobService.startExploratoryByScheduler();
 
-               verify(securityService).getServiceAccountInfo(USER);
-               
verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-               verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
-               
verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, 
EXPLORATORY_NAME, STOPPED);
-               verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService, computationalDAO);
-               verifyZeroInteractions(computationalService);
-       }
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
+        verify(exploratoryService).start(refEq(getUserInfo()), 
eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verify(computationalDAO).findComputationalResourcesWithStatus(USER, 
PROJECT, EXPLORATORY_NAME, STOPPED);
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, 
exploratoryService, computationalDAO);
+        verifyZeroInteractions(computationalService);
+    }
 
        @Test
        public void 
testStartExploratoryBySchedulerWhenSchedulerIsNotConfigured() {
@@ -886,7 +886,7 @@ public class SchedulerJobServiceImplTest {
         verify(schedulerJobDAO)
                 .getComputationalSchedulerDataWithOneOfStatus(RUNNING, 
STOPPED, RUNNING);
         verify(computationalService).terminateComputational(refEq(userInfo), 
eq(userInfo.getName()), eq(PROJECT), eq(EXPLORATORY_NAME), 
eq(COMPUTATIONAL_NAME),
-                eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, 
computationalService);
     }
 
@@ -968,19 +968,19 @@ public class SchedulerJobServiceImplTest {
                final LocalDateTime terminateDateTime = 
LocalDateTime.of(LocalDate.now(),
                                
LocalTime.now().truncatedTo(ChronoUnit.MINUTES));
                final LocalDate finishDate = LocalDate.now().plusDays(1);
-               final SchedulerJobData schedulerJobData = 
getSchedulerJobData(LocalDate.now(), finishDate, startDays, stopDays
-                               , terminateDateTime, false, USER, 
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-               );
-               
when(schedulerJobDAO.getExploratorySchedulerDataWithOneOfStatus(anyVararg())).thenReturn(singletonList(schedulerJobData));
-               
when(securityService.getUserInfoOffline(anyString())).thenReturn(getUserInfo());
+        final SchedulerJobData schedulerJobData = 
getSchedulerJobData(LocalDate.now(), finishDate, startDays, stopDays
+                , terminateDateTime, false, USER, 
LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
+        );
+        
when(schedulerJobDAO.getExploratorySchedulerDataWithOneOfStatus(anyVararg())).thenReturn(singletonList(schedulerJobData));
+        
when(securityService.getUserInfoOffline(anyString())).thenReturn(getUserInfo());
 
-               schedulerJobService.terminateExploratoryByScheduler();
+        schedulerJobService.terminateExploratoryByScheduler();
 
-               verify(securityService).getUserInfoOffline(USER);
-               
verify(schedulerJobDAO).getExploratorySchedulerDataWithOneOfStatus(RUNNING, 
STOPPED);
-               verify(exploratoryService).terminate(refEq(getUserInfo()), 
eq(USER), eq(PROJECT), eq(EXPLORATORY_NAME), 
eq(Collections.singletonList(AUDIT_MESSAGE)));
-               verifyNoMoreInteractions(securityService, schedulerJobDAO, 
computationalService, exploratoryService);
-       }
+        verify(securityService).getUserInfoOffline(USER);
+        
verify(schedulerJobDAO).getExploratorySchedulerDataWithOneOfStatus(RUNNING, 
STOPPED);
+        verify(exploratoryService).terminate(refEq(getUserInfo()), eq(USER), 
eq(PROJECT), eq(EXPLORATORY_NAME), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, 
computationalService, exploratoryService);
+    }
 
        @Test
        public void 
testTerminateExploratoryBySchedulerWhenSchedulerIsNotConfigured() {


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

Reply via email to