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

huajiang 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 8315279620 [Feature-#14148][Task] Added status check interval and 
dependent failure policy parameters for dependent task nodes  (#14150)
8315279620 is described below

commit 8315279620541bdb245af7efa25b4fc47187b694
Author: Kerwin <[email protected]>
AuthorDate: Fri May 19 14:49:50 2023 +0800

    [Feature-#14148][Task] Added status check interval and dependent failure 
policy parameters for dependent task nodes  (#14150)
    
    * Added a dependent task failure policy in the dependent task node
---
 docs/docs/en/guide/task/dependent.md               |   9 +-
 docs/docs/zh/guide/task/dependent.md               |   8 +-
 .../DependentAsyncTaskExecuteFunction.java         |  12 +-
 .../server/master/utils/DependentExecute.java      |  24 ++--
 .../task/api/parameters/DependentParameters.java   |  13 +++
 dolphinscheduler-ui/src/locales/en_US/project.ts   |  15 ++-
 dolphinscheduler-ui/src/locales/zh_CN/project.ts   |  19 +++-
 .../task/components/node/fields/use-dependent.ts   | 121 ++++++++++++++++-----
 .../projects/task/components/node/format-data.ts   |  13 ++-
 .../task/components/node/tasks/use-dependent.ts    |   2 +
 .../views/projects/task/components/node/types.ts   |  17 ++-
 11 files changed, 191 insertions(+), 62 deletions(-)

diff --git a/docs/docs/en/guide/task/dependent.md 
b/docs/docs/en/guide/task/dependent.md
index f13fed59c1..a0bdc6fcdf 100644
--- a/docs/docs/en/guide/task/dependent.md
+++ b/docs/docs/en/guide/task/dependent.md
@@ -16,9 +16,12 @@ Dependent nodes are **dependency check nodes**. For example, 
process A depends o
 
 - Please refer to [DolphinScheduler Task Parameters Appendix](appendix.md) 
`Default Task Parameters` section for default parameters.
 
-|  **Parameter**   |               **Description**               |
-|------------------|---------------------------------------------|
-| Predecessor Task | The upstream task of the current task node. |
+|          **Parameter**          |                                            
                                **Description**                                 
                                           |
+|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Add Dependencies                | Configure dependent upstream tasks.        
                                                                                
                                           |
+| Check interval                  | Check the dependent upstream task status 
interval, the default is 10s.                                                   
                                             |
+| Dependency failure policy       | Failure: The dependent upstream task 
failure and the current task directly failure; Wait: The dependent upstream 
task failure and the current task continues to wait; |
+| Dependency failure waiting time | When the dependency failure policy chooses 
to wait, the current task wait time.                                            
                                           |
 
 ## Task Examples
 
diff --git a/docs/docs/zh/guide/task/dependent.md 
b/docs/docs/zh/guide/task/dependent.md
index ccdadd5aa9..c3318ae3d2 100644
--- a/docs/docs/zh/guide/task/dependent.md
+++ b/docs/docs/zh/guide/task/dependent.md
@@ -15,7 +15,13 @@ Dependent 节点,就是**依赖检查节点**。比如 A 流程依赖昨天的
 [//]: # (- 
默认参数说明请参考[DolphinScheduler任务参数附录]&#40;appendix.md#默认任务参数&#41;`默认任务参数`一栏。)
 
 - 默认参数说明请参考[DolphinScheduler任务参数附录](appendix.md)`默认任务参数`一栏。
-- 此任务除上述链接中的默认参数外无其他参数。
+
+| **任务参数** |                    **描述**                    |
+|----------|----------------------------------------------|
+| 添加依赖     | 配置依赖的上游任务.                                   |
+| 检查间隔     | 检查依赖的上游任务状态间隔,默认10s.                         |
+| 依赖失败策略   | 失败: 依赖的上游任务失败当前任务直接失败;等待: 依赖的上游任务失败当前任务继续等待; |
+| 依赖失败等待时间 | 当依赖失败策略选择等待时,当前任务等待的时间.                      |
 
 ## 任务样例
 
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dependent/DependentAsyncTaskExecuteFunction.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dependent/DependentAsyncTaskExecuteFunction.java
index 86517f5a1d..858057dbb8 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dependent/DependentAsyncTaskExecuteFunction.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/dependent/DependentAsyncTaskExecuteFunction.java
@@ -56,7 +56,7 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class DependentAsyncTaskExecuteFunction implements 
AsyncTaskExecuteFunction {
 
-    private static final Duration DEPENDENT_TASK_STATE_CHECK_INTERVAL = 
Duration.ofSeconds(10);
+    private static final Duration DEFAULT_STATE_CHECK_INTERVAL = 
Duration.ofSeconds(10);
 
     private final TaskExecutionContext taskExecutionContext;
     private final DependentParameters dependentParameters;
@@ -195,6 +195,10 @@ public class DependentAsyncTaskExecuteFunction implements 
AsyncTaskExecuteFuncti
     private boolean isAllDependentTaskFinished() {
         boolean isAllDependentTaskFinished = true;
         for (DependentExecute dependentExecute : dependentTaskList) {
+            if (!dependentExecute.finish(dependentDate, 
processInstance.getTestFlag(),
+                    dependentParameters.getFailurePolicy(), 
dependentParameters.getFailureWaitingTime())) {
+                isAllDependentTaskFinished = false;
+            }
             dependentExecute.getDependResultMap().forEach((dependentKey, 
dependResult) -> {
                 if (!dependResultMap.containsKey(dependentKey)) {
                     dependResultMap.put(dependentKey, dependResult);
@@ -206,15 +210,13 @@ public class DependentAsyncTaskExecuteFunction implements 
AsyncTaskExecuteFuncti
                             dependResult, dependentDate);
                 }
             });
-            if (!dependentExecute.finish(dependentDate, 
processInstance.getTestFlag())) {
-                isAllDependentTaskFinished = false;
-            }
         }
         return isAllDependentTaskFinished;
     }
 
     @Override
     public @NonNull Duration getAsyncTaskStateCheckInterval() {
-        return DEPENDENT_TASK_STATE_CHECK_INTERVAL;
+        return dependentParameters.getCheckInterval() == null ? 
DEFAULT_STATE_CHECK_INTERVAL
+                : Duration.ofSeconds(dependentParameters.getCheckInterval());
     }
 }
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
index 38a71d00ec..cd212cbff8 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
@@ -17,6 +17,8 @@
 
 package org.apache.dolphinscheduler.server.master.utils;
 
+import static 
org.apache.dolphinscheduler.plugin.task.api.parameters.DependentParameters.DependentFailurePolicyEnum.DEPENDENT_FAILURE_WAITING;
+
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
 import org.apache.dolphinscheduler.dao.entity.TaskInstance;
@@ -27,9 +29,12 @@ import 
org.apache.dolphinscheduler.plugin.task.api.enums.DependentRelation;
 import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
 import org.apache.dolphinscheduler.plugin.task.api.model.DateInterval;
 import org.apache.dolphinscheduler.plugin.task.api.model.DependentItem;
+import 
org.apache.dolphinscheduler.plugin.task.api.parameters.DependentParameters;
 import org.apache.dolphinscheduler.plugin.task.api.utils.DependentUtils;
 import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
 
+import java.time.Duration;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -62,11 +67,6 @@ public class DependentExecute {
 
     private TaskInstance taskInstance;
 
-    /**
-     * depend result
-     */
-    private DependResult modelDependResult = DependResult.WAITING;
-
     /**
      * depend result map
      */
@@ -231,10 +231,15 @@ public class DependentExecute {
      * @param currentTime current time
      * @return boolean
      */
-    public boolean finish(Date currentTime, int testFlag) {
+    public boolean finish(Date currentTime, int testFlag, 
DependentParameters.DependentFailurePolicyEnum failurePolicy,
+                          Integer failureWaitingTime) {
+        DependResult modelDependResult = getModelDependResult(currentTime, 
testFlag);
         if (modelDependResult == DependResult.WAITING) {
-            modelDependResult = getModelDependResult(currentTime, testFlag);
             return false;
+        } else if (modelDependResult == DependResult.FAILED && 
DEPENDENT_FAILURE_WAITING == failurePolicy
+                && failureWaitingTime != null) {
+            return Duration.between(currentTime.toInstant(), Instant.now())
+                    .compareTo(Duration.ofMinutes(failureWaitingTime)) > 0;
         }
         return true;
     }
@@ -260,13 +265,12 @@ public class DependentExecute {
                 continue;
             }
             DependResult dependResult = getDependResultForItem(dependentItem, 
currentTime, testFlag);
-            if (dependResult != DependResult.WAITING) {
+            if (dependResult != DependResult.WAITING && dependResult != 
DependResult.FAILED) {
                 dependResultMap.put(dependentItem.getKey(), dependResult);
             }
             dependResultList.add(dependResult);
         }
-        modelDependResult = 
DependentUtils.getDependResultForRelation(this.relation, dependResultList);
-        return modelDependResult;
+        return DependentUtils.getDependResultForRelation(this.relation, 
dependResultList);
     }
 
     /**
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/DependentParameters.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/DependentParameters.java
index 2b90f4a1cc..1e648d5775 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/DependentParameters.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/DependentParameters.java
@@ -31,10 +31,23 @@ public class DependentParameters extends AbstractParameters 
{
 
     private List<DependentTaskModel> dependTaskList;
     private DependentRelation relation;
+    /** Time unit is second */
+    private Integer checkInterval;
+    private DependentFailurePolicyEnum failurePolicy;
+    /** Time unit is minutes */
+    private Integer failureWaitingTime;
 
     @Override
     public boolean checkParameters() {
         return true;
     }
 
+    /**
+     * the dependent task failure policy.
+     */
+    public enum DependentFailurePolicyEnum {
+        DEPENDENT_FAILURE_FAILURE,
+        DEPENDENT_FAILURE_WAITING
+    }
+
 }
diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts 
b/dolphinscheduler-ui/src/locales/en_US/project.ts
index a62906aaf9..f6e072960e 100644
--- a/dolphinscheduler-ui/src/locales/en_US/project.ts
+++ b/dolphinscheduler-ui/src/locales/en_US/project.ts
@@ -374,6 +374,7 @@ export default {
     times: 'Times',
     failed_retry_interval: 'Failed retry interval',
     minute: 'Minute',
+    second: 'Second',
     delay_execution_time: 'Delay execution time',
     namespace_cluster: 'Namespace(Cluster)',
     min_cpu: 'Min cpu',
@@ -386,7 +387,8 @@ export default {
     command_tips:
       'Please enter the container execution command, for example: 
["printenv"]',
     args: 'Args',
-    args_tips: 'Please enter the container execution command args, for 
example: ["HOSTNAME", "KUBERNETES_PORT"]',
+    args_tips:
+      'Please enter the container execution command args, for example: 
["HOSTNAME", "KUBERNETES_PORT"]',
     min_memory_tips: 'Please enter min memory',
     state: 'State',
     branch_flow: 'Branch flow',
@@ -623,6 +625,7 @@ export default {
     add_dependency: 'Add dependency',
     waiting_dependent_start: 'Waiting Dependent start',
     check_interval: 'Check interval',
+    check_interval_tips: 'Check interval must be a positive integer',
     waiting_dependent_complete: 'Waiting Dependent complete',
     project_name: 'Project Name',
     project_name_tips: 'Please select a project(required)',
@@ -695,7 +698,7 @@ export default {
     zeppelin_username: 'zeppelinUsername',
     zeppelin_username_tips: 'Please enter the zeppelin server username',
     zeppelin_password: 'zeppelinPassword',
-    zeppelin_password_tips: 'Please enter the zeppelin server password',  
+    zeppelin_password_tips: 'Please enter the zeppelin server password',
     hive_cli_task_execution_type: 'Hive Cli Task Execution Type',
     hive_sql_script: 'Hive SQL Script',
     hive_cli_options: 'Hive Cli Options',
@@ -823,7 +826,13 @@ export default {
     pipeline_name: 'Pipeline Name',
     factory_tips: 'Please select factory',
     resource_group_tips: 'Please select resource group',
-    pipeline_tips: 'Please select pipeline'
+    pipeline_tips: 'Please select pipeline',
+    dependent_failure_policy: 'Dependent failure policy',
+    dependent_failure_policy_failure: 'failure',
+    dependent_failure_policy_waiting: 'waiting',
+    dependent_failure_waiting_time: 'Dependent failure waiting time',
+    dependent_failure_waiting_time_tips:
+      'Failure waiting time must be a positive integer'
   },
   menu: {
     fav: 'Favorites',
diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts 
b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
index b965d98527..ccb68b80aa 100644
--- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts
+++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
@@ -37,10 +37,10 @@ export default {
     confirm: '确定',
     cancel: '取消',
     delete_confirm: '确定删除吗?',
-    authorize_level:'权限等级',
+    authorize_level: '权限等级',
     no_permission: '无权限',
     read_permission: '读权限',
-    all_permission: '所有权限',
+    all_permission: '所有权限'
   },
   workflow: {
     on_line: '线上',
@@ -221,7 +221,7 @@ export default {
     workflow_relation_no_data_result_desc:
       '目前没有任何工作流,请先创建工作流,再访问该页面',
     ready_to_block: '准备锁定',
-    block: '锁定',
+    block: '锁定'
   },
   task: {
     on_line: '线上',
@@ -335,7 +335,7 @@ export default {
     online: '已上线'
   },
   node: {
-    is_cache: "缓存执行",
+    is_cache: '缓存执行',
     is_module_path: '使用模块路径',
     run_type: '运行类型',
     jvm_args: '虚拟机参数',
@@ -373,6 +373,7 @@ export default {
     times: '次',
     failed_retry_interval: '失败重试间隔',
     minute: '分',
+    second: '秒',
     delay_execution_time: '延时执行时间',
     namespace_cluster: '命名空间(集群)',
     min_cpu: '最小cpu',
@@ -615,6 +616,7 @@ export default {
     add_dependency: '添加依赖',
     waiting_dependent_start: '等待依赖启动',
     check_interval: '检查间隔',
+    check_interval_tips: '检查间隔必须为正整数',
     waiting_dependent_complete: '等待依赖完成',
     project_name: '项目名称',
     project_name_tips: '项目名称(必填)',
@@ -801,7 +803,12 @@ export default {
     pipeline_name: 'pipeline名称',
     factory_tips: '请选择工厂',
     resource_group_tips: '请选择资源组',
-    pipeline_tips: '请选择pipeline'
+    pipeline_tips: '请选择pipeline',
+    dependent_failure_policy: '依赖失败策略',
+    dependent_failure_policy_failure: '失败',
+    dependent_failure_policy_waiting: '等待',
+    dependent_failure_waiting_time: '依赖失败等待时间',
+    dependent_failure_waiting_time_tips: '失败等待时间必须为正整数'
   },
   menu: {
     fav: '收藏组件',
@@ -811,6 +818,6 @@ export default {
     di: '数据集成',
     dq: '数据质量',
     ml: '机器学习',
-    other: '其他',
+    other: '其他'
   }
 }
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
index 50d228cc99..433895f861 100644
--- 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
+++ 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import { ref, onMounted, watch, h } from 'vue'
+import { ref, onMounted, watch, h, computed } from 'vue'
 import { useI18n } from 'vue-i18n'
 import { NEllipsis, NIcon } from 'naive-ui'
 import { useRelationCustomParams, useDependentTimeout } from '.'
@@ -36,13 +36,28 @@ import type {
   ITaskState,
   IDateType
 } from '../types'
-import {IRenderOption} from "../types";
+import { IRenderOption } from '../types'
 
 export function useDependent(model: { [field: string]: any }): IJsonItem[] {
   const { t } = useI18n()
   const router: Router = useRouter()
   const nodeStore = useTaskNodeStore()
 
+  const dependentFailurePolicyOptions = computed(() => {
+    return [
+      {
+        label: t('project.node.dependent_failure_policy_failure'),
+        value: 'DEPENDENT_FAILURE_FAILURE'
+      },
+      {
+        label: t('project.node.dependent_failure_policy_waiting'),
+        value: 'DEPENDENT_FAILURE_WAITING'
+      }
+    ]
+  })
+  const failureWaitingTimeSpan = computed(() =>
+    model.failurePolicy === 'DEPENDENT_FAILURE_WAITING' ? 12 : 0
+  )
   const dependentResult = nodeStore.getDependentResult
   const TasksStateConfig = tasksState(t)
   const projectList = ref([] as IRenderOption[])
@@ -248,23 +263,26 @@ export function useDependent(model: { [field: string]: 
any }): IJsonItem[] {
         if (!item.dependItemList?.length) return
 
         const itemListOptions = ref([] as IDependentItemOptions[])
-        item.dependItemList?.forEach(async (dependItem: IDependentItem, 
itemIndex: number) => {
-          itemListOptions.value[itemIndex] = {}
-          if (dependItem.projectCode) {
-            itemListOptions.value[itemIndex].definitionCodeOptions = await 
getProcessList(
-              dependItem.projectCode
-            )
-          }
-          if (dependItem.projectCode && dependItem.definitionCode) {
-            itemListOptions.value[itemIndex].depTaskCodeOptions = await 
getTaskList(
-              dependItem.projectCode,
-              dependItem.definitionCode
-            )
-          }
-          if (dependItem.cycle) {
-            itemListOptions.value[itemIndex].dateOptions = 
DATE_LIST[dependItem.cycle]
+        item.dependItemList?.forEach(
+          async (dependItem: IDependentItem, itemIndex: number) => {
+            itemListOptions.value[itemIndex] = {}
+            if (dependItem.projectCode) {
+              itemListOptions.value[itemIndex].definitionCodeOptions =
+                await getProcessList(dependItem.projectCode)
+            }
+            if (dependItem.projectCode && dependItem.definitionCode) {
+              itemListOptions.value[itemIndex].depTaskCodeOptions =
+                await getTaskList(
+                  dependItem.projectCode,
+                  dependItem.definitionCode
+                )
+            }
+            if (dependItem.cycle) {
+              itemListOptions.value[itemIndex].dateOptions =
+                DATE_LIST[dependItem.cycle]
+            }
           }
-        })
+        )
         selectOptions.value[taskIndex] = {} as IDependTaskOptions
         selectOptions.value[taskIndex].dependItemList = itemListOptions.value
       })
@@ -297,7 +315,9 @@ export function useDependent(model: { [field: string]: any 
}): IJsonItem[] {
                 const options = selectOptions?.value[i] || {}
                 const itemListOptions = options?.dependItemList || []
                 const itemOptions = {} as IDependentItemOptions
-                itemOptions.definitionCodeOptions = await 
getProcessList(projectCode)
+                itemOptions.definitionCodeOptions = await getProcessList(
+                  projectCode
+                )
                 itemListOptions[j] = itemOptions
                 options.dependItemList = itemListOptions
                 selectOptions.value[i] = options
@@ -331,15 +351,14 @@ export function useDependent(model: { [field: string]: 
any }): IJsonItem[] {
               },
               onUpdateValue: async (processCode: number) => {
                 const item = model.dependTaskList[i].dependItemList[j]
-                selectOptions.value[i].dependItemList[j].depTaskCodeOptions = 
await getTaskList(
-                  item.projectCode,
-                  processCode
-                )
+                selectOptions.value[i].dependItemList[j].depTaskCodeOptions =
+                  await getTaskList(item.projectCode, processCode)
                 item.depTaskCode = 0
               }
             },
-            options: selectOptions.value[i]?.dependItemList[j]
-                    ?.definitionCodeOptions || [],
+            options:
+              selectOptions.value[i]?.dependItemList[j]
+                ?.definitionCodeOptions || [],
             path: `dependTaskList.${i}.dependItemList.${j}.definitionCode`,
             rule: {
               required: true,
@@ -430,6 +449,56 @@ export function useDependent(model: { [field: string]: any 
}): IJsonItem[] {
       }),
       childrenField: 'dependItemList',
       name: 'add_dependency'
-    })
+    }),
+    {
+      type: 'input-number',
+      field: 'checkInterval',
+      name: t('project.node.check_interval'),
+      span: 12,
+      props: {
+        max: Math.pow(9, 10) - 1
+      },
+      slots: {
+        suffix: () => t('project.node.second')
+      },
+      validate: {
+        trigger: ['input'],
+        validator(validate: any, value: number) {
+          if (!value && !/^[1-9]\d*$/.test(String(value))) {
+            return new Error(t('project.node.check_interval_tips'))
+          }
+        }
+      }
+    },
+    {
+      type: 'radio',
+      field: 'failurePolicy',
+      name: t('project.node.dependent_failure_policy'),
+      options: dependentFailurePolicyOptions,
+      span: 24
+    },
+    {
+      type: 'input-number',
+      field: 'failureWaitingTime',
+      name: t('project.node.dependent_failure_waiting_time'),
+      span: failureWaitingTimeSpan,
+      props: {
+        max: Math.pow(9, 10) - 1
+      },
+      slots: {
+        suffix: () => t('project.node.minute')
+      },
+      validate: {
+        trigger: ['input'],
+        required: true,
+        validator(validate: any, value: number) {
+          if (model.timeoutFlag && !/^[1-9]\d*$/.test(String(value))) {
+            return new Error(
+              t('project.node.dependent_failure_waiting_time_tips')
+            )
+          }
+        }
+      }
+    }
   ]
 }
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts 
b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
index ce3143f468..8ee6140b4c 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
@@ -23,8 +23,7 @@ import type {
   ISqoopTargetParams,
   ISqoopSourceParams,
   ILocalParam,
-  IDependTask,
-  RelationType
+  IDependentParameters
 } from './types'
 
 export function formatParams(data: INodeData): {
@@ -279,6 +278,9 @@ export function formatParams(data: INodeData): {
   }
   if (data.taskType === 'DEPENDENT') {
     taskParams.dependence = {
+      checkInterval: data.checkInterval,
+      failurePolicy: data.failurePolicy,
+      failureWaitingTime: data.failureWaitingTime,
       relation: data.relation,
       dependTaskList: data.dependTaskList
     }
@@ -651,7 +653,12 @@ export function formatModel(data: ITaskData) {
   }
 
   if (data.taskParams?.dependence) {
-    const dependence: { relation?: RelationType, dependTaskList?: 
IDependTask[] } = JSON.parse(JSON.stringify(data.taskParams.dependence))
+    const dependence: IDependentParameters = JSON.parse(
+      JSON.stringify(data.taskParams.dependence)
+    )
+    params.checkInterval = dependence.checkInterval
+    params.failurePolicy = dependence.failurePolicy
+    params.failureWaitingTime = dependence.failureWaitingTime
     params.dependTaskList = dependence.dependTaskList || []
     params.relation = dependence.relation
   }
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-dependent.ts
 
b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-dependent.ts
index 2551d1076f..02bfcf7ebc 100644
--- 
a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-dependent.ts
+++ 
b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-dependent.ts
@@ -48,6 +48,8 @@ export function useDependent({
     timeoutNotifyStrategy: [],
     timeout: 30,
     timeoutFlag: false,
+    failurePolicy: 'DEPENDENT_FAILURE_FAILURE',
+    checkInterval: 10,
     ...data
   } as INodeData)
 
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts 
b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
index ebadd4f752..e65045b140 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
@@ -107,6 +107,14 @@ interface ISwitchResult {
   nextNode?: number
 }
 
+interface IDependentParameters {
+  checkInterval?: number
+  failurePolicy?: 'DEPENDENT_FAILURE_FAILURE' | 'DEPENDENT_FAILURE_WAITING'
+  failureWaitingTime?: number
+  relation?: RelationType
+  dependTaskList?: IDependTask[]
+}
+
 /*
  * resourceName: resource full name
  * res: resource file name
@@ -301,10 +309,7 @@ interface ITaskParams {
   switchResult?: ISwitchResult
   dependTaskList?: IDependTask[]
   nextNode?: number
-  dependence?: {
-    relation?: RelationType
-    dependTaskList?: IDependTask[]
-  }
+  dependence?: IDependentParameters
   customConfig?: number
   json?: string
   dsType?: string
@@ -441,6 +446,7 @@ interface INodeData
     >,
     ISqoopTargetData,
     ISqoopSourceData,
+    IDependentParameters,
     Omit<IRuleParameters, 'mapping_columns'> {
   id?: string
   taskType?: ITaskType
@@ -519,5 +525,6 @@ export {
   FormRules,
   IJsonItemParams,
   IResponseJsonItem,
-  IDateType
+  IDateType,
+  IDependentParameters
 }

Reply via email to