Merge pull request #5715 from kisieland/revert-estimator-expansion

Revert "Add new method 'ReachedLimit' to EstimationLimiter"
This commit is contained in:
Kubernetes Prow Robot 2023-04-28 02:04:17 -07:00 committed by GitHub
commit f87dbe5fc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 27 deletions

View File

@ -72,9 +72,6 @@ type EstimationLimiter interface {
// There is no requirement for the Estimator to stop calculations, it's // There is no requirement for the Estimator to stop calculations, it's
// just not expected to add any more nodes. // just not expected to add any more nodes.
PermissionToAddNode() bool PermissionToAddNode() bool
// ReachedLimit returns true if the limiter blocked addition of the new node.
// Otherwise returns false.
ReachedLimit() bool
} }
// EstimationPodOrderer is an interface used to determine the order of the pods // EstimationPodOrderer is an interface used to determine the order of the pods

View File

@ -25,17 +25,15 @@ import (
) )
type thresholdBasedEstimationLimiter struct { type thresholdBasedEstimationLimiter struct {
maxDuration time.Duration maxDuration time.Duration
maxNodes int maxNodes int
nodes int nodes int
start time.Time start time.Time
reachedLimit bool
} }
func (tbel *thresholdBasedEstimationLimiter) StartEstimation([]*apiv1.Pod, cloudprovider.NodeGroup) { func (tbel *thresholdBasedEstimationLimiter) StartEstimation([]*apiv1.Pod, cloudprovider.NodeGroup) {
tbel.start = time.Now() tbel.start = time.Now()
tbel.nodes = 0 tbel.nodes = 0
tbel.reachedLimit = false
} }
func (*thresholdBasedEstimationLimiter) EndEstimation() {} func (*thresholdBasedEstimationLimiter) EndEstimation() {}
@ -43,23 +41,17 @@ func (*thresholdBasedEstimationLimiter) EndEstimation() {}
func (tbel *thresholdBasedEstimationLimiter) PermissionToAddNode() bool { func (tbel *thresholdBasedEstimationLimiter) PermissionToAddNode() bool {
if tbel.maxNodes > 0 && tbel.nodes >= tbel.maxNodes { if tbel.maxNodes > 0 && tbel.nodes >= tbel.maxNodes {
klog.V(4).Infof("Capping binpacking after exceeding threshold of %d nodes", tbel.maxNodes) klog.V(4).Infof("Capping binpacking after exceeding threshold of %d nodes", tbel.maxNodes)
tbel.reachedLimit = true
return false return false
} }
timeDefined := tbel.maxDuration > 0 && tbel.start != time.Time{} timeDefined := tbel.maxDuration > 0 && tbel.start != time.Time{}
if timeDefined && time.Now().After(tbel.start.Add(tbel.maxDuration)) { if timeDefined && time.Now().After(tbel.start.Add(tbel.maxDuration)) {
klog.V(4).Infof("Capping binpacking after exceeding max duration of %v", tbel.maxDuration) klog.V(4).Infof("Capping binpacking after exceeding max duration of %v", tbel.maxDuration)
tbel.reachedLimit = true
return false return false
} }
tbel.nodes++ tbel.nodes++
return true return true
} }
func (tbel *thresholdBasedEstimationLimiter) ReachedLimit() bool {
return tbel.reachedLimit
}
// NewThresholdBasedEstimationLimiter returns an EstimationLimiter that will prevent estimation // NewThresholdBasedEstimationLimiter returns an EstimationLimiter that will prevent estimation
// after either a node count- of time-based threshold is reached. This is meant to prevent cases // after either a node count- of time-based threshold is reached. This is meant to prevent cases
// where binpacking of hundreds or thousands of nodes takes extremely long time rendering CA // where binpacking of hundreds or thousands of nodes takes extremely long time rendering CA

View File

@ -42,13 +42,12 @@ func resetLimiter(t *testing.T, l EstimationLimiter) {
func TestThresholdBasedLimiter(t *testing.T) { func TestThresholdBasedLimiter(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
maxNodes int maxNodes int
maxDuration time.Duration maxDuration time.Duration
startDelta time.Duration startDelta time.Duration
operations []limiterOperation operations []limiterOperation
expectNodeCount int expectNodeCount int
expectedReachedLimit bool
}{ }{
{ {
name: "no limiting happens", name: "no limiting happens",
@ -69,8 +68,7 @@ func TestThresholdBasedLimiter(t *testing.T) {
expectDeny, expectDeny,
expectDeny, expectDeny,
}, },
expectNodeCount: 0, expectNodeCount: 0,
expectedReachedLimit: true,
}, },
{ {
name: "sequence of additions works until the threshold is hit", name: "sequence of additions works until the threshold is hit",
@ -81,8 +79,7 @@ func TestThresholdBasedLimiter(t *testing.T) {
expectAllow, expectAllow,
expectDeny, expectDeny,
}, },
expectNodeCount: 3, expectNodeCount: 3,
expectedReachedLimit: true,
}, },
{ {
name: "node counter is reset", name: "node counter is reset",
@ -126,7 +123,6 @@ func TestThresholdBasedLimiter(t *testing.T) {
op(t, limiter) op(t, limiter)
} }
assert.Equal(t, tc.expectNodeCount, limiter.nodes) assert.Equal(t, tc.expectNodeCount, limiter.nodes)
assert.Equal(t, tc.expectedReachedLimit, limiter.reachedLimit)
limiter.EndEstimation() limiter.EndEstimation()
}) })
} }