From 947b4cc9c8a6df742f6c5582def4c5f877a70dac Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 22 Apr 2021 09:03:05 +0000 Subject: [PATCH] Break out of Map.Render loop if context cancelled These can be long-running operations, and if the client retries we get the cancelled one running in parallel with the retry, slowing both down and making it likely the next one will time out too. --- render/render.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/render/render.go b/render/render.go index e0da4de53..efeea1fdd 100644 --- a/render/render.go +++ b/render/render.go @@ -113,9 +113,6 @@ func MakeMap(f MapFunc, r Renderer) Renderer { // Render transforms a set of Nodes produces by another Renderer. // using a map function func (m Map) Render(ctx context.Context, rpt report.Report) Nodes { - if ctx.Err() != nil { - return Nodes{} - } span, ctx := opentracing.StartSpanFromContext(ctx, "Map.Render:"+functionName(m.MapFunc)) defer span.Finish() var ( @@ -125,6 +122,9 @@ func (m Map) Render(ctx context.Context, rpt report.Report) Nodes { // Rewrite all the nodes according to the map function for _, inRenderable := range input.Nodes { + if ctx.Err() != nil { // check if cancelled + return Nodes{} + } outRenderable := m.MapFunc(inRenderable) if outRenderable.ID != "" { output.add(inRenderable.ID, outRenderable)