This is an automated email from the ASF dual-hosted git repository.
wanggenhua 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 7027d3d768 [improve-#13053] in method of ``` execProcessInstance```
check ```startNodeList``` (#13057)
7027d3d768 is described below
commit 7027d3d7686d90b8af370c9d3cb5c73848014f81
Author: fuchanghai <[email protected]>
AuthorDate: Sat Jan 7 20:49:59 2023 +0800
[improve-#13053] in method of ``` execProcessInstance``` check
```startNodeList``` (#13057)
* [improve-#13053] in method of ``` execProcessInstance``` check
```startNodeList```
* [improve-#13053] format
* [improve-#13053] fix UT
* Update Status.java
update description
* [improve-#13053] add parameter ```version ```
* [improve-#13053] format
* [improve-#13053] version is not necessary
* [improve-#13053] format
* Update use-form.ts
change ```version``` default vaule to ``` null```
* [improve-#13053] format
* Update
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
Co-authored-by: caishunfeng <[email protected]>
* Update ExecutorServiceImpl.java
Co-authored-by: fuchanghai <‘[email protected]’>
Co-authored-by: caishunfeng <[email protected]>
---
.../api/controller/ExecutorController.java | 7 +--
.../apache/dolphinscheduler/api/enums/Status.java | 3 ++
.../dolphinscheduler/api/python/PythonGateway.java | 3 +-
.../api/service/ExecutorService.java | 2 +-
.../api/service/impl/ExecutorServiceImpl.java | 26 ++++++++--
.../api/controller/ExecutorControllerTest.java | 9 ++--
.../api/service/ExecutorServiceTest.java | 59 ++++++++++++++++++----
.../src/service/modules/executors/types.ts | 1 +
.../workflow/definition/components/start-modal.tsx | 2 +-
.../workflow/definition/components/use-form.ts | 3 +-
.../workflow/definition/components/use-modal.ts | 3 +-
11 files changed, 91 insertions(+), 27 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
index 597b0d50ba..4b61e2260c 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ExecutorController.java
@@ -147,7 +147,8 @@ public class ExecutorController extends BaseController {
@RequestParam(value =
"expectedParallelismNumber", required = false) Integer
expectedParallelismNumber,
@RequestParam(value = "dryRun",
defaultValue = "0", required = false) int dryRun,
@RequestParam(value = "testFlag",
defaultValue = "0") int testFlag,
- @RequestParam(value =
"complementDependentMode", required = false) ComplementDependentMode
complementDependentMode) {
+ @RequestParam(value =
"complementDependentMode", required = false) ComplementDependentMode
complementDependentMode,
+ @RequestParam(value = "version",
required = false) Integer version) {
if (timeout == null) {
timeout = Constants.MAX_TASK_TIMEOUT;
@@ -165,7 +166,7 @@ public class ExecutorController extends BaseController {
scheduleTime, execType, failureStrategy,
startNodeList, taskDependType, warningType, warningGroupId,
runMode, processInstancePriority,
workerGroup, environmentCode, timeout, startParamMap,
expectedParallelismNumber, dryRun, testFlag,
- complementDependentMode);
+ complementDependentMode, version);
return returnDataList(result);
}
@@ -264,7 +265,7 @@ public class ExecutorController extends BaseController {
execType, failureStrategy,
startNodeList, taskDependType, warningType,
warningGroupId, runMode, processInstancePriority,
workerGroup, environmentCode, timeout, startParamMap,
expectedParallelismNumber, dryRun, testFlag,
- complementDependentMode);
+ complementDependentMode, null);
if (!Status.SUCCESS.equals(result.get(Constants.STATUS))) {
logger.error("Process definition start failed, projectCode:{},
processDefinitionCode:{}.", projectCode,
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index cb1941b2a0..d60a867d77 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -263,6 +263,9 @@ public enum Status {
QUERY_TASK_INSTANCE_ERROR(10205, "query task instance error", "查询任务实例错误"),
EXECUTE_NOT_DEFINE_TASK(10206, "please save and try again",
"请先保存后再执行"),
+ START_NODE_NOT_EXIST_IN_LAST_PROCESS(10207, "this node {0} does not exist
in the latest process definition",
+ "该节点 {0} 不存在于最新的流程定义中"),
+
UDF_FUNCTION_NOT_EXIST(20001, "UDF function not found", "UDF函数不存在"),
UDF_FUNCTION_EXISTS(20002, "UDF function already exists", "UDF函数已存在"),
RESOURCE_NOT_EXIST(20004, "resource not exist", "资源不存在"),
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
index c1d5f56c78..4e98bc3251 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
@@ -389,7 +389,8 @@ public class PythonGateway {
null,
DEFAULT_DRY_RUN,
DEFAULT_TEST_FLAG,
- COMPLEMENT_DEPENDENT_MODE);
+ COMPLEMENT_DEPENDENT_MODE,
+ processDefinition.getVersion());
}
// side object
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
index 61f1b51623..3f312ebb7b 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
@@ -69,7 +69,7 @@ public interface ExecutorService {
Integer timeout,
Map<String, String> startParams,
Integer expectedParallelismNumber,
int dryRun, int testFlag,
- ComplementDependentMode
complementDependentMode);
+ ComplementDependentMode
complementDependentMode, Integer version);
/**
* check whether the process definition can be executed
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
index 6f9a99e11d..d254b31481 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
@@ -195,7 +195,7 @@ public class ExecutorServiceImpl extends BaseServiceImpl
implements ExecutorServ
Long environmentCode,
Integer timeout,
Map<String, String>
startParams, Integer expectedParallelismNumber,
int dryRun, int testFlag,
- ComplementDependentMode
complementDependentMode) {
+ ComplementDependentMode
complementDependentMode, Integer version) {
Project project = projectMapper.queryByCode(projectCode);
// check user access for project
Map<String, Object> result =
@@ -209,12 +209,17 @@ public class ExecutorServiceImpl extends BaseServiceImpl
implements ExecutorServ
putMsg(result, Status.TASK_TIMEOUT_PARAMS_ERROR);
return result;
}
-
+ ProcessDefinition processDefinition;
+ if (null != version) {
+ processDefinition =
processService.findProcessDefinition(processDefinitionCode, version);
+ } else {
+ processDefinition =
processDefinitionMapper.queryByCode(processDefinitionCode);
+ }
// check process define release state
- ProcessDefinition processDefinition =
processDefinitionMapper.queryByCode(processDefinitionCode);
this.checkProcessDefinitionValid(projectCode, processDefinition,
processDefinitionCode,
processDefinition.getVersion());
-
+ // check current version whether include startNodeList
+ checkStartNodeList(startNodeList, processDefinitionCode,
processDefinition.getVersion());
if (!checkTenantSuitable(processDefinition)) {
logger.error(
"There is not any valid tenant for the process definition,
processDefinitionCode:{}, processDefinitionName:{}.",
@@ -634,6 +639,19 @@ public class ExecutorServiceImpl extends BaseServiceImpl
implements ExecutorServ
return tenant != null;
}
+ public void checkStartNodeList(String startNodeList, Long
processDefinitionCode, int version) {
+ if (StringUtils.isNotEmpty(startNodeList)) {
+ List<ProcessTaskRelation> processTaskRelations =
+ processService.findRelationByCode(processDefinitionCode,
version);
+ List<Long> existsNodes =
processTaskRelations.stream().map(ProcessTaskRelation::getPostTaskCode)
+ .collect(Collectors.toList());
+ for (String startNode : startNodeList.split(Constants.COMMA)) {
+ if (!existsNodes.contains(Long.valueOf(startNode))) {
+ throw new
ServiceException(Status.START_NODE_NOT_EXIST_IN_LAST_PROCESS, startNode);
+ }
+ }
+ }
+ }
/**
* Check the state of process instance and the type of operation match
*
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ExecutorControllerTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ExecutorControllerTest.java
index b65621b96a..68ec7a5c0d 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ExecutorControllerTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ExecutorControllerTest.java
@@ -77,6 +77,7 @@ public class ExecutorControllerTest extends
AbstractControllerTest {
final int dryRun = 7;
final int testFlag = 0;
final ComplementDependentMode complementDependentMode =
ComplementDependentMode.OFF_MODE;
+ final Integer version = null;
final JsonObject expectResponseContent = gson
.fromJson("{\"code\":0,\"msg\":\"success\",\"data\":\"Test
Data\",\"success\":true,\"failed\":false}",
@@ -115,7 +116,7 @@ public class ExecutorControllerTest extends
AbstractControllerTest {
eq(warningType),
eq(warningGroupId), eq(runMode), eq(processInstancePriority),
eq(workerGroup), eq(environmentCode),
eq(timeout), eq(startParams), eq(expectedParallelismNumber),
eq(dryRun), eq(testFlag),
- eq(complementDependentMode)))
+ eq(complementDependentMode), eq(version)))
.thenReturn(executeServiceResult);
// When
@@ -159,7 +160,7 @@ public class ExecutorControllerTest extends
AbstractControllerTest {
eq(warningGroupId), eq(runMode), eq(processInstancePriority),
eq(workerGroup), eq(environmentCode),
eq(Constants.MAX_TASK_TIMEOUT), eq(startParams),
eq(expectedParallelismNumber), eq(dryRun),
eq(testFlag),
- eq(complementDependentMode))).thenReturn(executeServiceResult);
+ eq(complementDependentMode),
eq(version))).thenReturn(executeServiceResult);
// When
final MvcResult mvcResult = mockMvc
@@ -201,7 +202,7 @@ public class ExecutorControllerTest extends
AbstractControllerTest {
eq(warningType),
eq(warningGroupId), eq(runMode), eq(processInstancePriority),
eq(workerGroup), eq(environmentCode),
eq(timeout), eq(null), eq(expectedParallelismNumber),
eq(dryRun), eq(testFlag),
- eq(complementDependentMode))).thenReturn(executeServiceResult);
+ eq(complementDependentMode),
eq(version))).thenReturn(executeServiceResult);
// When
final MvcResult mvcResult = mockMvc
@@ -230,7 +231,7 @@ public class ExecutorControllerTest extends
AbstractControllerTest {
eq(scheduleTime), eq(null), eq(failureStrategy), eq(null),
eq(null), eq(warningType),
eq(null), eq(null), eq(null), eq("default"), eq(-1L),
eq(Constants.MAX_TASK_TIMEOUT), eq(null), eq(null), eq(0),
eq(0),
- eq(complementDependentMode))).thenReturn(executeServiceResult);
+ eq(complementDependentMode),
eq(version))).thenReturn(executeServiceResult);
// When
final MvcResult mvcResult = mockMvc
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecutorServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecutorServiceTest.java
index 975ec1238e..3f6ad0e0ca 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecutorServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ExecutorServiceTest.java
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
import
org.apache.dolphinscheduler.api.dto.workflowInstance.WorkflowExecuteResponse;
import org.apache.dolphinscheduler.api.enums.ExecuteType;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl;
import org.apache.dolphinscheduler.api.service.impl.ExecutorServiceImpl;
@@ -50,6 +51,7 @@ import org.apache.dolphinscheduler.dao.entity.Command;
import org.apache.dolphinscheduler.dao.entity.DependentProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelation;
import org.apache.dolphinscheduler.dao.entity.Project;
import org.apache.dolphinscheduler.dao.entity.Schedule;
import org.apache.dolphinscheduler.dao.entity.TaskGroupQueue;
@@ -143,6 +145,8 @@ public class ExecutorServiceTest {
private int processDefinitionId = 1;
+ private int processDefinitionVersion = 1;
+
private long processDefinitionCode = 1L;
private int processInstanceId = 1;
@@ -159,6 +163,8 @@ public class ExecutorServiceTest {
private TaskGroupQueue taskGroupQueue = new TaskGroupQueue();
+ private List<ProcessTaskRelation> processTaskRelations = new ArrayList<>();
+
private User loginUser = new User();
private long projectCode = 1L;
@@ -203,20 +209,30 @@ public class ExecutorServiceTest {
// cronRangeTime
cronTime = "2020-01-01 00:00:00,2020-01-31 23:00:00";
+ // processTaskRelations
+ ProcessTaskRelation processTaskRelation1 = new ProcessTaskRelation();
+ processTaskRelation1.setPostTaskCode(123456789L);
+ ProcessTaskRelation processTaskRelation2 = new ProcessTaskRelation();
+ processTaskRelation2.setPostTaskCode(987654321L);
+ processTaskRelations.add(processTaskRelation1);
+ processTaskRelations.add(processTaskRelation2);
+
// mock
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(project);
Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectCode, WORKFLOW_START))
.thenReturn(checkProjectAndAuth());
-
Mockito.when(processDefinitionMapper.queryByCode(processDefinitionCode)).thenReturn(processDefinition);
+
Mockito.when(processDefinitionMapper.queryByCode(processDefinitionCode)).thenReturn(this.processDefinition);
Mockito.when(processService.getTenantForProcess(tenantId,
userId)).thenReturn(new Tenant());
doReturn(1).when(commandService).createCommand(argThat(c -> c.getId()
== null));
doReturn(0).when(commandService).createCommand(argThat(c -> c.getId()
!= null));
Mockito.when(monitorService.getServerListFromRegistry(true)).thenReturn(getMasterServersList());
Mockito.when(processService.findProcessInstanceDetailById(processInstanceId))
.thenReturn(Optional.ofNullable(processInstance));
- Mockito.when(processService.findProcessDefinition(1L,
1)).thenReturn(processDefinition);
+ Mockito.when(processService.findProcessDefinition(1L,
1)).thenReturn(this.processDefinition);
Mockito.when(taskGroupQueueMapper.selectById(1)).thenReturn(taskGroupQueue);
Mockito.when(processInstanceMapper.selectById(1)).thenReturn(processInstance);
+ Mockito.when(processService.findRelationByCode(processDefinitionCode,
processDefinitionVersion))
+ .thenReturn(processTaskRelations);
}
@Test
@@ -243,7 +259,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_SERIAL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 10, null,
0, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
verify(commandService, times(1)).createCommand(any(Command.class));
@@ -261,17 +277,38 @@ public class ExecutorServiceTest {
processDefinitionCode,
"{\"complementStartDate\":\"2020-01-01
00:00:00\",\"complementEndDate\":\"2020-01-31 23:00:00\"}",
CommandType.START_PROCESS,
- null, "n1,n2",
+ null, "123456789,987654321",
null, null, null,
RunMode.RUN_MODE_SERIAL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
0, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
verify(commandService, times(1)).createCommand(any(Command.class));
}
+ @Test
+ public void testComplementWithOldStartNodeList() {
+
Mockito.when(processService.queryReleaseSchedulerListByProcessDefinitionCode(processDefinitionCode))
+ .thenReturn(zeroSchedulerList());
+ Map<String, Object> result = new HashMap<>();
+ try {
+ result = executorService.execProcessInstance(loginUser,
projectCode,
+ processDefinitionCode,
+ "{\"complementStartDate\":\"2020-01-01
00:00:00\",\"complementEndDate\":\"2020-01-31 23:00:00\"}",
+ CommandType.START_PROCESS,
+ null, "1123456789,987654321",
+ null, null, null,
+ RunMode.RUN_MODE_SERIAL,
+ Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110,
null, 0, Constants.DRY_RUN_FLAG_NO,
+ Constants.TEST_FLAG_NO,
+ ComplementDependentMode.OFF_MODE, null);
+ } catch (ServiceException e) {
+
Assertions.assertEquals(Status.START_NODE_NOT_EXIST_IN_LAST_PROCESS.getCode(),
e.getCode());
+ }
+ }
+
@Test
public void testComplementWithDependentMode() {
Schedule schedule = new Schedule();
@@ -333,7 +370,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_SERIAL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
0, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.START_PROCESS_INSTANCE_ERROR,
result.get(Constants.STATUS));
verify(commandService, times(0)).createCommand(any(Command.class));
}
@@ -355,7 +392,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_SERIAL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
0, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
verify(commandService, times(1)).createCommand(any(Command.class));
}
@@ -377,7 +414,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_PARALLEL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
0, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
verify(commandService, times(31)).createCommand(any(Command.class));
@@ -400,7 +437,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_PARALLEL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
15, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
verify(commandService, times(15)).createCommand(any(Command.class));
@@ -419,7 +456,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_PARALLEL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
0, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_NO,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(result.get(Constants.STATUS),
Status.MASTER_NOT_EXISTS);
}
@@ -448,7 +485,7 @@ public class ExecutorServiceTest {
RunMode.RUN_MODE_PARALLEL,
Priority.LOW, Constants.DEFAULT_WORKER_GROUP, 100L, 110, null,
15, Constants.DRY_RUN_FLAG_NO,
Constants.TEST_FLAG_YES,
- ComplementDependentMode.OFF_MODE);
+ ComplementDependentMode.OFF_MODE, null);
Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
}
diff --git a/dolphinscheduler-ui/src/service/modules/executors/types.ts
b/dolphinscheduler-ui/src/service/modules/executors/types.ts
index 70ecd97870..b864441022 100644
--- a/dolphinscheduler-ui/src/service/modules/executors/types.ts
+++ b/dolphinscheduler-ui/src/service/modules/executors/types.ts
@@ -71,6 +71,7 @@ interface ProcessInstanceReq extends ProcessDefinitionCodeReq
{
taskDependType?: 'TASK_ONLY' | 'TASK_PRE' | 'TASK_POST'
timeout?: number
workerGroup?: string
+ version?: number
}
export {
diff --git
a/dolphinscheduler-ui/src/views/projects/workflow/definition/components/start-modal.tsx
b/dolphinscheduler-ui/src/views/projects/workflow/definition/components/start-modal.tsx
index 6de60e00c8..a3e057def2 100644
---
a/dolphinscheduler-ui/src/views/projects/workflow/definition/components/start-modal.tsx
+++
b/dolphinscheduler-ui/src/views/projects/workflow/definition/components/start-modal.tsx
@@ -92,7 +92,7 @@ export default defineComponent({
}
const handleStart = () => {
- handleStartDefinition(props.row.code)
+ handleStartDefinition(props.row.code,props.row.version)
}
const generalWarningTypeListOptions = () => [
diff --git
a/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-form.ts
b/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-form.ts
index 0e4521c24e..2b353a8626 100644
---
a/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-form.ts
+++
b/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-form.ts
@@ -67,7 +67,8 @@ export const useForm = () => {
startParams: null,
expectedParallelismNumber: '',
dryRun: 0,
- testFlag: 0
+ testFlag: 0,
+ version: null
},
saving: false,
rules: {
diff --git
a/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-modal.ts
b/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-modal.ts
index 9767f51534..d5d1b19c5a 100644
---
a/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-modal.ts
+++
b/dolphinscheduler-ui/src/views/projects/workflow/definition/components/use-modal.ts
@@ -85,13 +85,14 @@ export function useModal(
}
}
- const handleStartDefinition = async (code: number) => {
+ const handleStartDefinition = async (code: number,version: number) => {
await state.startFormRef.validate()
if (state.saving) return
state.saving = true
try {
state.startForm.processDefinitionCode = code
+ state.startForm.version = version
const params = omit(state.startForm, [
'startEndTime',
'scheduleTime',