Merge pull request #15970 from charleskorn/charleskorn/zero-length-range
promql: fix behaviour of range vector selectors with 0 length range
This commit is contained in:
		
						commit
						c9320da61e
					
				|  | @ -2357,6 +2357,11 @@ func (ev *evaluator) matrixIterSlice( | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if mint == maxt { | ||||||
|  | 		// Empty range: return the empty slices.
 | ||||||
|  | 		return floats, histograms | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	soughtValueType := it.Seek(maxt) | 	soughtValueType := it.Seek(maxt) | ||||||
| 	if soughtValueType == chunkenc.ValNone { | 	if soughtValueType == chunkenc.ValNone { | ||||||
| 		if it.Err() != nil { | 		if it.Err() != nil { | ||||||
|  |  | ||||||
|  | @ -1900,6 +1900,15 @@ func TestSubquerySelector(t *testing.T) { | ||||||
| 					}, | 					}, | ||||||
| 					Start: time.Unix(35, 0), | 					Start: time.Unix(35, 0), | ||||||
| 				}, | 				}, | ||||||
|  | 				{ | ||||||
|  | 					Query: "metric[0:10s]", | ||||||
|  | 					Result: promql.Result{ | ||||||
|  | 						nil, | ||||||
|  | 						promql.Matrix{}, | ||||||
|  | 						nil, | ||||||
|  | 					}, | ||||||
|  | 					Start: time.Unix(10, 0), | ||||||
|  | 				}, | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
|  | @ -3199,6 +3208,7 @@ func TestInstantQueryWithRangeVectorSelector(t *testing.T) { | ||||||
| 		load 1m | 		load 1m | ||||||
| 			some_metric{env="1"} 0+1x4 | 			some_metric{env="1"} 0+1x4 | ||||||
| 			some_metric{env="2"} 0+2x4 | 			some_metric{env="2"} 0+2x4 | ||||||
|  | 			some_metric{env="3"} {{count:0}}+{{count:1}}x4 | ||||||
| 			some_metric_with_stale_marker 0 1 stale 3 | 			some_metric_with_stale_marker 0 1 stale 3 | ||||||
| 	`) | 	`) | ||||||
| 	t.Cleanup(func() { require.NoError(t, storage.Close()) }) | 	t.Cleanup(func() { require.NoError(t, storage.Close()) }) | ||||||
|  | @ -3226,6 +3236,13 @@ func TestInstantQueryWithRangeVectorSelector(t *testing.T) { | ||||||
| 						{T: timestamp.FromTime(baseT.Add(2 * time.Minute)), F: 4}, | 						{T: timestamp.FromTime(baseT.Add(2 * time.Minute)), F: 4}, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
|  | 				{ | ||||||
|  | 					Metric: labels.FromStrings("__name__", "some_metric", "env", "3"), | ||||||
|  | 					Histograms: []promql.HPoint{ | ||||||
|  | 						{T: timestamp.FromTime(baseT.Add(time.Minute)), H: &histogram.FloatHistogram{Count: 1, CounterResetHint: histogram.NotCounterReset}}, | ||||||
|  | 						{T: timestamp.FromTime(baseT.Add(2 * time.Minute)), H: &histogram.FloatHistogram{Count: 2, CounterResetHint: histogram.NotCounterReset}}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 		"matches no series": { | 		"matches no series": { | ||||||
|  | @ -3251,6 +3268,11 @@ func TestInstantQueryWithRangeVectorSelector(t *testing.T) { | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
|  | 		"matches series but range is 0": { | ||||||
|  | 			expr:     "some_metric[0]", | ||||||
|  | 			ts:       baseT.Add(2 * time.Minute), | ||||||
|  | 			expected: promql.Matrix{}, | ||||||
|  | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for name, testCase := range testCases { | 	for name, testCase := range testCases { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue