This is an automated email from the ASF dual-hosted git repository.
leonbao 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 544b015 [Bug] [API] task definition release/delete bug (#7232)
544b015 is described below
commit 544b015f766a208cba1bd63f8d2bda762677b2b4
Author: JinYong Li <[email protected]>
AuthorDate: Tue Dec 7 15:26:28 2021 +0800
[Bug] [API] task definition release/delete bug (#7232)
* fix worker group display
* fix workflow query bug
* fix workflow query bug
* fix task definition release/delete bug
---
.../service/impl/TaskDefinitionServiceImpl.java | 31 +++++++++++++++++++---
.../api/service/TaskDefinitionServiceImplTest.java | 7 +++++
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
index 23ac004..1745513 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
@@ -210,6 +210,19 @@ public class TaskDefinitionServiceImpl extends
BaseServiceImpl implements TaskDe
}
int delete = taskDefinitionMapper.deleteByCode(taskCode);
if (delete > 0) {
+ List<ProcessTaskRelation> taskRelationList =
processTaskRelationMapper.queryUpstreamByCode(projectCode, taskCode);
+ if (!processTaskRelationList.isEmpty()) {
+ int deleteRelation = 0;
+ int deleteRelationLog = 0;
+ for (ProcessTaskRelation processTaskRelation :
taskRelationList) {
+ ProcessTaskRelationLog processTaskRelationLog = new
ProcessTaskRelationLog(processTaskRelation);
+ deleteRelation +=
processTaskRelationMapper.deleteRelation(processTaskRelationLog);
+ deleteRelationLog +=
processTaskRelationLogMapper.deleteRelation(processTaskRelationLog);
+ }
+ if ((deleteRelation & deleteRelationLog) == 0) {
+ throw new
ServiceException(Status.DELETE_TASK_PROCESS_RELATION_ERROR);
+ }
+ }
putMsg(result, Status.SUCCESS);
} else {
putMsg(result, Status.DELETE_TASK_DEFINE_BY_CODE_ERROR);
@@ -496,6 +509,7 @@ public class TaskDefinitionServiceImpl extends
BaseServiceImpl implements TaskDe
* @param releaseState releaseState
* @return update result code
*/
+ @Transactional(rollbackFor = RuntimeException.class)
@Override
public Map<String, Object> releaseTaskDefinition(User loginUser, long
projectCode, long code, ReleaseState releaseState) {
Project project = projectMapper.queryByCode(projectCode);
@@ -514,11 +528,15 @@ public class TaskDefinitionServiceImpl extends
BaseServiceImpl implements TaskDe
putMsg(result, Status.TASK_DEFINE_NOT_EXIST, code);
return result;
}
-
+ TaskDefinitionLog taskDefinitionLog =
taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(code,
taskDefinition.getVersion());
+ if (taskDefinitionLog == null) {
+ putMsg(result, Status.TASK_DEFINE_NOT_EXIST, code);
+ return result;
+ }
switch (releaseState) {
case OFFLINE:
taskDefinition.setFlag(Flag.NO);
- taskDefinitionMapper.updateById(taskDefinition);
+ taskDefinitionLog.setFlag(Flag.NO);
break;
case ONLINE:
String resourceIds = taskDefinition.getResourceIds();
@@ -534,13 +552,18 @@ public class TaskDefinitionServiceImpl extends
BaseServiceImpl implements TaskDe
}
}
taskDefinition.setFlag(Flag.YES);
- taskDefinitionMapper.updateById(taskDefinition);
+ taskDefinitionLog.setFlag(Flag.NO);
break;
default:
putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
RELEASESTATE);
return result;
}
-
+ int update = taskDefinitionMapper.updateById(taskDefinition);
+ int updateLog = taskDefinitionLogMapper.updateById(taskDefinitionLog);
+ if ((update == 0 && updateLog == 1) || (update == 1 && updateLog ==
0)) {
+ putMsg(result, Status.UPDATE_TASK_DEFINITION_ERROR);
+ throw new ServiceException(Status.UPDATE_TASK_DEFINITION_ERROR);
+ }
putMsg(result, Status.SUCCESS);
return result;
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
index 315f11c..d8852b4 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
@@ -309,7 +309,14 @@ public class TaskDefinitionServiceImplTest {
putMsg(result, Status.SUCCESS);
TaskDefinition taskDefinition = new TaskDefinition();
taskDefinition.setProjectCode(projectCode);
+ taskDefinition.setVersion(1);
+ taskDefinition.setCode(taskCode);
+ String params =
"{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo
1\",\"conditionResult\":{\"successNode\":[\"\"],\"failedNode\":[\"\"]},\"dependence\":{}}";
+ taskDefinition.setTaskParams(params);
+ taskDefinition.setTaskType(TaskType.SHELL.getDesc());
Mockito.when(taskDefinitionMapper.queryByCode(taskCode)).thenReturn(taskDefinition);
+ TaskDefinitionLog taskDefinitionLog = new
TaskDefinitionLog(taskDefinition);
+
Mockito.when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskCode,
taskDefinition.getVersion())).thenReturn(taskDefinitionLog);
Map<String, Object> offlineTaskResult =
taskDefinitionService.releaseTaskDefinition(loginUser, projectCode, taskCode,
ReleaseState.OFFLINE);
Assert.assertEquals(Status.SUCCESS,
offlineTaskResult.get(Constants.STATUS));