tsdb: complete TestHistogramCounterResetHeader for integer histograms (#18289)

Signed-off-by: Amarachi Iheanacho <amarachi.iheanacho@siderolabs.com>
This commit is contained in:
Iheanacho Amarachi Sharon 2026-06-02 08:04:42 +01:00 committed by GitHub
parent c0b4c5ef18
commit f9ba49a9b6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 44 additions and 30 deletions

View file

@ -2485,7 +2485,7 @@ func testHeadAppenderV2AppendStaleHistogram(t *testing.T, floatHistogram bool) {
}
func TestHeadAppenderV2_Append_CounterResetHeader(t *testing.T) {
for _, floatHisto := range []bool{true} { // FIXME
for _, floatHisto := range []bool{true, false} {
t.Run(fmt.Sprintf("floatHistogram=%t", floatHisto), func(t *testing.T) {
l := labels.FromStrings("a", "b")
head, _ := newTestHead(t, 1000, compression.None, false)
@ -2536,32 +2536,31 @@ func TestHeadAppenderV2_Append_CounterResetHeader(t *testing.T) {
h := tsdbutil.GenerateTestHistograms(1)[0]
h.PositiveBuckets = []int64{100, 1, 1, 1}
h.NegativeBuckets = []int64{100, 1, 1, 1}
h.Count = 1000
// Count = positive delta-decoded (100+101+102+103=406) + negative (406) + ZeroCount (2) = 814.
h.Count = 814
// First histogram is UnknownCounterReset.
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.UnknownCounterReset)
// Another normal histogram.
h.Count++
// Another normal histogram: increment a bucket and Count consistently.
h.PositiveBuckets[len(h.PositiveBuckets)-1]++
h.Count++ // Count = 815.
appendHistogram(h)
checkExpCounterResetHeader()
// Counter reset via Count.
h.Count--
// Counter reset: decrement the same bucket and Count.
h.PositiveBuckets[len(h.PositiveBuckets)-1]--
h.Count-- // Count = 814.
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Add 2 non-counter reset histogram chunks (each chunk targets 1024 bytes which contains ~500 int histogram
// samples or ~1000 float histogram samples).
numAppend := 2000
if floatHisto {
numAppend = 1000
}
for i := 0; i < numAppend; i++ {
// Add 2 non-counter reset histogram chunks.
ms, _, err := head.getOrCreate(l.Hash(), l, false)
require.NoError(t, err)
for ms.headChunkCount.Load() < 3 {
appendHistogram(h)
}
checkExpCounterResetHeader(chunkenc.NotCounterReset, chunkenc.NotCounterReset)
// Changing schema will cut a new chunk with unknown counter reset.
@ -2577,28 +2576,36 @@ func TestHeadAppenderV2_Append_CounterResetHeader(t *testing.T) {
// Counter reset by removing a positive bucket.
h.PositiveSpans[1].Length--
h.PositiveBuckets = h.PositiveBuckets[1:]
// After removal: positive delta-decoded (1+2+3=6) + negative (406) + ZeroCount (2) = 414.
h.Count = 414
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Counter reset by removing a negative bucket.
h.NegativeSpans[1].Length--
h.NegativeBuckets = h.NegativeBuckets[1:]
// After removal: positive (6) + negative delta-decoded (1+2+3=6) + ZeroCount (2) = 14.
h.Count = 14
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Add 2 non-counter reset histogram chunks. Just to have some non-counter reset chunks in between.
for range 2000 {
for ms.headChunkCount.Load() < 3 {
appendHistogram(h)
}
checkExpCounterResetHeader(chunkenc.NotCounterReset, chunkenc.NotCounterReset)
// Counter reset with counter reset in a positive bucket.
h.PositiveBuckets[len(h.PositiveBuckets)-1]--
// After: positive delta-decoded (1+2+2=5) + negative (6) + ZeroCount (2) = 13.
h.Count = 13
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Counter reset with counter reset in a negative bucket.
h.NegativeBuckets[len(h.NegativeBuckets)-1]--
// After: positive (5) + negative delta-decoded (1+2+2=5) + ZeroCount (2) = 12.
h.Count = 12
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
})

View file

@ -5299,7 +5299,7 @@ func testHistogramStaleSampleHelper(t *testing.T, floatHistogram bool) {
}
func TestHistogramCounterResetHeader(t *testing.T) {
for _, floatHisto := range []bool{true} { // FIXME
for _, floatHisto := range []bool{true, false} {
t.Run(fmt.Sprintf("floatHistogram=%t", floatHisto), func(t *testing.T) {
l := labels.FromStrings("a", "b")
head, _ := newTestHead(t, 1000, compression.None, false)
@ -5350,32 +5350,31 @@ func TestHistogramCounterResetHeader(t *testing.T) {
h := tsdbutil.GenerateTestHistograms(1)[0]
h.PositiveBuckets = []int64{100, 1, 1, 1}
h.NegativeBuckets = []int64{100, 1, 1, 1}
h.Count = 1000
// Count = positive delta-decoded (100+101+102+103=406) + negative (406) + ZeroCount (2) = 814.
h.Count = 814
// First histogram is UnknownCounterReset.
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.UnknownCounterReset)
// Another normal histogram.
h.Count++
// Another normal histogram: increment a bucket and Count consistently.
h.PositiveBuckets[len(h.PositiveBuckets)-1]++
h.Count++ // Count = 815.
appendHistogram(h)
checkExpCounterResetHeader()
// Counter reset via Count.
h.Count--
// Counter reset: decrement the same bucket and Count.
h.PositiveBuckets[len(h.PositiveBuckets)-1]--
h.Count-- // Count = 814.
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Add 2 non-counter reset histogram chunks (each chunk targets 1024 bytes which contains ~500 int histogram
// samples or ~1000 float histogram samples).
numAppend := 2000
if floatHisto {
numAppend = 1000
}
for i := 0; i < numAppend; i++ {
// Add 2 non-counter reset histogram chunks.
ms, _, err := head.getOrCreate(l.Hash(), l, false)
require.NoError(t, err)
for ms.headChunkCount.Load() < 3 {
appendHistogram(h)
}
checkExpCounterResetHeader(chunkenc.NotCounterReset, chunkenc.NotCounterReset)
// Changing schema will cut a new chunk with unknown counter reset.
@ -5391,28 +5390,36 @@ func TestHistogramCounterResetHeader(t *testing.T) {
// Counter reset by removing a positive bucket.
h.PositiveSpans[1].Length--
h.PositiveBuckets = h.PositiveBuckets[1:]
// After removal: positive delta-decoded (1+2+3=6) + negative (406) + ZeroCount (2) = 414.
h.Count = 414
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Counter reset by removing a negative bucket.
h.NegativeSpans[1].Length--
h.NegativeBuckets = h.NegativeBuckets[1:]
// After removal: positive (6) + negative delta-decoded (1+2+3=6) + ZeroCount (2) = 14.
h.Count = 14
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Add 2 non-counter reset histogram chunks. Just to have some non-counter reset chunks in between.
for range 2000 {
for ms.headChunkCount.Load() < 3 {
appendHistogram(h)
}
checkExpCounterResetHeader(chunkenc.NotCounterReset, chunkenc.NotCounterReset)
// Counter reset with counter reset in a positive bucket.
h.PositiveBuckets[len(h.PositiveBuckets)-1]--
// After: positive delta-decoded (1+2+2=5) + negative (6) + ZeroCount (2) = 13.
h.Count = 13
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
// Counter reset with counter reset in a negative bucket.
h.NegativeBuckets[len(h.NegativeBuckets)-1]--
// After: positive (5) + negative delta-decoded (1+2+2=5) + ZeroCount (2) = 12.
h.Count = 12
appendHistogram(h)
checkExpCounterResetHeader(chunkenc.CounterReset)
})