Fixes histograms becoming empty after loaded from checkpoints

This commit is contained in:
Plamen Kokanov 2025-03-04 08:47:02 +02:00 committed by k8s-infra-cherrypick-robot
parent 200a292f8a
commit d10948211f
2 changed files with 16 additions and 0 deletions

View File

@ -277,6 +277,7 @@ func (h *histogram) LoadFromCheckpoint(checkpoint *vpa_types.HistogramCheckpoint
h.bucketWeight[bucket] += float64(weight) * ratio
}
h.totalWeight += checkpoint.TotalWeight
h.updateMinAndMaxBucket()
return nil
}

View File

@ -264,6 +264,21 @@ func TestHistogramLoadFromCheckpointReturnsErrorOnNilInput(t *testing.T) {
assert.Error(t, err)
}
func TestHistogramIsNotEmptyAfterSavingAndLoadingCheckpointsWithBoundaryValues(t *testing.T) {
histogram := NewHistogram(testHistogramOptions)
histogram.AddSample(1, weightEpsilon, anyTime)
histogram.AddSample(2, (float64(MaxCheckpointWeight)*weightEpsilon - weightEpsilon), anyTime)
assert.False(t, histogram.IsEmpty())
checkpoint, err := histogram.SaveToChekpoint()
assert.NoError(t, err)
newHistogram := NewHistogram(testHistogramOptions)
err = newHistogram.LoadFromCheckpoint(checkpoint)
assert.NoError(t, err)
assert.False(t, newHistogram.IsEmpty())
}
func areUnique(values ...interface{}) bool {
dict := make(map[interface{}]bool)
for i, v := range values {