diff --git a/vertical-pod-autoscaler/pkg/recommender/util/histogram.go b/vertical-pod-autoscaler/pkg/recommender/util/histogram.go index cd0d360d0f..08eeca55c5 100644 --- a/vertical-pod-autoscaler/pkg/recommender/util/histogram.go +++ b/vertical-pod-autoscaler/pkg/recommender/util/histogram.go @@ -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 } diff --git a/vertical-pod-autoscaler/pkg/recommender/util/histogram_test.go b/vertical-pod-autoscaler/pkg/recommender/util/histogram_test.go index 066ec08487..9ecabba80d 100644 --- a/vertical-pod-autoscaler/pkg/recommender/util/histogram_test.go +++ b/vertical-pod-autoscaler/pkg/recommender/util/histogram_test.go @@ -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 {