From 958e290c8db22683a5edc152445e607d4026b812 Mon Sep 17 00:00:00 2001 From: David Ashpole Date: Wed, 26 Apr 2017 17:40:30 -0700 Subject: [PATCH] still consider quantity reclaimed even when errors are returned --- pkg/kubelet/eviction/eviction_manager.go | 31 ++++++++++++------------ pkg/kubelet/eviction/types.go | 5 +++- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/pkg/kubelet/eviction/eviction_manager.go b/pkg/kubelet/eviction/eviction_manager.go index 33e7aadf111..6cdb87a5630 100644 --- a/pkg/kubelet/eviction/eviction_manager.go +++ b/pkg/kubelet/eviction/eviction_manager.go @@ -380,23 +380,22 @@ func (m *managerImpl) reclaimNodeLevelResources(resourceToReclaim v1.ResourceNam for _, nodeReclaimFunc := range nodeReclaimFuncs { // attempt to reclaim the pressured resource. reclaimed, err := nodeReclaimFunc() - if err == nil { - // update our local observations based on the amount reported to have been reclaimed. - // note: this is optimistic, other things could have been still consuming the pressured resource in the interim. - signal := resourceToSignal[resourceToReclaim] - value, ok := observations[signal] - if !ok { - glog.Errorf("eviction manager: unable to find value associated with signal %v", signal) - continue - } - value.available.Add(*reclaimed) + if err != nil { + glog.Warningf("eviction manager: unexpected error when attempting to reduce %v pressure: %v", resourceToReclaim, err) + } + // update our local observations based on the amount reported to have been reclaimed. + // note: this is optimistic, other things could have been still consuming the pressured resource in the interim. + signal := resourceToSignal[resourceToReclaim] + value, ok := observations[signal] + if !ok { + glog.Errorf("eviction manager: unable to find value associated with signal %v", signal) + continue + } + value.available.Add(*reclaimed) - // evaluate all current thresholds to see if with adjusted observations, we think we have met min reclaim goals - if len(thresholdsMet(m.thresholdsMet, observations, true)) == 0 { - return true - } - } else { - glog.Errorf("eviction manager: unexpected error when attempting to reduce %v pressure: %v", resourceToReclaim, err) + // evaluate all current thresholds to see if with adjusted observations, we think we have met min reclaim goals + if len(thresholdsMet(m.thresholdsMet, observations, true)) == 0 { + return true } } return false diff --git a/pkg/kubelet/eviction/types.go b/pkg/kubelet/eviction/types.go index 977eb06a264..874480c4dce 100644 --- a/pkg/kubelet/eviction/types.go +++ b/pkg/kubelet/eviction/types.go @@ -76,7 +76,8 @@ type NodeProvider interface { // ImageGC is responsible for performing garbage collection of unused images. type ImageGC interface { - // DeleteUnusedImages deletes unused images and returns the number of bytes freed, or an error. + // DeleteUnusedImages deletes unused images and returns the number of bytes freed, and an error. + // This returns the bytes freed even if an error is returned. DeleteUnusedImages() (int64, error) } @@ -118,6 +119,8 @@ type thresholdsObservedAt map[evictionapi.Threshold]time.Time type nodeConditionsObservedAt map[v1.NodeConditionType]time.Time // nodeReclaimFunc is a function that knows how to reclaim a resource from the node without impacting pods. +// Returns the quantity of resources reclaimed and an error, if applicable. +// nodeReclaimFunc return the resources reclaimed even if an error occurs. type nodeReclaimFunc func() (*resource.Quantity, error) // nodeReclaimFuncs is an ordered list of nodeReclaimFunc