diff --git a/CHANGELOG.md b/CHANGELOG.md index 623fa8f73..aec464e7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,3 @@ -## 2.18.2 / 2020-06-09 - -* [BUGFIX] TSDB: Fix incorrect query results when using Prometheus with remote reads configured #7361 - ## 2.18.1 / 2020-05-07 * [BUGFIX] TSDB: Fixed snapshot API. #7217 diff --git a/VERSION b/VERSION index 61dc3342f..a36e9b090 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.18.2 +2.18.1 diff --git a/storage/fanout_test.go b/storage/fanout_test.go index a5d04ea8f..cc839b6ed 100644 --- a/storage/fanout_test.go +++ b/storage/fanout_test.go @@ -195,18 +195,10 @@ func TestMergeQuerierWithChainMerger(t *testing.T) { } qs = append(qs, tc.extraQueriers...) - mergedQuerier, _, _ := NewMergeQuerier(qs[0], qs, ChainedSeriesMerge).Select(false, nil) - - // Get all merged series upfront to make sure there are no incorrectly retained shared - // buffers causing bugs. - var mergedSeries []Series - for mergedQuerier.Next() { - mergedSeries = append(mergedSeries, mergedQuerier.At()) - } - testutil.Ok(t, mergedQuerier.Err()) - - for _, actualSeries := range mergedSeries { + merged, _, _ := NewMergeQuerier(qs[0], qs, ChainedSeriesMerge).Select(false, nil) + for merged.Next() { testutil.Assert(t, tc.expected.Next(), "Expected Next() to be true") + actualSeries := merged.At() expectedSeries := tc.expected.At() testutil.Equals(t, expectedSeries.Labels(), actualSeries.Labels()) @@ -215,6 +207,7 @@ func TestMergeQuerierWithChainMerger(t *testing.T) { testutil.Equals(t, expErr, actErr) testutil.Equals(t, expSmpl, actSmpl) } + testutil.Ok(t, merged.Err()) testutil.Assert(t, !tc.expected.Next(), "Expected Next() to be false") }) } diff --git a/storage/generic.go b/storage/generic.go index d23e51a6c..a5a694cb2 100644 --- a/storage/generic.go +++ b/storage/generic.go @@ -108,24 +108,26 @@ func (q *chunkQuerierAdapter) Select(sortSeries bool, hints *SelectHints, matche type seriesMergerAdapter struct { VerticalSeriesMergeFunc + buf []Series } func (a *seriesMergerAdapter) Merge(s ...Labels) Labels { - buf := make([]Series, 0, len(s)) + a.buf = a.buf[:0] for _, ser := range s { - buf = append(buf, ser.(Series)) + a.buf = append(a.buf, ser.(Series)) } - return a.VerticalSeriesMergeFunc(buf...) + return a.VerticalSeriesMergeFunc(a.buf...) } type chunkSeriesMergerAdapter struct { VerticalChunkSeriesMergerFunc + buf []ChunkSeries } func (a *chunkSeriesMergerAdapter) Merge(s ...Labels) Labels { - buf := make([]ChunkSeries, 0, len(s)) + a.buf = a.buf[:0] for _, ser := range s { - buf = append(buf, ser.(ChunkSeries)) + a.buf = append(a.buf, ser.(ChunkSeries)) } - return a.VerticalChunkSeriesMergerFunc(buf...) + return a.VerticalChunkSeriesMergerFunc(a.buf...) }