Skip to content

Commit 8b2173e

Browse files
authored
Merge pull request kubernetes#2893 from aleksandra-malinowska/delta-snapshot-24
Minor cleanups in scale-down
2 parents 975892c + 14c5ca4 commit 8b2173e

File tree

4 files changed

+23
-19
lines changed

4 files changed

+23
-19
lines changed

cluster-autoscaler/core/scale_down.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ func (sd *ScaleDown) UpdateUnneededNodes(
465465
klog.V(4).Infof("Node %s - %s utilization %f", node.Name, utilInfo.ResourceName, utilInfo.Utilization)
466466
utilizationMap[node.Name] = utilInfo
467467

468-
if !sd.isNodeBelowUtilzationThreshold(node, utilInfo) {
468+
if !sd.isNodeBelowUtilizationThreshold(node, utilInfo) {
469469
klog.V(4).Infof("Node %s is not suitable for removal - %s utilization too big (%f)", node.Name, utilInfo.ResourceName, utilInfo.Utilization)
470470
sd.addUnremovableNodeReason(node, simulator.NotUnderutilized)
471471
continue
@@ -600,8 +600,8 @@ func (sd *ScaleDown) UpdateUnneededNodes(
600600
return nil
601601
}
602602

603-
// isNodeBelowUtilzationThreshold determintes if a given node utilization is blow threshold.
604-
func (sd *ScaleDown) isNodeBelowUtilzationThreshold(node *apiv1.Node, utilInfo simulator.UtilizationInfo) bool {
603+
// isNodeBelowUtilizationThreshold determines if a given node utilization is below threshold.
604+
func (sd *ScaleDown) isNodeBelowUtilizationThreshold(node *apiv1.Node, utilInfo simulator.UtilizationInfo) bool {
605605
if gpu.NodeHasGpu(sd.context.CloudProvider.GPULabel(), node) {
606606
if utilInfo.Utilization >= sd.context.ScaleDownGpuUtilizationThreshold {
607607
return false
@@ -736,7 +736,10 @@ func (sd *ScaleDown) SoftTaintUnneededNodes(allNodes []*apiv1.Node) (errors []er
736736

737737
// TryToScaleDown tries to scale down the cluster. It returns a result inside a ScaleDownStatus indicating if any node was
738738
// removed and error if such occurred.
739-
func (sd *ScaleDown) TryToScaleDown(pdbs []*policyv1.PodDisruptionBudget, currentTime time.Time) (*status.ScaleDownStatus, errors.AutoscalerError) {
739+
func (sd *ScaleDown) TryToScaleDown(
740+
currentTime time.Time,
741+
pdbs []*policyv1.PodDisruptionBudget,
742+
) (*status.ScaleDownStatus, errors.AutoscalerError) {
740743

741744
scaleDownStatus := &status.ScaleDownStatus{NodeDeleteResults: sd.nodeDeletionTracker.GetAndClearNodeDeleteResults()}
742745
nodeDeletionDuration := time.Duration(0)

cluster-autoscaler/core/scale_down_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ func TestScaleDown(t *testing.T) {
977977
simulator.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, nodes, []*apiv1.Pod{p1, p2})
978978
autoscalererr = scaleDown.UpdateUnneededNodes(nodes, nodes, time.Now().Add(-5*time.Minute), nil)
979979
assert.NoError(t, autoscalererr)
980-
scaleDownStatus, err := scaleDown.TryToScaleDown(nil, time.Now())
980+
scaleDownStatus, err := scaleDown.TryToScaleDown(time.Now(), nil)
981981
waitForDeleteToFinish(t, scaleDown)
982982
assert.NoError(t, err)
983983
assert.Equal(t, status.ScaleDownNodeDeleteStarted, scaleDownStatus.Result)
@@ -1231,7 +1231,7 @@ func simpleScaleDownEmpty(t *testing.T, config *scaleTestConfig) {
12311231
simulator.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, nodes, []*apiv1.Pod{})
12321232
autoscalererr = scaleDown.UpdateUnneededNodes(nodes, nodes, time.Now().Add(-5*time.Minute), nil)
12331233
assert.NoError(t, autoscalererr)
1234-
scaleDownStatus, err := scaleDown.TryToScaleDown(nil, time.Now())
1234+
scaleDownStatus, err := scaleDown.TryToScaleDown(time.Now(), nil)
12351235
assert.False(t, scaleDown.nodeDeletionTracker.IsNonEmptyNodeDeleteInProgress())
12361236

12371237
assert.NoError(t, err)
@@ -1317,7 +1317,7 @@ func TestNoScaleDownUnready(t *testing.T) {
13171317
simulator.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, nodes, []*apiv1.Pod{p2})
13181318
autoscalererr = scaleDown.UpdateUnneededNodes(nodes, nodes, time.Now().Add(-5*time.Minute), nil)
13191319
assert.NoError(t, autoscalererr)
1320-
scaleDownStatus, err := scaleDown.TryToScaleDown(nil, time.Now())
1320+
scaleDownStatus, err := scaleDown.TryToScaleDown(time.Now(), nil)
13211321
waitForDeleteToFinish(t, scaleDown)
13221322

13231323
assert.NoError(t, err)
@@ -1340,7 +1340,7 @@ func TestNoScaleDownUnready(t *testing.T) {
13401340
simulator.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, nodes, []*apiv1.Pod{p2})
13411341
autoscalererr = scaleDown.UpdateUnneededNodes(nodes, nodes, time.Now().Add(-2*time.Hour), nil)
13421342
assert.NoError(t, autoscalererr)
1343-
scaleDownStatus, err = scaleDown.TryToScaleDown(nil, time.Now())
1343+
scaleDownStatus, err = scaleDown.TryToScaleDown(time.Now(), nil)
13441344
waitForDeleteToFinish(t, scaleDown)
13451345

13461346
assert.NoError(t, err)
@@ -1427,7 +1427,7 @@ func TestScaleDownNoMove(t *testing.T) {
14271427
simulator.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, nodes, []*apiv1.Pod{p1, p2})
14281428
autoscalererr = scaleDown.UpdateUnneededNodes(nodes, nodes, time.Now().Add(-5*time.Minute), nil)
14291429
assert.NoError(t, autoscalererr)
1430-
scaleDownStatus, err := scaleDown.TryToScaleDown(nil, time.Now())
1430+
scaleDownStatus, err := scaleDown.TryToScaleDown(time.Now(), nil)
14311431
waitForDeleteToFinish(t, scaleDown)
14321432

14331433
assert.NoError(t, err)

cluster-autoscaler/core/static_autoscaler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ func (a *StaticAutoscaler) RunOnce(currentTime time.Time) errors.AutoscalerError
505505

506506
scaleDownStart := time.Now()
507507
metrics.UpdateLastTime(metrics.ScaleDown, scaleDownStart)
508-
scaleDownStatus, typedErr := scaleDown.TryToScaleDown(pdbs, currentTime)
508+
scaleDownStatus, typedErr := scaleDown.TryToScaleDown(currentTime, pdbs)
509509
metrics.UpdateDurationFromStart(metrics.ScaleDown, scaleDownStart)
510510

511511
scaleDownStatus.RemovedNodeGroups = removedNodeGroups

cluster-autoscaler/simulator/cluster.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -278,14 +278,14 @@ func calculateUtilizationOfResource(node *apiv1.Node, nodeInfo *schedulernodeinf
278278
}
279279

280280
func findPlaceFor(removedNode string, pods []*apiv1.Pod, nodes map[string]bool,
281-
clusterSnaphost ClusterSnapshot, predicateChecker PredicateChecker, oldHints map[string]string, newHints map[string]string, usageTracker *UsageTracker,
281+
clusterSnapshot ClusterSnapshot, predicateChecker PredicateChecker, oldHints map[string]string, newHints map[string]string, usageTracker *UsageTracker,
282282
timestamp time.Time) error {
283283

284-
if err := clusterSnaphost.Fork(); err != nil {
284+
if err := clusterSnapshot.Fork(); err != nil {
285285
return err
286286
}
287287
defer func() {
288-
err := clusterSnaphost.Revert()
288+
err := clusterSnapshot.Revert()
289289
if err != nil {
290290
klog.Fatalf("Got error when calling ClusterSnapshot.Revert(); %v", err)
291291
}
@@ -298,13 +298,13 @@ func findPlaceFor(removedNode string, pods []*apiv1.Pod, nodes map[string]bool,
298298
loggingQuota := glogx.PodsLoggingQuota()
299299

300300
tryNodeForPod := func(nodename string, pod *apiv1.Pod) bool {
301-
if err := predicateChecker.CheckPredicates(clusterSnaphost, pod, nodename); err != nil {
301+
if err := predicateChecker.CheckPredicates(clusterSnapshot, pod, nodename); err != nil {
302302
glogx.V(4).UpTo(loggingQuota).Infof("Evaluation %s for %s/%s -> %v", nodename, pod.Namespace, pod.Name, err.VerboseMessage())
303303
return false
304304
}
305305

306306
klog.V(4).Infof("Pod %s/%s can be moved to %s", pod.Namespace, pod.Name, nodename)
307-
if err := clusterSnaphost.AddPod(pod, nodename); err != nil {
307+
if err := clusterSnapshot.AddPod(pod, nodename); err != nil {
308308
klog.Errorf("Simulating scheduling of %s/%s to %s return error; %v", pod.Namespace, pod.Name, nodename, err)
309309
return false
310310
}
@@ -314,9 +314,9 @@ func findPlaceFor(removedNode string, pods []*apiv1.Pod, nodes map[string]bool,
314314

315315
pods = tpu.ClearTPURequests(pods)
316316

317-
// remove pods from clusterSnaphot first
317+
// remove pods from clusterSnapshot first
318318
for _, pod := range pods {
319-
if err := clusterSnaphost.RemovePod(pod.Namespace, pod.Name, removedNode); err != nil {
319+
if err := clusterSnapshot.RemovePod(pod.Namespace, pod.Name, removedNode); err != nil {
320320
// just log error
321321
klog.Errorf("Simulating removal of %s/%s return error; %v", pod.Namespace, pod.Name, err)
322322
}
@@ -329,17 +329,18 @@ func findPlaceFor(removedNode string, pods []*apiv1.Pod, nodes map[string]bool,
329329

330330
foundPlace := false
331331
targetNode := ""
332+
332333
loggingQuota.Reset()
333334

334335
klog.V(5).Infof("Looking for place for %s/%s", pod.Namespace, pod.Name)
335336

336-
hintedNode, hasHint := oldHints[podKey(pod)]
337-
if hasHint {
337+
if hintedNode, hasHint := oldHints[podKey(pod)]; hasHint {
338338
if hintedNode != removedNode && tryNodeForPod(hintedNode, pod) {
339339
foundPlace = true
340340
targetNode = hintedNode
341341
}
342342
}
343+
343344
if !foundPlace {
344345
for nodeName := range nodes {
345346
if nodeName == removedNode {

0 commit comments

Comments
 (0)