Skip to content

Commit 76dedea

Browse files
committed
[Fix-18132][API] Sync workflow definition version back after create/update
The version field in the WorkflowDefinition object returned by create and update API was always 0, since the insertVersion returned by processService.saveWorkflowDefine() was never synced back to the object.
1 parent ff52988 commit 76dedea

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ protected Map<String, Object> createDagDefine(User loginUser,
330330
log.info("Save workflow definition complete, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
331331
workflowDefinition.getCode(), insertVersion);
332332
}
333+
workflowDefinition.setVersion(insertVersion);
333334
int insertResult = processService.saveTaskRelation(loginUser, workflowDefinition.getProjectCode(),
334335
workflowDefinition.getCode(),
335336
insertVersion, taskRelationList, taskDefinitionLogs, Boolean.TRUE);
@@ -822,6 +823,7 @@ protected Map<String, Object> updateDagDefine(User loginUser,
822823
"Update workflow definition complete, workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
823824
workflowDefinition.getCode(), insertVersion);
824825
}
826+
workflowDefinition.setVersion(insertVersion);
825827

826828
taskUsedInOtherTaskValid(workflowDefinition, taskRelationList);
827829
int insertResult = processService.saveTaskRelation(loginUser, workflowDefinition.getProjectCode(),

dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionServiceTest.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.ArgumentMatchers.anyList;
30+
import static org.mockito.ArgumentMatchers.anyLong;
3031
import static org.mockito.ArgumentMatchers.eq;
3132
import static org.mockito.Mockito.doNothing;
3233
import static org.mockito.Mockito.doThrow;
@@ -78,6 +79,7 @@
7879
import org.apache.dolphinscheduler.plugin.task.api.model.SwitchResultVo;
7980
import org.apache.dolphinscheduler.plugin.task.api.parameters.ConditionsParameters;
8081
import org.apache.dolphinscheduler.plugin.task.api.parameters.SwitchParameters;
82+
import org.apache.dolphinscheduler.service.model.TaskNode;
8183
import org.apache.dolphinscheduler.service.process.ProcessService;
8284

8385
import org.apache.commons.lang3.StringUtils;
@@ -881,6 +883,55 @@ public void testUpdateWorkflowDefinition() {
881883
}
882884
}
883885

886+
@Test
887+
public void testCreateWorkflowDefinitionShouldSyncVersionToResponse() {
888+
Project project = getProject(projectCode);
889+
when(projectMapper.queryByCode(projectCode)).thenReturn(project);
890+
when(projectService.hasProjectAndWritePerm(eq(user), eq(project), any(Map.class))).thenReturn(true);
891+
when(workflowDefinitionMapper.verifyByDefineName(projectCode, name)).thenReturn(null);
892+
when(processService.transformTask(anyList(), anyList())).thenReturn(getTaskNodeList());
893+
when(processService.saveTaskDefine(eq(user), eq(projectCode), anyList(), eq(Boolean.TRUE))).thenReturn(1);
894+
when(processService.saveWorkflowDefine(any(User.class), any(WorkflowDefinition.class), eq(Boolean.TRUE),
895+
eq(Boolean.TRUE))).thenReturn(1);
896+
when(processService.saveTaskRelation(eq(user), eq(projectCode), anyLong(), eq(1), anyList(), anyList(),
897+
eq(Boolean.TRUE))).thenReturn(Constants.EXIT_CODE_SUCCESS);
898+
899+
Map<String, Object> result = workflowDefinitionService.createWorkflowDefinition(
900+
user, projectCode, name, description, "[]", "[]", timeout,
901+
taskRelationJson, taskDefinitionJson, null, WorkflowExecutionTypeEnum.PARALLEL);
902+
903+
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
904+
WorkflowDefinition workflowDefinition = (WorkflowDefinition) result.get(Constants.DATA_LIST);
905+
Assertions.assertEquals(1, workflowDefinition.getVersion());
906+
}
907+
908+
@Test
909+
public void testUpdateWorkflowDefinitionShouldSyncVersionToResponse() {
910+
Project project = getProject(projectCode);
911+
WorkflowDefinition workflowDefinition = getWorkflowDefinition();
912+
workflowDefinition.setName("origin-name");
913+
when(projectMapper.queryByCode(projectCode)).thenReturn(project);
914+
when(projectService.hasProjectAndWritePerm(eq(user), eq(project), any(Map.class))).thenReturn(true);
915+
when(processService.transformTask(anyList(), anyList())).thenReturn(getTaskNodeList());
916+
when(workflowDefinitionMapper.queryByCode(processDefinitionCode)).thenReturn(workflowDefinition);
917+
when(workflowDefinitionMapper.verifyByDefineName(projectCode, name)).thenReturn(null);
918+
when(processService.saveTaskDefine(eq(user), eq(projectCode), anyList(), eq(Boolean.TRUE))).thenReturn(1);
919+
when(processService.saveWorkflowDefine(any(User.class), any(WorkflowDefinition.class), eq(Boolean.TRUE),
920+
eq(Boolean.TRUE))).thenReturn(2);
921+
when(workflowTaskRelationMapper.queryByWorkflowDefinitionCode(processDefinitionCode))
922+
.thenReturn(Collections.emptyList());
923+
when(processService.saveTaskRelation(eq(user), eq(projectCode), eq(processDefinitionCode), eq(2), anyList(),
924+
anyList(), eq(Boolean.TRUE))).thenReturn(Constants.EXIT_CODE_SUCCESS);
925+
926+
Map<String, Object> result = workflowDefinitionService.updateWorkflowDefinition(
927+
user, projectCode, name, processDefinitionCode, description, "[]", "[]", timeout,
928+
taskRelationJson, taskDefinitionJson, WorkflowExecutionTypeEnum.PARALLEL);
929+
930+
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
931+
WorkflowDefinition resultDefinition = (WorkflowDefinition) result.get(Constants.DATA_LIST);
932+
Assertions.assertEquals(2, resultDefinition.getVersion());
933+
}
934+
884935
@Test
885936
public void testGetNewProcessName() {
886937
String processName1 = "test_copy_" + DateUtils.getCurrentTimeStamp();
@@ -976,6 +1027,18 @@ private WorkflowTaskRelation getWorkflowTaskRelation(int id, int workflowDefinit
9761027
return workflowTaskRelation;
9771028
}
9781029

1030+
private List<TaskNode> getTaskNodeList() {
1031+
TaskNode firstTaskNode = new TaskNode();
1032+
firstTaskNode.setCode(123456789L);
1033+
firstTaskNode.setPreTasks(JSONUtils.toJsonString(Collections.emptyList()));
1034+
1035+
TaskNode secondTaskNode = new TaskNode();
1036+
secondTaskNode.setCode(123451234L);
1037+
secondTaskNode.setPreTasks(JSONUtils.toJsonString(Collections.singletonList(123456789L)));
1038+
1039+
return Arrays.asList(firstTaskNode, secondTaskNode);
1040+
}
1041+
9791042
/**
9801043
* get mock schedule
9811044
*

0 commit comments

Comments
 (0)