diff --git a/tsdb/chunkenc/float_histogram_test.go b/tsdb/chunkenc/float_histogram_test.go index e99fd1c160..d5d1cc46f3 100644 --- a/tsdb/chunkenc/float_histogram_test.go +++ b/tsdb/chunkenc/float_histogram_test.go @@ -1420,3 +1420,41 @@ func assertFirstFloatHistogramSampleHint(t *testing.T, chunk Chunk, expected his _, v := it.AtFloatHistogram(nil) require.Equal(t, expected, v.CounterResetHint) } + +func TestFloatHistogramEmptyBuckets(t *testing.T) { + h1 := &histogram.FloatHistogram{ + PositiveSpans: []histogram.Span{ + {Offset: -19, Length: 2}, + {Offset: 1, Length: 2}, + }, + PositiveBuckets: []float64{0, 0, 0, 0}, + } + c := NewFloatHistogramChunk() + app, err := c.Appender() + require.NoError(t, err) + _, _, _, err = app.AppendFloatHistogram(nil, 1, h1, false) + require.NoError(t, err) + + h2 := &histogram.FloatHistogram{ + PositiveSpans: []histogram.Span{ + {Offset: -19, Length: 1}, + {Offset: 4, Length: 1}, + {Offset: 3, Length: 1}, + }, + PositiveBuckets: []float64{0, 0, 0}, + } + newC, recoded, _, err := app.AppendFloatHistogram(nil, 2, h2, false) + require.NoError(t, err) + require.True(t, recoded) + require.NotNil(t, newC) + + it := newC.Iterator(nil) + require.Equal(t, ValFloatHistogram, it.Next()) + _, h := it.AtFloatHistogram(nil) + require.NoError(t, h.Validate()) + require.Equal(t, ValFloatHistogram, it.Next()) + _, h = it.AtFloatHistogram(nil) + require.NoError(t, h.Validate()) + require.Equal(t, ValNone, it.Next()) + require.NoError(t, it.Err()) +}