diff --git a/storage/fanout.go b/storage/fanout.go index 328287159..3ab994391 100644 --- a/storage/fanout.go +++ b/storage/fanout.go @@ -450,10 +450,10 @@ func (c *mergeIterator) Next() bool { return false } - currt, currv := c.At() + currt, _ := c.At() for len(c.h) > 0 { - nextt, nextv := c.h[0].At() - if nextt != currt || nextv != currv { + nextt, _ := c.h[0].At() + if nextt != currt { break } diff --git a/storage/fanout_test.go b/storage/fanout_test.go index f6298c859..3328673ef 100644 --- a/storage/fanout_test.go +++ b/storage/fanout_test.go @@ -15,6 +15,7 @@ package storage import ( "fmt" + "math" "testing" "github.com/stretchr/testify/require" @@ -97,6 +98,16 @@ func TestMergeSeriesSet(t *testing.T) { newMockSeries(labels.FromStrings("foo", "bar"), []sample{{0, 0}, {1, 1}, {2, 2}, {3, 3}}), ), }, + { + input: []SeriesSet{newMockSeriesSet( + newMockSeries(labels.FromStrings("foo", "bar"), []sample{{0, math.NaN()}}), + ), newMockSeriesSet( + newMockSeries(labels.FromStrings("foo", "bar"), []sample{{0, math.NaN()}}), + )}, + expected: newMockSeriesSet( + newMockSeries(labels.FromStrings("foo", "bar"), []sample{{0, math.NaN()}}), + ), + }, } { merged := NewMergeSeriesSet(tc.input) for merged.Next() { @@ -197,6 +208,10 @@ func drainSamples(iter SeriesIterator) []sample { result := []sample{} for iter.Next() { t, v := iter.At() + // NaNs can't be compared normally, so substitute for another value. + if math.IsNaN(v) { + v = -42 + } result = append(result, sample{t, v}) } return result