diff --git a/pkg/apis/pipeline/v1beta1/pipeline_types.go b/pkg/apis/pipeline/v1beta1/pipeline_types.go index 174b0d98b00..7f6f21e6f19 100644 --- a/pkg/apis/pipeline/v1beta1/pipeline_types.go +++ b/pkg/apis/pipeline/v1beta1/pipeline_types.go @@ -19,6 +19,7 @@ package v1beta1 import ( "github.com/tektoncd/pipeline/pkg/reconciler/pipeline/dag" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" ) // +genclient @@ -174,7 +175,16 @@ func (pt PipelineTask) Deps() []string { deps = append(deps, pt.resourceDeps()...) deps = append(deps, pt.orderingDeps()...) - return deps + uniqueDeps := sets.NewString() + for _, w := range deps { + if uniqueDeps.Has(w) { + continue + } + uniqueDeps.Insert(w) + + } + + return uniqueDeps.List() } func (pt PipelineTask) resourceDeps() []string { diff --git a/pkg/reconciler/pipeline/dag/dag.go b/pkg/reconciler/pipeline/dag/dag.go index b8c2b1d711e..16f39fc4fce 100644 --- a/pkg/reconciler/pipeline/dag/dag.go +++ b/pkg/reconciler/pipeline/dag/dag.go @@ -137,12 +137,16 @@ func linkPipelineTasks(prev *Node, next *Node) error { } func visit(currentName string, nodes []*Node, path []string, visited map[string]bool) error { + var sb strings.Builder for _, n := range nodes { path = append(path, n.Task.HashKey()) if _, ok := visited[n.Task.HashKey()]; ok { return errors.New(getVisitedPath(path)) } - visited[currentName+"."+n.Task.HashKey()] = true + sb.WriteString(currentName) + sb.WriteByte('.') + sb.WriteString(n.Task.HashKey()) + visited[sb.String()] = true if err := visit(n.Task.HashKey(), n.Prev, path, visited); err != nil { return err } diff --git a/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go b/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go index 86bad2ce4b0..6b9e55aa2e1 100644 --- a/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go +++ b/pkg/reconciler/pipelinerun/resources/pipelinerunstate_test.go @@ -503,7 +503,7 @@ func buildPipelineStateWithLargeDepencyGraph(t *testing.T) PipelineRunState { TaskSpec: &task.Spec, }, }} - for i := 2; i < 60; i++ { + for i := 2; i < 400; i++ { dependFrom := 1 if i > 10 { if i%10 == 0 {