This is an automated email from the ASF dual-hosted git repository.
caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 9f34a837b8 [Fix-10909] Returns executionStatus for each process
instance status and access token module support. (#10922)
9f34a837b8 is described below
commit 9f34a837b8ff068dcc516cf68b140c1c2a3e3381
Author: WangJPLeo <[email protected]>
AuthorDate: Wed Jul 13 20:45:52 2022 +0800
[Fix-10909] Returns executionStatus for each process instance status and
access token module support. (#10922)
* Returns executionStatus for each process instance status and access token
module support
---
.../api/service/impl/AccessTokenServiceImpl.java | 53 +++++++++---------
.../api/service/AccessTokenServiceTest.java | 64 ++++++++++++----------
.../dao/mapper/AccessTokenMapper.java | 6 +-
.../dao/mapper/AccessTokenMapper.xml | 7 ++-
.../dao/mapper/AccessTokenMapperTest.java | 5 +-
.../master/runner/WorkflowExecuteRunnable.java | 2 +
6 files changed, 76 insertions(+), 61 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AccessTokenServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AccessTokenServiceImpl.java
index c8297d342b..792138ff4e 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AccessTokenServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AccessTokenServiceImpl.java
@@ -17,33 +17,39 @@
package org.apache.dolphinscheduler.api.service.impl;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.ACCESS_TOKEN_CREATE;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.ACCESS_TOKEN_DELETE;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.ACCESS_TOKEN_UPDATE;
+
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.service.AccessTokenService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
-import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.common.utils.EncryptionUtils;
import org.apache.dolphinscheduler.dao.entity.AccessToken;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.AccessTokenMapper;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* access token service impl
@@ -69,14 +75,13 @@ public class AccessTokenServiceImpl extends BaseServiceImpl
implements AccessTok
public Result queryAccessTokenList(User loginUser, String searchVal,
Integer pageNo, Integer pageSize) {
Result result = new Result();
PageInfo<AccessToken> pageInfo = new PageInfo<>(pageNo, pageSize);
- Page<AccessToken> page = new Page<>(pageNo, pageSize);
- int userId = loginUser.getId();
- if (loginUser.getUserType() == UserType.ADMIN_USER) {
- userId = 0;
+ Set<Integer> ids =
resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ACCESS_TOKEN,
loginUser.getId(), logger);
+ if (!ids.isEmpty()) {
+ Page<AccessToken> page = new Page<>(pageNo, pageSize);
+ IPage<AccessToken> accessTokenList =
accessTokenMapper.selectAccessTokenPage(page, new ArrayList<>(ids), searchVal);
+ pageInfo.setTotal((int) accessTokenList.getTotal());
+ pageInfo.setTotalList(accessTokenList.getRecords());
}
- IPage<AccessToken> accessTokenList =
accessTokenMapper.selectAccessTokenPage(page, searchVal, userId);
- pageInfo.setTotal((int) accessTokenList.getTotal());
- pageInfo.setTotalList(accessTokenList.getRecords());
result.setData(pageInfo);
putMsg(result, Status.SUCCESS);
return result;
@@ -93,14 +98,11 @@ public class AccessTokenServiceImpl extends BaseServiceImpl
implements AccessTok
public Map<String, Object> queryAccessTokenByUser(User loginUser, Integer
userId) {
Map<String, Object> result = new HashMap<>();
result.put(Constants.STATUS, false);
- // no permission
- if (loginUser.getUserType().equals(UserType.GENERAL_USER) &&
loginUser.getId() != userId) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
+ List<AccessToken> accessTokenList = Collections.EMPTY_LIST;
+ Set<Integer> ids =
resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ACCESS_TOKEN,
loginUser.getId(), logger);
+ if (!ids.isEmpty()) {
+ accessTokenList = this.accessTokenMapper.selectBatchIds(ids);
}
- userId = loginUser.getUserType().equals(UserType.ADMIN_USER) ? 0 :
userId;
- // query access token for specified user
- List<AccessToken> accessTokenList =
this.accessTokenMapper.queryAccessTokenByUser(userId);
result.put(Constants.DATA_LIST, accessTokenList);
this.putMsg(result, Status.SUCCESS);
return result;
@@ -152,6 +154,7 @@ public class AccessTokenServiceImpl extends BaseServiceImpl
implements AccessTok
if (insert > 0) {
result.setData(accessToken);
putMsg(result, Status.SUCCESS);
+
resourcePermissionCheckService.postHandle(AuthorizationType.ACCESS_TOKEN,
loginUser.getId(), new ArrayList<>(accessToken.getId()), logger);
} else {
putMsg(result, Status.CREATE_ACCESS_TOKEN_ERROR);
}
@@ -170,10 +173,6 @@ public class AccessTokenServiceImpl extends
BaseServiceImpl implements AccessTok
@Override
public Map<String, Object> generateToken(User loginUser, int userId,
String expireTime) {
Map<String, Object> result = new HashMap<>();
- if (!(canOperatorPermissions(loginUser,null,
AuthorizationType.ACCESS_TOKEN, ACCESS_TOKEN_CREATE) || loginUser.getId() ==
userId)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
- }
String token = EncryptionUtils.getMd5(userId + expireTime +
System.currentTimeMillis());
result.put(Constants.DATA_LIST, token);
putMsg(result, Status.SUCCESS);
@@ -190,6 +189,10 @@ public class AccessTokenServiceImpl extends
BaseServiceImpl implements AccessTok
@Override
public Map<String, Object> delAccessTokenById(User loginUser, int id) {
Map<String, Object> result = new HashMap<>();
+ if (!canOperatorPermissions(loginUser,new
Object[]{id},AuthorizationType.ACCESS_TOKEN,ACCESS_TOKEN_DELETE)) {
+ putMsg(result, Status.USER_NO_OPERATION_PERM);
+ return result;
+ }
AccessToken accessToken = accessTokenMapper.selectById(id);
@@ -198,10 +201,6 @@ public class AccessTokenServiceImpl extends
BaseServiceImpl implements AccessTok
putMsg(result, Status.ACCESS_TOKEN_NOT_EXIST);
return result;
}
- if (!canOperatorPermissions(loginUser,new
Object[]{id},AuthorizationType.ACCESS_TOKEN,ACCESS_TOKEN_DELETE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
- }
accessTokenMapper.deleteById(id);
putMsg(result, Status.SUCCESS);
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
index 46fc31b487..41d68accb8 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
@@ -17,12 +17,15 @@
package org.apache.dolphinscheduler.api.service;
-import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.ACCESS_TOKEN_DELETE;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.ACCESS_TOKEN_UPDATE;
+
+import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import org.apache.dolphinscheduler.api.enums.Status;
+import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.apache.dolphinscheduler.api.service.impl.AccessTokenServiceImpl;
import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl;
import org.apache.dolphinscheduler.api.utils.PageInfo;
@@ -38,10 +41,11 @@ import
org.apache.dolphinscheduler.dao.mapper.AccessTokenMapper;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
-import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.assertj.core.util.Lists;
import org.junit.Assert;
import org.junit.Test;
@@ -50,6 +54,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
+import org.powermock.api.mockito.PowerMockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,6 +68,7 @@ import
com.baomidou.mybatisplus.extension.plugins.pagination.Page;
public class AccessTokenServiceTest {
private static final Logger baseServiceLogger =
LoggerFactory.getLogger(BaseServiceImpl.class);
private static final Logger logger =
LoggerFactory.getLogger(AccessTokenServiceTest.class);
+ private static final Logger serviceLogger =
LoggerFactory.getLogger(AccessTokenServiceImpl.class);
@InjectMocks
private AccessTokenServiceImpl accessTokenService;
@@ -82,31 +88,34 @@ public class AccessTokenServiceTest {
User user = new User();
user.setId(1);
user.setUserType(UserType.ADMIN_USER);
- when(accessTokenMapper.selectAccessTokenPage(any(Page.class),
eq("zhangsan"), eq(0))).thenReturn(tokenPage);
-
+ Set<Integer> tokenIds = new HashSet<>();
+ tokenIds.add(1);
+
when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ACCESS_TOKEN,
user.getId(), serviceLogger)).thenReturn(new HashSet());
Result result = accessTokenService.queryAccessTokenList(user,
"zhangsan", 1, 10);
PageInfo<AccessToken> pageInfo = (PageInfo<AccessToken>)
result.getData();
+ assertEquals(0, (int) pageInfo.getTotal());
+
+
PowerMockito.when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ACCESS_TOKEN,
user.getId(), serviceLogger)).thenReturn(tokenIds);
+
Mockito.when(accessTokenMapper.selectAccessTokenPage(Mockito.any(Page.class),
Mockito.anyList(),Mockito.eq("zhangsan"))).thenReturn(tokenPage);
+
+ result = accessTokenService.queryAccessTokenList(user, "zhangsan", 1,
10);
+ pageInfo = (PageInfo<AccessToken>) result.getData();
logger.info(result.toString());
Assert.assertTrue(pageInfo.getTotal() > 0);
}
@Test
public void testQueryAccessTokenByUser() {
- List<AccessToken> accessTokenList =
Lists.newArrayList(this.getEntity());
-
Mockito.when(this.accessTokenMapper.queryAccessTokenByUser(Mockito.anyInt())).thenReturn(accessTokenList);
-
- // USER_NO_OPERATION_PERM
User user = this.getLoginUser();
- user.setUserType(UserType.GENERAL_USER);
- Map<String, Object> result =
this.accessTokenService.queryAccessTokenByUser(user, 3);
- logger.info(result.toString());
- Assert.assertEquals(Status.USER_NO_OPERATION_PERM,
result.get(Constants.STATUS));
-
- // SUCCESS
user.setUserType(UserType.ADMIN_USER);
- result = this.accessTokenService.queryAccessTokenByUser(user, 1);
+ List<AccessToken> accessTokenList =
Lists.newArrayList(this.getEntity());
+
+ Set<Integer> tokenIds = new HashSet<>();
+ tokenIds.add(1);
+
Mockito.when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ACCESS_TOKEN,
user.getId(), serviceLogger)).thenReturn(tokenIds);
+ Map<String, Object> result =
this.accessTokenService.queryAccessTokenByUser(user, 1);
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
}
@Test
@@ -115,12 +124,12 @@ public class AccessTokenServiceTest {
when(accessTokenMapper.insert(any(AccessToken.class))).thenReturn(2);
Result result = accessTokenService.createToken(getLoginUser(), 1,
getDate(), "AccessTokenServiceTest");
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS.getCode(),
result.getCode().intValue());
+ assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
// Token is absent
result = this.accessTokenService.createToken(getLoginUser(), 1,
getDate(), null);
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS.getCode(),
result.getCode().intValue());
+ assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
}
@Test
@@ -128,11 +137,9 @@ public class AccessTokenServiceTest {
User user = new User();
user.setId(1);
user.setUserType(UserType.ADMIN_USER);
-
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.ACCESS_TOKEN,
1, ACCESS_TOKEN_CREATE, baseServiceLogger)).thenReturn(true);
-
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.ACCESS_TOKEN,
null, 0, baseServiceLogger)).thenReturn(true);
Map<String, Object> result =
accessTokenService.generateToken(getLoginUser(), Integer.MAX_VALUE,getDate());
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
String token = (String) result.get(Constants.DATA_LIST);
Assert.assertNotNull(token);
}
@@ -145,21 +152,22 @@ public class AccessTokenServiceTest {
userLogin.setId(1);
userLogin.setUserType(UserType.ADMIN_USER);
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.ACCESS_TOKEN,
1, ACCESS_TOKEN_DELETE, baseServiceLogger)).thenReturn(true);
+
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.ACCESS_TOKEN,
new Object[]{0}, 0, baseServiceLogger)).thenReturn(true);
// not exist
Map<String, Object> result =
accessTokenService.delAccessTokenById(userLogin, 0);
logger.info(result.toString());
- Assert.assertEquals(Status.ACCESS_TOKEN_NOT_EXIST,
result.get(Constants.STATUS));
+ assertEquals(Status.ACCESS_TOKEN_NOT_EXIST,
result.get(Constants.STATUS));
// no operate
result = accessTokenService.delAccessTokenById(userLogin, 1);
logger.info(result.toString());
- Assert.assertEquals(Status.USER_NO_OPERATION_PERM,
result.get(Constants.STATUS));
+ assertEquals(Status.USER_NO_OPERATION_PERM,
result.get(Constants.STATUS));
//success
userLogin.setId(1);
userLogin.setUserType(UserType.ADMIN_USER);
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.ACCESS_TOKEN,
new Object[]{1}, 0, baseServiceLogger)).thenReturn(true);
result = accessTokenService.delAccessTokenById(userLogin, 1);
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
}
@Test
@@ -173,20 +181,20 @@ public class AccessTokenServiceTest {
when(accessTokenMapper.selectById(1)).thenReturn(getEntity());
Map<String, Object> result =
accessTokenService.updateToken(getLoginUser(),
1,Integer.MAX_VALUE,getDate(),"token");
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
Assert.assertNotNull(result.get(Constants.DATA_LIST));
// Token is absent
result = accessTokenService.updateToken(getLoginUser(), 1,
Integer.MAX_VALUE,getDate(),null);
logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
Assert.assertNotNull(result.get(Constants.DATA_LIST));
// ACCESS_TOKEN_NOT_EXIST
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.ACCESS_TOKEN,
new Object[]{2}, 0, baseServiceLogger)).thenReturn(true);
result = accessTokenService.updateToken(getLoginUser(),
2,Integer.MAX_VALUE,getDate(),"token");
logger.info(result.toString());
- Assert.assertEquals(Status.ACCESS_TOKEN_NOT_EXIST,
result.get(Constants.STATUS));
+ assertEquals(Status.ACCESS_TOKEN_NOT_EXIST,
result.get(Constants.STATUS));
}
private User getLoginUser() {
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.java
index 55a6795f02..926a1f5a44 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.java
@@ -37,13 +37,13 @@ public interface AccessTokenMapper extends
BaseMapper<AccessToken> {
* access token page
*
* @param page page
+ * @param tokenIds tokenIds
* @param userName userName
- * @param userId userId
* @return access token Ipage
*/
IPage<AccessToken> selectAccessTokenPage(Page page,
- @Param("userName") String
userName,
- @Param("userId") int userId
+ @Param("ids") List<Integer>
tokenIds,
+ @Param("userName") String userName
);
/**
diff --git
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.xml
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.xml
index 969572b1de..b6baff29db 100644
---
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.xml
+++
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapper.xml
@@ -26,8 +26,11 @@
<if test="userName != null and userName != ''">
and u.user_name like concat ('%', #{userName}, '%')
</if>
- <if test="userId != 0">
- and t.user_id = #{userId}
+ <if test="ids != null and ids.size() > 0">
+ and t.id in
+ <foreach item="id" index="index" collection="ids" open="("
separator="," close=")">
+ #{id}
+ </foreach>
</if>
order by t.update_time desc
</select>
diff --git
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapperTest.java
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapperTest.java
index aa1c42e144..38d34d1815 100644
---
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapperTest.java
+++
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AccessTokenMapperTest.java
@@ -31,8 +31,10 @@ import org.apache.dolphinscheduler.dao.entity.AccessToken;
import org.apache.dolphinscheduler.dao.entity.User;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
+import java.util.stream.Collectors;
import org.junit.Assert;
import org.junit.Test;
@@ -139,7 +141,8 @@ public class AccessTokenMapperTest extends BaseDaoTest {
Map<Integer, AccessToken> accessTokenMap = createAccessTokens(count,
userName);
Page page = new Page(offset, size);
- IPage<AccessToken> accessTokenPage =
accessTokenMapper.selectAccessTokenPage(page, userName, 0);
+ List<Integer> tokenIds =
accessTokenMap.values().stream().map(AccessToken::getId).collect(Collectors.toList());
+ IPage<AccessToken> accessTokenPage =
accessTokenMapper.selectAccessTokenPage(page, tokenIds, userName);
assertEquals(Integer.valueOf(accessTokenPage.getRecords().size()),
size);
diff --git
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java
index 3e948e9d4e..3de9299d22 100644
---
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java
+++
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java
@@ -1523,6 +1523,7 @@ public class WorkflowExecuteRunnable implements
Callable<WorkflowSubmitStatue> {
if (state == ExecutionStatus.READY_BLOCK) {
ExecutionStatus executionStatus = processReadyBlock();
logger.info("The workflowInstance is ready to block, the
workflowInstance status is {}", executionStatus);
+ return executionStatus;
}
// waiting thread
@@ -1551,6 +1552,7 @@ public class WorkflowExecuteRunnable implements
Callable<WorkflowSubmitStatue> {
executionStatus = ExecutionStatus.SUCCESS;
}
logger.info("The workflowInstance is ready to stop, the workflow
status is {}", executionStatus);
+ return executionStatus;
}
// process failure