Skip to content

Commit 5335a21

Browse files
authored
fix(queryrange): properly handle context cancellation in Downstreamer (#16471)
1 parent 8976709 commit 5335a21

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

‎pkg/querier/queryrange/downstreamer.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -195,18 +195,26 @@ func (in instance) For(
195195
}()
196196

197197
var err error
198-
for resp := range ch {
199-
if err != nil {
200-
continue
201-
}
202-
if resp.Err != nil {
203-
err = resp.Err
204-
continue
198+
for {
199+
select {
200+
case <-ctx.Done():
201+
// Return early if the context is canceled
202+
return acc.Result(), ctx.Err()
203+
case resp, ok := <-ch:
204+
if !ok {
205+
// Channel closed, we're done
206+
return acc.Result(), err
207+
}
208+
if err != nil {
209+
continue
210+
}
211+
if resp.Err != nil {
212+
err = resp.Err
213+
continue
214+
}
215+
err = acc.Accumulate(ctx, resp.Res, resp.I)
205216
}
206-
err = acc.Accumulate(ctx, resp.Res, resp.I)
207217
}
208-
209-
return acc.Result(), err
210218
}
211219

212220
// convert to matrix

0 commit comments

Comments
 (0)