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

zihaoxiang 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 c236066317 [Improvement-16767] Takeover sub-workflow in 
sub-workflow-task (#17153)
c236066317 is described below

commit c2360663177c574d6cf83c062bd22788a0cdc040
Author: lile <[email protected]>
AuthorDate: Wed May 7 17:12:24 2025 +0800

    [Improvement-16767] Takeover sub-workflow in sub-workflow-task (#17153)
---
 .../common/enums/WorkflowExecutionStatus.java      |   5 +
 .../dao/mapper/WorkflowInstanceMapper.java         |   9 +
 .../repository/impl/WorkflowInstanceDaoImpl.java   |   2 +-
 .../dao/mapper/WorkflowInstanceMapper.xml          |  16 ++
 .../plugin/subworkflow/SubWorkflowLogicTask.java   |  21 ++-
 .../server/master/integration/Repository.java      |   8 +
 .../integration/WorkflowTestCaseContext.java       |   3 +-
 .../WorkflowTestCaseContextFactory.java            |  10 +-
 .../cases/WorkflowInstanceFailoverTestCase.java    |  60 +++++++
 ...WorkflowInstanceRecoverFailureTaskTestCase.java |   4 +-
 .../cases/WorkflowInstanceRecoverStopTestCase.java |   2 +-
 .../WorkflowInstanceRepeatRunningTestCase.java     |   6 +-
 ...flowInstance_with_one_dispatched_fake_task.yaml |  46 ++---
 ...workflowInstance_with_one_failed_fake_task.yaml |  46 ++---
 ...workflowInstance_with_one_paused_fake_task.yaml |  46 ++---
 ...kflowInstance_with_one_submitted_fake_task.yaml |  46 ++---
 ...orkflowInstance_with_one_success_fake_task.yaml |  46 ++---
 ...flowInstance_with_one_dispatched_fake_task.yaml |  46 ++---
 ...workflowInstance_with_one_failed_fake_task.yaml |  46 ++---
 ...workflowInstance_with_one_killed_fake_task.yaml |  46 ++---
 ...kflowInstance_with_one_submitted_fake_task.yaml |  46 ++---
 ...orkflowInstance_with_one_success_fake_task.yaml |  46 ++---
 ...nning_workflowInstance_from_another_master.yaml |  46 ++---
 ...flowInstance_with_one_dispatched_fake_task.yaml |  46 ++---
 ...workflowInstance_with_one_failed_fake_task.yaml |  46 ++---
 ...orkflowInstance_with_one_running_fake_task.yaml |  46 ++---
 ...th_one_running_fake_task_using_environment.yaml |  46 ++---
 ...kflowInstance_with_one_submitted_fake_task.yaml |  46 ++---
 ...orkflowInstance_with_one_success_fake_task.yaml |  46 ++---
 ...lowInstance_with_sub_workflow_task_running.yaml | 188 +++++++++++++++++++++
 .../failure_workflow_from_another_master.yaml      |  46 ++---
 ...failure_workflow_with_two_serial_fake_task.yaml |  46 ++---
 .../stopped_workflow_from_another_master.yaml      |  46 ++---
 .../failed_workflow_with_one_fake_task_failed.yaml |  46 ++---
 ...uccess_workflow_with_one_fake_task_success.yaml |  46 ++---
 .../success_workflow_with_task_only.yaml           |  46 ++---
 36 files changed, 849 insertions(+), 543 deletions(-)

diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java
index 00e4c87e2a..6d96b31bb6 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java
@@ -17,6 +17,7 @@
 
 package org.apache.dolphinscheduler.common.enums;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -93,6 +94,10 @@ public enum WorkflowExecutionStatus {
                 || this == SERIAL_WAIT;
     }
 
+    public boolean canFailover() {
+        return Arrays.stream(NEED_FAILOVER_STATES).anyMatch(x -> x == 
this.getCode());
+    }
+
     public boolean canDirectPauseInDB() {
         return this == SERIAL_WAIT;
     }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.java
index 65de1b7744..a9f743f49a 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.java
@@ -56,6 +56,15 @@ public interface WorkflowInstanceMapper extends 
BaseMapper<WorkflowInstance> {
     List<WorkflowInstance> queryByHostAndStatus(@Param("host") String host,
                                                 @Param("states") int[] 
stateArray);
 
+    /**
+     * query workflow instance by host and stateArray which is not sub workflow
+     *
+     * @param host       host
+     * @param stateArray stateArray
+     * @return workflow instance list
+     */
+    List<WorkflowInstance> queryMainWorkflowByHostAndStatus(@Param("host") 
String host,
+                                                            @Param("states") 
int[] stateArray);
     /**
      * query workflow instance host by stateArray
      *
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowInstanceDaoImpl.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowInstanceDaoImpl.java
index dfc9957608..996678c581 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowInstanceDaoImpl.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowInstanceDaoImpl.java
@@ -170,7 +170,7 @@ public class WorkflowInstanceDaoImpl extends 
BaseDao<WorkflowInstance, WorkflowI
 
     @Override
     public List<WorkflowInstance> queryNeedFailoverWorkflowInstances(String 
masterAddress) {
-        return mybatisMapper.queryByHostAndStatus(masterAddress,
+        return mybatisMapper.queryMainWorkflowByHostAndStatus(masterAddress,
                 
WorkflowExecutionStatus.getNeedFailoverWorkflowInstanceState());
     }
 }
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.xml
index 7587eafad9..83fba41769 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowInstanceMapper.xml
@@ -50,6 +50,22 @@
         </if>
         order by id asc
     </select>
+    <select id="queryMainWorkflowByHostAndStatus" 
resultType="org.apache.dolphinscheduler.dao.entity.WorkflowInstance">
+        select
+        <include refid="baseSql"/>
+        from t_ds_workflow_instance
+        where is_sub_workflow=0
+        <if test="host != null and host != ''">
+            and host=#{host}
+        </if>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" item="i" open="(" close=")" 
separator=",">
+                #{i}
+            </foreach>
+        </if>
+        order by id asc
+    </select>
     <select id="queryNeedFailoverWorkflowInstanceHost" resultType="String">
         select distinct host
         from t_ds_workflow_instance
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/subworkflow/SubWorkflowLogicTask.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/subworkflow/SubWorkflowLogicTask.java
index 89f8b1ecb7..c3d734033b 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/subworkflow/SubWorkflowLogicTask.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/subworkflow/SubWorkflowLogicTask.java
@@ -40,6 +40,7 @@ import 
org.apache.dolphinscheduler.server.master.engine.executor.plugin.Abstract
 import 
org.apache.dolphinscheduler.server.master.engine.executor.plugin.ITaskParameterDeserializer;
 import 
org.apache.dolphinscheduler.server.master.engine.workflow.runnable.IWorkflowExecutionRunnable;
 import 
org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException;
+import org.apache.dolphinscheduler.server.master.failover.WorkflowFailover;
 import org.apache.dolphinscheduler.task.executor.ITaskExecutor;
 import 
org.apache.dolphinscheduler.task.executor.events.TaskExecutorRuntimeContextChangedLifecycleEvent;
 
@@ -148,7 +149,11 @@ public class SubWorkflowLogicTask extends 
AbstractLogicTask<SubWorkflowParameter
             return triggerNewSubWorkflow();
         }
 
-        switch 
(workflowExecutionRunnable.getWorkflowInstance().getCommandType()) {
+        // In some cases, workflow instance's command type has not been 
changed,
+        // there should better to use command.type instead
+        switch 
(workflowExecutionRunnable.getWorkflowExecuteContext().getCommand().getCommandType())
 {
+            case RECOVER_TOLERANCE_FAULT_PROCESS:
+                return recoverFromFaultTolerantTasks();
             case RECOVER_SUSPENDED_PROCESS:
                 return recoverFromSuspendTasks();
             case START_FAILURE_TASK_PROCESS:
@@ -156,7 +161,21 @@ public class SubWorkflowLogicTask extends 
AbstractLogicTask<SubWorkflowParameter
             default:
                 return triggerNewSubWorkflow();
         }
+    }
+
+    private SubWorkflowLogicTaskRuntimeContext recoverFromFaultTolerantTasks() 
{
+        final WorkflowInstanceDao workflowInstanceDao = 
applicationContext.getBean(WorkflowInstanceDao.class);
+        final WorkflowInstance subWorkflowInstance = 
workflowInstanceDao.queryById(
+                subWorkflowLogicTaskRuntimeContext.getSubWorkflowInstanceId());
+
+        if (subWorkflowInstance != null && 
subWorkflowInstance.getState().canFailover()) {
+            // Only handle sub-workflow's fail-over in SubWorkflowLogicTask's 
fail-over
+            
applicationContext.getBean(WorkflowFailover.class).failoverWorkflow(subWorkflowInstance);
+            return subWorkflowLogicTaskRuntimeContext;
+        }
 
+        // The sub-workflow's state is bad, trigger a new sub-workflow instance
+        return triggerNewSubWorkflow();
     }
 
     private SubWorkflowLogicTaskRuntimeContext recoverFromFailedTasks() {
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/Repository.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/Repository.java
index 55b1830daa..15c31c0940 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/Repository.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/Repository.java
@@ -57,6 +57,10 @@ public class Repository {
         return workflowInstanceDao.queryById(workflowInstanceId);
     }
 
+    public List<WorkflowInstance> queryAllWorkflowInstance() {
+        return workflowInstanceDao.queryAll();
+    }
+
     /**
      * Return the list of task instances for a given workflow definition in 
ascending order of their IDs.
      */
@@ -79,4 +83,8 @@ public class Repository {
                 .collect(Collectors.toList());
     }
 
+    public List<TaskInstance> queryAllTaskInstance() {
+        return taskInstanceDao.queryAll();
+    }
+
 }
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContext.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContext.java
index a0c5c83e2e..0441427d67 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContext.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContext.java
@@ -43,7 +43,7 @@ public class WorkflowTestCaseContext {
 
     private List<WorkflowDefinition> workflows;
 
-    private WorkflowInstance workflowInstance;
+    private List<WorkflowInstance> workflowInstances;
 
     private List<TaskInstance> taskInstances;
 
@@ -61,5 +61,4 @@ public class WorkflowTestCaseContext {
         }
         return workflows.get(0);
     }
-
 }
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContextFactory.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContextFactory.java
index c5de1a4d5d..8ff18222d0 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContextFactory.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/WorkflowTestCaseContextFactory.java
@@ -90,8 +90,8 @@ public class WorkflowTestCaseContextFactory {
         
initializeWorkflowDefinitionToDB(workflowTestCaseContext.getWorkflows());
         initializeTaskDefinitionsToDB(workflowTestCaseContext.getTasks());
         
initializeTaskRelationsToDB(workflowTestCaseContext.getTaskRelations());
-        if (workflowTestCaseContext.getWorkflowInstance() != null) {
-            
initializeWorkflowInstanceToDB(workflowTestCaseContext.getWorkflowInstance());
+        if 
(CollectionUtils.isNotEmpty(workflowTestCaseContext.getWorkflowInstances())) {
+            
initializeWorkflowInstancesToDB(workflowTestCaseContext.getWorkflowInstances());
         }
         if 
(CollectionUtils.isNotEmpty(workflowTestCaseContext.getTaskInstances())) {
             
initializeTaskInstancesToDB(workflowTestCaseContext.getTaskInstances());
@@ -111,8 +111,10 @@ public class WorkflowTestCaseContextFactory {
         }
     }
 
-    private void initializeWorkflowInstanceToDB(WorkflowInstance 
workflowInstance) {
-        workflowInstanceDao.insert(workflowInstance);
+    private void initializeWorkflowInstancesToDB(List<WorkflowInstance> 
workflowInstances) {
+        for (WorkflowInstance workflowInstance : workflowInstances) {
+            workflowInstanceDao.insert(workflowInstance);
+        }
     }
 
     private void initializeWorkflowDefinitionToDB(final 
List<WorkflowDefinition> workflowDefinitions) {
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceFailoverTestCase.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceFailoverTestCase.java
index ce95719e97..8b0269eac2 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceFailoverTestCase.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceFailoverTestCase.java
@@ -615,4 +615,64 @@ public class WorkflowInstanceFailoverTestCase extends 
AbstractMasterIntegrationT
         masterContainer.assertAllResourceReleased();
 
     }
+
+    @Test
+    public void testGlobalFailover_runningWorkflow_takeOverSubWorkflow() {
+        final String yaml = 
"/it/failover/running_workflowInstance_with_sub_workflow_task_running.yaml";
+        final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
+        final WorkflowDefinition mainWorkflow = context.getWorkflows().stream()
+                .filter(workflow -> 
workflow.getName().equals("workflow_with_one_sub_workflow_running")).findFirst()
+                .orElse(null);
+        final WorkflowDefinition subWorkflow = context.getWorkflows().stream()
+                .filter(workflow -> 
workflow.getName().equals("sub_workflow_running")).findFirst().orElse(null);
+
+        assertThat(mainWorkflow).isNotNull();
+        assertThat(subWorkflow).isNotNull();
+
+        systemEventBus.publish(GlobalMasterFailoverEvent.of(new Date()));
+
+        await()
+                .atMost(Duration.ofMinutes(1))
+                .untilAsserted(() -> {
+                    assertThat(repository.queryAllWorkflowInstance())
+                            .hasSize(2)
+                            .anySatisfy(workflowInstance -> {
+                                assertThat(workflowInstance.getState())
+                                        
.isEqualTo(WorkflowExecutionStatus.SUCCESS);
+                            });
+                });
+
+        await()
+                .atMost(Duration.ofMinutes(1))
+                .untilAsserted(() -> {
+                    assertThat(repository.queryTaskInstance(mainWorkflow))
+                            .hasSize(2)
+                            .anySatisfy(taskInstance -> {
+                                assertThat(taskInstance.getState())
+                                        .isEqualTo(taskInstance.getId() == 1 ? 
TaskExecutionStatus.NEED_FAULT_TOLERANCE
+                                                : TaskExecutionStatus.SUCCESS);
+                                assertThat(taskInstance.getName())
+                                        .isEqualTo("sub_workflow_task");
+                            });
+                });
+
+        await()
+                .atMost(Duration.ofMinutes(1))
+                .untilAsserted(() -> {
+                    assertThat(repository.queryTaskInstance(subWorkflow))
+                            .hasSize(2)
+                            .anySatisfy(taskInstance -> {
+                                assertThat(taskInstance.getState())
+                                        .isEqualTo(taskInstance.getId() == 2 ? 
TaskExecutionStatus.NEED_FAULT_TOLERANCE
+                                                : TaskExecutionStatus.SUCCESS);
+                                assertThat(taskInstance.getName())
+                                        .isEqualTo("fake_task_A");
+                            });
+                });
+
+        assertThat(repository.queryAllTaskInstance()).hasSize(4);
+
+        masterContainer.assertAllResourceReleased();
+
+    }
 }
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverFailureTaskTestCase.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverFailureTaskTestCase.java
index 6df4edb121..90144c9007 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverFailureTaskTestCase.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverFailureTaskTestCase.java
@@ -52,7 +52,7 @@ public class WorkflowInstanceRecoverFailureTaskTestCase 
extends AbstractMasterIn
         final String yaml = 
"/it/recover_failure_tasks/failure_workflow_with_two_serial_fake_task.yaml";
         final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
 
-        final Integer workflowInstanceId = 
context.getWorkflowInstance().getId();
+        final Integer workflowInstanceId = 
context.getWorkflowInstances().get(0).getId();
         workflowOperator.recoverFailureTasks(workflowInstanceId);
 
         await()
@@ -101,7 +101,7 @@ public class WorkflowInstanceRecoverFailureTaskTestCase 
extends AbstractMasterIn
         final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
         final WorkflowDefinition workflow = context.getOneWorkflow();
 
-        final Integer workflowInstanceId = 
context.getWorkflowInstance().getId();
+        final Integer workflowInstanceId = 
context.getWorkflowInstances().get(0).getId();
         workflowOperator.recoverFailureTasks(workflowInstanceId);
 
         await()
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverStopTestCase.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverStopTestCase.java
index a4616fd88b..ce6cd2594d 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverStopTestCase.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRecoverStopTestCase.java
@@ -132,7 +132,7 @@ public class WorkflowInstanceRecoverStopTestCase extends 
AbstractMasterIntegrati
         final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
         final WorkflowDefinition workflow = context.getOneWorkflow();
 
-        final Integer workflowInstanceId = 
context.getWorkflowInstance().getId();
+        final Integer workflowInstanceId = 
context.getWorkflowInstances().get(0).getId();
         
assertThat(workflowOperator.recoverSuspendWorkflowInstance(workflowInstanceId).isSuccess()).isTrue();
 
         await()
diff --git 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRepeatRunningTestCase.java
 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRepeatRunningTestCase.java
index 2decdb0200..c4c6e16181 100644
--- 
a/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRepeatRunningTestCase.java
+++ 
b/dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowInstanceRepeatRunningTestCase.java
@@ -47,7 +47,7 @@ public class WorkflowInstanceRepeatRunningTestCase extends 
AbstractMasterIntegra
         final String yaml = 
"/it/repeat_running/success_workflow_with_one_fake_task_success.yaml";
         final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
 
-        final Integer workflowInstanceId = 
context.getWorkflowInstance().getId();
+        final Integer workflowInstanceId = 
context.getWorkflowInstances().get(0).getId();
         workflowOperator.repeatRunningWorkflowInstance(workflowInstanceId);
 
         await()
@@ -88,7 +88,7 @@ public class WorkflowInstanceRepeatRunningTestCase extends 
AbstractMasterIntegra
         final String yaml = 
"/it/repeat_running/failed_workflow_with_one_fake_task_failed.yaml";
         final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
 
-        final Integer workflowInstanceId = 
context.getWorkflowInstance().getId();
+        final Integer workflowInstanceId = 
context.getWorkflowInstances().get(0).getId();
         workflowOperator.repeatRunningWorkflowInstance(workflowInstanceId);
 
         await()
@@ -129,7 +129,7 @@ public class WorkflowInstanceRepeatRunningTestCase extends 
AbstractMasterIntegra
         final String yaml = 
"/it/repeat_running/success_workflow_with_task_only.yaml";
         final WorkflowTestCaseContext context = 
workflowTestCaseContextFactory.initializeContextFromYaml(yaml);
 
-        final Integer workflowInstanceId = 
context.getWorkflowInstance().getId();
+        final Integer workflowInstanceId = 
context.getWorkflowInstances().get(0).getId();
         workflowOperator.repeatRunningWorkflowInstance(workflowInstanceId);
 
         await()
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_dispatched_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_dispatched_fake_task.yaml
index 28964bcfe4..dff25b59c8 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_dispatched_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_dispatched_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_PAUSE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_PAUSE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_failed_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_failed_fake_task.yaml
index eabf2fd440..375e5c8e3b 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_failed_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_failed_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_PAUSE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_PAUSE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_paused_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_paused_fake_task.yaml
index 1e2c12aefe..19fa17cdf4 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_paused_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_paused_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_PAUSE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_PAUSE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_submitted_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_submitted_fake_task.yaml
index 14abf00e96..3e3a8df0f2 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_submitted_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_submitted_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_PAUSE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_PAUSE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_success_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_success_fake_task.yaml
index 768515d75b..e545a5a4d5 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_success_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyPause_workflowInstance_with_one_success_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_PAUSE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_PAUSE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_dispatched_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_dispatched_fake_task.yaml
index cbe547459d..71034b1f6e 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_dispatched_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_dispatched_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_STOP
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_STOP
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_failed_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_failed_fake_task.yaml
index d6bae77e88..f7abff6346 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_failed_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_failed_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_STOP
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_STOP
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_killed_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_killed_fake_task.yaml
index 5478edd56f..5c41d76596 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_killed_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_killed_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_STOP
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_STOP
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_submitted_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_submitted_fake_task.yaml
index 5ad1bc5310..85876e51b8 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_submitted_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_submitted_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_STOP
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_STOP
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_success_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_success_fake_task.yaml
index 25fcc75dbc..5e5ee87475 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_success_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/readyStop_workflowInstance_with_one_success_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: READY_STOP
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: READY_STOP
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_from_another_master.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_from_another_master.yaml
index 93f03e240d..4f6a3acb30 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_from_another_master.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_from_another_master.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_running-20250322201900000
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2025-03-22 20:19:00
-  endTime: null
-  runTimes: 1
-  host: "127.0.0.1:15678"
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2025-03-22 20:19:00
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_running-20250322201900000
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2025-03-22 20:19:00
+    endTime: null
+    runTimes: 1
+    host: "127.0.0.1:15678"
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2025-03-22 20:19:00
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_dispatched_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_dispatched_fake_task.yaml
index 90c521fa7d..f3049fd713 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_dispatched_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_dispatched_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_failed_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_failed_fake_task.yaml
index 4a9defc4c0..390f692aaf 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_failed_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_failed_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task.yaml
index bf6d5731ad..a417340468 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task_using_environment.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task_using_environment.yaml
index c34532994e..d23b871810 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task_using_environment.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_running_fake_task_using_environment.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: 
running_workflowInstance_with_one_running_fake_task_using_environment-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: 
running_workflowInstance_with_one_running_fake_task_using_environment-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_submitted_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_submitted_fake_task.yaml
index 75147db3b7..211999b566 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_submitted_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_submitted_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_success_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_success_fake_task.yaml
index 60d8a1e36b..d9237cc25e 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_success_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_one_success_fake_task.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: RUNNING_EXECUTION
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: null
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_sub_workflow_task_running.yaml
 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_sub_workflow_task_running.yaml
new file mode 100644
index 0000000000..6d1e1e24ee
--- /dev/null
+++ 
b/dolphinscheduler-master/src/test/resources/it/failover/running_workflowInstance_with_sub_workflow_task_running.yaml
@@ -0,0 +1,188 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project:
+  name: MasterIntegrationTest
+  code: 1
+  description: This is a fake project
+  userId: 1
+  userName: admin
+  createTime: 2025-04-24 00:00:00
+  updateTime: 2025-04-24 00:00:00
+
+workflows:
+  - name: workflow_with_one_sub_workflow_running
+    code: 1
+    version: 1
+    projectCode: 1
+    description: This is a workflow with sub workflow task
+    releaseState: ONLINE
+    createTime: 2025-04-24 00:00:00
+    updateTime: 2025-04-24 00:00:00
+    userId: 1
+    executionType: PARALLEL
+  - name: sub_workflow_running
+    code: 2
+    version: 1
+    projectCode: 1
+    description: This is a workflow with a fake task
+    releaseState: ONLINE
+    createTime: 2025-04-24 00:00:00
+    updateTime: 2025-04-24 00:00:00
+    userId: 1
+    executionType: PARALLEL
+
+tasks:
+  - name: sub_workflow_task
+    code: 1
+    version: 1
+    projectCode: 1
+    userId: 1
+    taskType: SUB_WORKFLOW
+    taskParams: 
'{"localParams":[],"resourceList":[],"workflowDefinitionCode":2}'
+    workerGroup: default
+    createTime: 2025-04-24 00:00:00
+    updateTime: 2025-04-24 00:00:00
+    taskExecuteType: BATCH
+  - name: fake_task_A
+    code: 2
+    version: 1
+    projectCode: 1
+    userId: 1
+    taskType: LogicFakeTask
+    taskParams: '{"localParams":null,"varPool":[],"shellScript":"ls ."}'
+    workerGroup: default
+    createTime: 2025-04-24 00:00:00
+    updateTime: 2025-04-24 00:00:00
+    taskExecuteType: BATCH
+
+
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_sub_workflow_running-20250424180000000
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2025-04-24 18:00:00
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2025-04-24 18:00:00
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
+  - id: 2
+    name: sub_workflow_running-20250424180000000
+    workflowDefinitionCode: 2
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: RUNNING_EXECUTION
+    recovery: NO
+    startTime: 2025-04-24 18:00:00
+    endTime: null
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2025-04-24 18:00:00
+    isSubWorkflow: YES
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
+
+
+taskInstances:
+  - id: 1
+    name: sub_workflow_task
+    taskType: SUB_WORKFLOW
+    workflowInstanceId: 1
+    workflowInstanceName: 
workflow_with_one_sub_workflow_running-20240816071251690
+    projectCode: 1
+    taskCode: 1
+    taskDefinitionVersion: 1
+    state: RUNNING_EXECUTION
+    firstSubmitTime: 2025-04-24 18:00:00
+    submitTime: 2025-04-24 18:00:00
+    startTime: 2025-04-24 18:00:00
+    retryTimes: 0
+    host: 127.0.0.1:1234
+    maxRetryTimes: 0
+    taskParams: '{"localParams":null,"varPool":[],"workflowDefinitionCode":1}'
+    flag: YES
+    retryInterval: 0
+    delayTime: 0
+    workerGroup: default
+    executorId: 1
+    varPool: '[]'
+    taskExecuteType: BATCH
+    appLink: '{"subWorkflowInstanceId":2}'
+  - id: 2
+    name: fake_task_A
+    taskType: LogicFakeTask
+    workflowInstanceId: 2
+    workflowInstanceName: 
workflow_with_one_sub_workflow_running-20240816071251690
+    projectCode: 1
+    taskCode: 2
+    taskDefinitionVersion: 1
+    state: RUNNING_EXECUTION
+    firstSubmitTime: 2025-04-24 18:00:00
+    submitTime: 2025-04-24 18:00:00
+    startTime: 2025-04-24 18:00:00
+    retryTimes: 0
+    host: 127.0.0.1:1234
+    maxRetryTimes: 0
+    taskParams: '{"localParams":null,"varPool":[],"shellScript":"ls ."}'
+    flag: YES
+    retryInterval: 0
+    delayTime: 0
+    workerGroup: default
+    executorId: 1
+    varPool: '[]'
+    taskExecuteType: BATCH
+
+taskRelations:
+  - projectCode: 1
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    preTaskCode: 0
+    preTaskVersion: 0
+    postTaskCode: 1
+    postTaskVersion: 1
+    createTime: 2025-04-24 00:00:00
+    updateTime: 2025-04-24 00:00:00
+  - projectCode: 1
+    workflowDefinitionCode: 2
+    workflowDefinitionVersion: 1
+    preTaskCode: 0
+    preTaskVersion: 0
+    postTaskCode: 2
+    postTaskVersion: 1
+    createTime: 2025-04-24 00:00:00
+    updateTime: 2025-04-24 00:00:00
diff --git 
a/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_from_another_master.yaml
 
b/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_from_another_master.yaml
index f4047feb25..b0da2c5bc0 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_from_another_master.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_from_another_master.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_killed-20250322201900000
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: FAILURE
-  recovery: NO
-  startTime: 2025-03-22 20:19:00
-  endTime: null
-  runTimes: 1
-  host: "127.0.0.1:15678"
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2025-03-22 20:19:00
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_killed-20250322201900000
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: FAILURE
+    recovery: NO
+    startTime: 2025-03-22 20:19:00
+    endTime: null
+    runTimes: 1
+    host: "127.0.0.1:15678"
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2025-03-22 20:19:00
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_with_two_serial_fake_task.yaml
 
b/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_with_two_serial_fake_task.yaml
index 72cebec447..b2038dcd4e 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_with_two_serial_fake_task.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/recover_failure_tasks/failure_workflow_with_two_serial_fake_task.yaml
@@ -23,29 +23,29 @@ project:
   createTime: 2024-08-12 00:00:00
   updateTime: 2021-08-12 00:00:00
 
-workflowInstance:
-  id: 1
-  name: workflow_with_two_serial_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: FAILURE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: 2024-08-16 07:12:57
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_two_serial_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: FAILURE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: 2024-08-16 07:12:57
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/recover_stopped/stopped_workflow_from_another_master.yaml
 
b/dolphinscheduler-master/src/test/resources/it/recover_stopped/stopped_workflow_from_another_master.yaml
index cc8d31c51b..875db80fe4 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/recover_stopped/stopped_workflow_from_another_master.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/recover_stopped/stopped_workflow_from_another_master.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_killed-20250322201900000
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: STOP
-  recovery: NO
-  startTime: 2025-03-22 20:19:00
-  endTime: null
-  runTimes: 1
-  host: "127.0.0.1:15678"
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2025-03-22 20:19:00
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_killed-20250322201900000
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: STOP
+    recovery: NO
+    startTime: 2025-03-22 20:19:00
+    endTime: null
+    runTimes: 1
+    host: "127.0.0.1:15678"
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2025-03-22 20:19:00
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/repeat_running/failed_workflow_with_one_fake_task_failed.yaml
 
b/dolphinscheduler-master/src/test/resources/it/repeat_running/failed_workflow_with_one_fake_task_failed.yaml
index 1814e23e6b..327fd2c1aa 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/repeat_running/failed_workflow_with_one_fake_task_failed.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/repeat_running/failed_workflow_with_one_fake_task_failed.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: FAILURE
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: 2024-08-16 07:12:57
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: FAILURE
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: 2024-08-16 07:12:57
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_one_fake_task_success.yaml
 
b/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_one_fake_task_success.yaml
index 21c213d749..c85fffc814 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_one_fake_task_success.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_one_fake_task_success.yaml
@@ -36,29 +36,29 @@ workflows:
     userId: 1
     executionType: PARALLEL
 
-workflowInstance:
-  id: 1
-  name: workflow_with_one_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: SUCCESS
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: 2024-08-16 07:12:57
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_POST
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_one_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: SUCCESS
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: 2024-08-16 07:12:57
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_POST
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1
diff --git 
a/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_task_only.yaml
 
b/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_task_only.yaml
index ded7dc8c09..3e09bd23c2 100644
--- 
a/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_task_only.yaml
+++ 
b/dolphinscheduler-master/src/test/resources/it/repeat_running/success_workflow_with_task_only.yaml
@@ -24,29 +24,29 @@ project:
   createTime: 2024-08-12 00:00:00
   updateTime: 2021-08-12 00:00:00
 
-workflowInstance:
-  id: 1
-  name: workflow_with_two_parallel_fake_task_success-20240816071251690
-  workflowDefinitionCode: 1
-  workflowDefinitionVersion: 1
-  projectCode: 1
-  state: SUCCESS
-  recovery: NO
-  startTime: 2024-08-16 07:12:52
-  endTime: 2024-08-16 07:12:57
-  runTimes: 1
-  host: 127.0.0.1:5678
-  commandType: START_PROCESS
-  commandParam: 
'{"commandType":"START_PROCESS","startNodes":[1],"commandParams":[],"timeZone":"UTC"}'
-  taskDependType: TASK_ONLY
-  commandStartTime: 2024-08-16 07:12:52
-  isSubWorkflow: NO
-  executorId: 1
-  historyCmd: START_PROCESS
-  workerGroup: default
-  globalParams: '[]'
-  varPool: '[]'
-  dryRun: 0
+workflowInstances:
+  - id: 1
+    name: workflow_with_two_parallel_fake_task_success-20240816071251690
+    workflowDefinitionCode: 1
+    workflowDefinitionVersion: 1
+    projectCode: 1
+    state: SUCCESS
+    recovery: NO
+    startTime: 2024-08-16 07:12:52
+    endTime: 2024-08-16 07:12:57
+    runTimes: 1
+    host: 127.0.0.1:5678
+    commandType: START_PROCESS
+    commandParam: 
'{"commandType":"START_PROCESS","startNodes":[1],"commandParams":[],"timeZone":"UTC"}'
+    taskDependType: TASK_ONLY
+    commandStartTime: 2024-08-16 07:12:52
+    isSubWorkflow: NO
+    executorId: 1
+    historyCmd: START_PROCESS
+    workerGroup: default
+    globalParams: '[]'
+    varPool: '[]'
+    dryRun: 0
 
 taskInstances:
   - id: 1

Reply via email to