diff --git a/core/artwork/artwork.go b/core/artwork/artwork.go index 981446edc..6254e0cf8 100644 --- a/core/artwork/artwork.go +++ b/core/artwork/artwork.go @@ -402,6 +402,8 @@ type Resolver struct { func NewTracingResolver(ds model.DataStore, ag *agents.Agents, ffm ffmpeg.FFmpeg, t *ChainTrace, live bool) *Resolver { gate := offlineGate(t) if live { + // A diagnostic must show the provider's real answer, and one item is at most one call + // per agent, so --live deliberately bypasses the rate limiter and circuit breaker. gate = tracingGate(t, passthroughGate) } return &Resolver{inner: newResolver(ds, ag, ffm, gate), trace: t} diff --git a/core/artwork/trace.go b/core/artwork/trace.go index b86e67a89..772e98869 100644 --- a/core/artwork/trace.go +++ b/core/artwork/trace.go @@ -79,8 +79,6 @@ func tracingGate(t *chainTrace, inner gateFunc) gateFunc { switch { case r != nil: t.add(traceStep{Candidate: candidate, Outcome: OutcomeHit, Detail: path}) - case errors.Is(err, errBreakerOpen): - t.add(traceStep{Candidate: candidate, Outcome: OutcomeSkipped, Detail: "circuit breaker open"}) case isTransientExternal(err): t.add(traceStep{Candidate: candidate, Outcome: OutcomeError, Detail: err.Error()}) default: diff --git a/core/artwork/trace_test.go b/core/artwork/trace_test.go index 3d04e8ed5..d6c594979 100644 --- a/core/artwork/trace_test.go +++ b/core/artwork/trace_test.go @@ -158,16 +158,6 @@ var _ = Describe("external gate tracing", func() { Expect(t.Steps()[0].Detail).To(ContainSubstring("429")) }) - It("records skipped when the breaker is open", func() { - t := &chainTrace{} - open := func(string, func() (io.ReadCloser, string, error)) (io.ReadCloser, string, error) { - return nil, "", errBreakerOpen - } - _, _, _ = tracingGate(t, open)("apple-music", hit) - Expect(t.Steps()[0].Outcome).To(Equal(OutcomeSkipped)) - Expect(t.Steps()[0].Detail).To(ContainSubstring("circuit breaker")) - }) - It("never calls the agent in offline mode", func() { t := &chainTrace{} called := false