mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2025-03-21 15:45:01 +00:00
![]() ### Describe Your Changes
Previously, "selector @ another_selector" assumed that
"another_selector" metric is supposed to exist since "start" used in the
query.
If the query was evaluated in the following case (timestamps):
- start - 2, end - 10
- "another_selector" 5,6,7,8,9,10
- "selector" The resulting "at" timestamp would be taken from NaN (as
`int64(NaN * 1000)`), causing a panic or invalid behavior later.
Note that type cast of `NaN` to int64 is also platform-dependent, so
value of `int64(math.NaN() * 1000)` can produce `0` or max int64 on
different platforms and versions of Go.
This commit changes this and checks for the first non-NaN value. This
makes it easier to use for users as series are not always aligned and
returning an error in this case would disallow using this for some time
ranges.
See: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/8444
### Checklist
The following checks are **mandatory**:
- [x] My change adheres [VictoriaMetrics contributing
guidelines](https://docs.victoriametrics.com/contributing/).
---------
Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com>
Signed-off-by: hagen1778 <roman@victoriametrics.com>
Co-authored-by: hagen1778 <roman@victoriametrics.com>
(cherry picked from commit
|
||
---|---|---|
.. | ||
active_queries.go | ||
aggr.go | ||
aggr_incremental.go | ||
aggr_incremental_test.go | ||
aggr_test.go | ||
binary_op.go | ||
eval.go | ||
eval_test.go | ||
exec.go | ||
exec_test.go | ||
memory_limiter.go | ||
memory_limiter_test.go | ||
parse_cache.go | ||
parse_cache_test.go | ||
parse_cache_timing_test.go | ||
parser.go | ||
rollup.go | ||
rollup_result_cache.go | ||
rollup_result_cache_test.go | ||
rollup_test.go | ||
rollup_timing_test.go | ||
timeseries.go | ||
timeseries_test.go | ||
transform.go | ||
transform_test.go | ||
tzdata.go |