From 465a30a31db65b30598689c8ba00a575db28d43a Mon Sep 17 00:00:00 2001 From: Edgar Lee Date: Wed, 12 Jan 2022 15:50:54 -0800 Subject: [PATCH] Remove goto statements causing failed edges to never unpark Signed-off-by: Edgar Lee --- solver/edge.go | 6 +++++- solver/scheduler.go | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/solver/edge.go b/solver/edge.go index b6d65b5b6b0c..860bd0efa17c 100644 --- a/solver/edge.go +++ b/solver/edge.go @@ -68,6 +68,8 @@ type edge struct { index *edgeIndex secondaryExporters []expDep + + failedOnce sync.Once } // dep holds state for a dependant edge @@ -375,7 +377,9 @@ func (e *edge) makeExportable(k *CacheKey, records []*CacheRecord) ExportableCac func (e *edge) markFailed(f *pipeFactory, err error) { e.err = err - e.postpone(f) + e.failedOnce.Do(func() { + e.postpone(f) + }) } // processUpdate is called by unpark for every updated pipe request diff --git a/solver/scheduler.go b/solver/scheduler.go index 02d14c7fa0ca..d617cd912ce3 100644 --- a/solver/scheduler.go +++ b/solver/scheduler.go @@ -138,7 +138,6 @@ func (s *scheduler) dispatch(e *edge) { debugSchedulerPostUnpark(e, inc) } -postUnpark: // set up new requests that didn't complete/were added by this run openIncoming := make([]*edgePipe, 0, len(inc)) for _, r := range s.incoming[e] { @@ -189,11 +188,9 @@ postUnpark: // unpark(), not for any external input. if len(openIncoming) > 0 && len(openOutgoing) == 0 { e.markFailed(pf, errors.New("buildkit scheduler error: return leaving incoming open. Please report this with BUILDKIT_SCHEDULER_DEBUG=1")) - goto postUnpark } if len(openIncoming) == 0 && len(openOutgoing) > 0 { e.markFailed(pf, errors.New("buildkit scheduler error: return leaving outgoing open. Please report this with BUILDKIT_SCHEDULER_DEBUG=1")) - goto postUnpark } }