@@ -225,7 +225,10 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh
225
225
) {
226
226
log := spanlogger .FromContext (r .ctx )
227
227
228
- adjustedFrom := r .from
228
+ var (
229
+ adjustedFrom = r .from
230
+ adjustedThrough model.Time
231
+ )
229
232
230
233
// NB(owen-d): there should only ever be 1 matcher group passed
231
234
// to this call as we call it separately for different legs
@@ -236,18 +239,30 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh
236
239
}
237
240
238
241
for _ , grp := range grps {
239
- diff := grp .Interval + grp . Offset
242
+ diff := grp .Interval
240
243
241
244
// For instant queries, when start == end,
242
245
// we have a default lookback which we add here
243
- if grp . Interval == 0 {
244
- diff = diff + r .defaultLookback
246
+ if diff == 0 {
247
+ diff = r .defaultLookback
245
248
}
246
249
250
+ diff += grp .Offset
251
+
247
252
// use the oldest adjustedFrom
248
253
if r .from .Add (- diff ).Before (adjustedFrom ) {
249
254
adjustedFrom = r .from .Add (- diff )
250
255
}
256
+
257
+ // use the latest adjustedThrough
258
+ if r .through .Add (- grp .Offset ).After (adjustedThrough ) {
259
+ adjustedThrough = r .through .Add (- grp .Offset )
260
+ }
261
+ }
262
+
263
+ // handle the case where there are no matchers
264
+ if adjustedThrough == 0 {
265
+ adjustedThrough = r .through
251
266
}
252
267
253
268
exprStr := expr .String ()
@@ -256,7 +271,7 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh
256
271
// use the retry handler here to retry transient errors
257
272
resp , err := r .retryNextHandler .Do (r .ctx , & logproto.ShardsRequest {
258
273
From : adjustedFrom ,
259
- Through : r . through ,
274
+ Through : adjustedThrough ,
260
275
Query : expr .String (),
261
276
TargetBytesPerShard : targetBytesPerShard ,
262
277
})
0 commit comments