From 6f1d2818c3d1e860ab975d8ec87137b02197d1a0 Mon Sep 17 00:00:00 2001 From: Adam Stephens Date: Tue, 1 Dec 2020 15:23:47 -0500 Subject: [PATCH] query-frontend: inclusive results when start/end are the same Signed-off-by: Adam Stephens --- CHANGELOG.md | 2 +- pkg/queryfrontend/split_by_interval.go | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fa87aa49a..fe5777067f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ We use _breaking :warning:_ to mark changes that are not backward compatible (re ### Fixed -- +- [#3527](https://github.com/thanos-io/thanos/pull/3527) Query Frontend: Fix query_range behavior when start/end times are the same ### Changed diff --git a/pkg/queryfrontend/split_by_interval.go b/pkg/queryfrontend/split_by_interval.go index 22b1d51059..6938f8784e 100644 --- a/pkg/queryfrontend/split_by_interval.go +++ b/pkg/queryfrontend/split_by_interval.go @@ -68,13 +68,17 @@ func (s splitByInterval) Do(ctx context.Context, r queryrange.Request) (queryran func splitQuery(r queryrange.Request, interval time.Duration) []queryrange.Request { var reqs []queryrange.Request if _, ok := r.(*ThanosQueryRangeRequest); ok { - for start := r.GetStart(); start < r.GetEnd(); start = nextIntervalBoundary(start, r.GetStep(), interval) + r.GetStep() { - end := nextIntervalBoundary(start, r.GetStep(), interval) - if end+r.GetStep() >= r.GetEnd() { - end = r.GetEnd() + if start := r.GetStart(); start == r.GetEnd() { + reqs = append(reqs, r.WithStartEnd(start, start)) + } else { + for ; start < r.GetEnd(); start = nextIntervalBoundary(start, r.GetStep(), interval) + r.GetStep() { + end := nextIntervalBoundary(start, r.GetStep(), interval) + if end+r.GetStep() >= r.GetEnd() { + end = r.GetEnd() + } + + reqs = append(reqs, r.WithStartEnd(start, end)) } - - reqs = append(reqs, r.WithStartEnd(start, end)) } } else { dur := int64(interval / time.Millisecond)