From 2141b9edd5a3acf1232b104df76accb8e5f184b2 Mon Sep 17 00:00:00 2001 From: hongshibao Date: Mon, 6 Nov 2017 23:39:05 +0800 Subject: [PATCH] Fix divide by zero issue in calculating spread priority for zones --- .../algorithm/priorities/selector_spreading.go | 5 ++++- .../priorities/selector_spreading_test.go | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/plugin/pkg/scheduler/algorithm/priorities/selector_spreading.go b/plugin/pkg/scheduler/algorithm/priorities/selector_spreading.go index 8e5eb308ba6..721531f7e32 100644 --- a/plugin/pkg/scheduler/algorithm/priorities/selector_spreading.go +++ b/plugin/pkg/scheduler/algorithm/priorities/selector_spreading.go @@ -171,7 +171,10 @@ func (s *SelectorSpread) CalculateSpreadPriority(pod *v1.Pod, nodeNameToInfo map if haveZones { zoneId := utilnode.GetZoneKey(node) if zoneId != "" { - zoneScore := float64(schedulerapi.MaxPriority) * ((maxCountByZone - countsByZone[zoneId]) / maxCountByZone) + zoneScore := float64(schedulerapi.MaxPriority) + if maxCountByZone > 0 { + zoneScore = float64(schedulerapi.MaxPriority) * ((maxCountByZone - countsByZone[zoneId]) / maxCountByZone) + } fScore = (fScore * (1.0 - zoneWeighting)) + (zoneWeighting * zoneScore) } } diff --git a/plugin/pkg/scheduler/algorithm/priorities/selector_spreading_test.go b/plugin/pkg/scheduler/algorithm/priorities/selector_spreading_test.go index 9cef5403a54..bec4afe7808 100644 --- a/plugin/pkg/scheduler/algorithm/priorities/selector_spreading_test.go +++ b/plugin/pkg/scheduler/algorithm/priorities/selector_spreading_test.go @@ -445,6 +445,23 @@ func TestZoneSelectorSpreadPriority(t *testing.T) { }, test: "different services", }, + { + pod: buildPod("", labels1, nil), + pods: []*v1.Pod{ + buildPod(nodeMachine1Zone1, labels2, nil), + buildPod(nodeMachine1Zone2, labels2, nil), + }, + services: []*v1.Service{{Spec: v1.ServiceSpec{Selector: labels1}}}, + expectedList: []schedulerapi.HostPriority{ + {Host: nodeMachine1Zone1, Score: schedulerapi.MaxPriority}, + {Host: nodeMachine1Zone2, Score: schedulerapi.MaxPriority}, + {Host: nodeMachine2Zone2, Score: schedulerapi.MaxPriority}, + {Host: nodeMachine1Zone3, Score: schedulerapi.MaxPriority}, + {Host: nodeMachine2Zone3, Score: schedulerapi.MaxPriority}, + {Host: nodeMachine3Zone3, Score: schedulerapi.MaxPriority}, + }, + test: "two pods, 0 matching", + }, { pod: buildPod("", labels1, nil), pods: []*v1.Pod{