fix(querier): use most specific timerange available (#90540)

* fix(querier): use most specific timerange available

* return zero values
pull/90550/head
Jean-Philippe Quéméner 10 months ago committed by GitHub
parent 9b7e9d992b
commit 283280f329
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 23
      pkg/registry/apis/query/parser.go
  2. 55
      pkg/registry/apis/query/parser_test.go

@ -70,14 +70,6 @@ func (p *queryParser) parseRequest(ctx context.Context, input *query.QueryDataRe
RefIDTypes: make(map[string]string, len(input.Queries)),
}
// Ensure a valid time range
if input.From == "" {
input.From = "now-6h"
}
if input.To == "" {
input.To = "now"
}
for _, q := range input.Queries {
_, found := queryRefIDs[q.RefID]
if found {
@ -123,7 +115,7 @@ func (p *queryParser) parseRequest(ctx context.Context, input *query.QueryDataRe
PluginId: ds.Type,
UID: ds.UID,
Request: &data.QueryDataRequest{
TimeRange: input.TimeRange,
TimeRange: getTimeRangeForQuery(&input.TimeRange, q.TimeRange),
Debug: input.Debug,
// no queries
},
@ -189,6 +181,19 @@ func (p *queryParser) parseRequest(ctx context.Context, input *query.QueryDataRe
return rsp, nil
}
func getTimeRangeForQuery(parentTimerange, queryTimerange *data.TimeRange) data.TimeRange {
if queryTimerange != nil && queryTimerange.From != "" && queryTimerange.To != "" {
return *queryTimerange
}
if parentTimerange != nil && parentTimerange.To != "" && parentTimerange.From != "" {
return *parentTimerange
}
return data.TimeRange{
From: "0",
To: "0",
}
}
func (p *queryParser) getValidDataSourceRef(ctx context.Context, ds *data.DataSourceRef, id int64) (*data.DataSourceRef, error) {
if ds == nil {
if id == 0 {

@ -45,7 +45,7 @@ func TestQuerySplitting(t *testing.T) {
require.Empty(t, split.Requests)
})
t.Run("applies default time range", func(t *testing.T) {
t.Run("applies zero time range if time range is missing", func(t *testing.T) {
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
QueryDataRequest: data.QueryDataRequest{
TimeRange: data.TimeRange{}, // missing
@ -62,10 +62,61 @@ func TestQuerySplitting(t *testing.T) {
})
require.NoError(t, err)
require.Len(t, split.Requests, 1)
require.Equal(t, "now-6h", split.Requests[0].Request.From)
require.Equal(t, "0", split.Requests[0].Request.From)
require.Equal(t, "0", split.Requests[0].Request.To)
})
t.Run("applies query time range if present", func(t *testing.T) {
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
QueryDataRequest: data.QueryDataRequest{
TimeRange: data.TimeRange{}, // missing
Queries: []data.DataQuery{{
CommonQueryProperties: data.CommonQueryProperties{
RefID: "A",
Datasource: &data.DataSourceRef{
Type: "x",
UID: "abc",
},
TimeRange: &data.TimeRange{
From: "now-1d",
To: "now",
},
},
}},
},
})
require.NoError(t, err)
require.Len(t, split.Requests, 1)
require.Equal(t, "now-1d", split.Requests[0].Request.From)
require.Equal(t, "now", split.Requests[0].Request.To)
})
t.Run("applies query time range if all time ranges are present", func(t *testing.T) {
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
QueryDataRequest: data.QueryDataRequest{
TimeRange: data.TimeRange{
From: "now-1h",
To: "now",
},
Queries: []data.DataQuery{{
CommonQueryProperties: data.CommonQueryProperties{
RefID: "A",
Datasource: &data.DataSourceRef{
Type: "x",
UID: "abc",
},
TimeRange: &data.TimeRange{
From: "now-1d",
To: "now",
},
},
}},
},
})
require.NoError(t, err)
require.Len(t, split.Requests, 1)
require.Equal(t, "now-1d", split.Requests[0].Request.From)
require.Equal(t, "now", split.Requests[0].Request.To)
})
t.Run("verify tests", func(t *testing.T) {
files, err := os.ReadDir("testdata")
require.NoError(t, err)

Loading…
Cancel
Save