Skip to content

对于前置节点放行(skip或success),其中只要有一个success,其它为skip ,本节点应该为success #62

@Andioruser

Description

@Andioruser

这是我贴出的实现方法,需要将原本的DoPrecheck的地方换成ShouldSkip,内部逻辑是先做DoPrecheck,如果阻塞,直接阻塞【状态在函数内部被更新为block】,如果skip直接返回,状态也被函数自动更新,再进行放行的前置节点检查(success或skip),其中只要有success,那么本节点也应该success。
调用shouldSkip的时候,先判断taskstatus有没有因为调用了doprecheck被设置成了skip或者success,然后再根据ShouldSkip的返回值来判断,yes就是skip,no就是success。

func (t *TaskInstance) ShouldSkip(dagIns *DagInstance) bool {
    if t.PreChecks != nil {
        if ok, _ := t.DoPreCheck(dagIns); ok {
            return t.Status == TaskInstanceStatusSkipped
        }
    }

    // 自动判断前置 skip 传播
    allSkipped := true
    for _, depID := range t.DependOn {
        dep := dagIns.GetTaskInstanceByID(depID)
        if dep.Status != TaskInstanceStatusSkipped {
            allSkipped = false
            break
        }
    }

    return allSkipped
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions