From f1a83801df696a9884241e0792c5aa04c830b307 Mon Sep 17 00:00:00 2001 From: Ashwanth Goli Date: Wed, 25 Sep 2024 17:50:02 +0530 Subject: [PATCH 1/3] fix(sharding): offset both from and through in shard request --- pkg/querier/queryrange/shard_resolver.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/querier/queryrange/shard_resolver.go b/pkg/querier/queryrange/shard_resolver.go index 31366d0a0dd76..ebedee39c1b65 100644 --- a/pkg/querier/queryrange/shard_resolver.go +++ b/pkg/querier/queryrange/shard_resolver.go @@ -226,6 +226,7 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh log := spanlogger.FromContext(r.ctx) adjustedFrom := r.from + adjustedThrough := r.through // NB(owen-d): there should only ever be 1 matcher group passed // to this call as we call it separately for different legs @@ -236,18 +237,24 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh } for _, grp := range grps { - diff := grp.Interval + grp.Offset + diff := grp.Interval // For instant queries, when start == end, // we have a default lookback which we add here - if grp.Interval == 0 { - diff = diff + r.defaultLookback + if diff == 0 { + diff = r.defaultLookback } + diff += grp.Offset + // use the oldest adjustedFrom if r.from.Add(-diff).Before(adjustedFrom) { adjustedFrom = r.from.Add(-diff) } + + if r.through.Add(-grp.Offset).After(adjustedThrough) { + adjustedThrough = r.through.Add(-grp.Offset) + } } exprStr := expr.String() @@ -256,7 +263,7 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh // use the retry handler here to retry transient errors resp, err := r.retryNextHandler.Do(r.ctx, &logproto.ShardsRequest{ From: adjustedFrom, - Through: r.through, + Through: adjustedThrough, Query: expr.String(), TargetBytesPerShard: targetBytesPerShard, }) From f91dfa2dbb83bb0e2a866b72f643042251e68f19 Mon Sep 17 00:00:00 2001 From: Ashwanth Goli Date: Wed, 25 Sep 2024 19:00:18 +0530 Subject: [PATCH 2/3] fixup! fix(sharding): offset both from and through in shard request --- pkg/querier/queryrange/shard_resolver.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/querier/queryrange/shard_resolver.go b/pkg/querier/queryrange/shard_resolver.go index ebedee39c1b65..3486c46f3e348 100644 --- a/pkg/querier/queryrange/shard_resolver.go +++ b/pkg/querier/queryrange/shard_resolver.go @@ -225,8 +225,10 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh ) { log := spanlogger.FromContext(r.ctx) - adjustedFrom := r.from - adjustedThrough := r.through + var ( + adjustedFrom = r.from + adjustedThrough model.Time + ) // NB(owen-d): there should only ever be 1 matcher group passed // to this call as we call it separately for different legs @@ -252,6 +254,7 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh adjustedFrom = r.from.Add(-diff) } + // use the latest adjustedThrough if r.through.Add(-grp.Offset).After(adjustedThrough) { adjustedThrough = r.through.Add(-grp.Offset) } From 72a65d4edc0974078f6f23d70a974504e6f6cf9e Mon Sep 17 00:00:00 2001 From: Ashwanth Goli Date: Wed, 25 Sep 2024 19:05:19 +0530 Subject: [PATCH 3/3] fixup! fix(sharding): offset both from and through in shard request --- pkg/querier/queryrange/shard_resolver.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/querier/queryrange/shard_resolver.go b/pkg/querier/queryrange/shard_resolver.go index 3486c46f3e348..4fe444c3bc59b 100644 --- a/pkg/querier/queryrange/shard_resolver.go +++ b/pkg/querier/queryrange/shard_resolver.go @@ -260,6 +260,11 @@ func (r *dynamicShardResolver) ShardingRanges(expr syntax.Expr, targetBytesPerSh } } + // handle the case where there are no matchers + if adjustedThrough == 0 { + adjustedThrough = r.through + } + exprStr := expr.String() // try to get shards for the given expression // if it fails, fallback to linearshards based on stats