scheduler: remove unused random generator

This commit is contained in:
Hongchao Deng 2016-05-21 11:36:53 -07:00
parent 1ef1906209
commit e2704c9168
5 changed files with 16 additions and 28 deletions

View File

@ -18,7 +18,6 @@ package scheduler
import ( import (
"fmt" "fmt"
"math/rand"
"testing" "testing"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
@ -281,12 +280,11 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
} }
for _, test := range tests { for _, test := range tests {
random := rand.New(rand.NewSource(0))
extenders := []algorithm.SchedulerExtender{} extenders := []algorithm.SchedulerExtender{}
for ii := range test.extenders { for ii := range test.extenders {
extenders = append(extenders, &test.extenders[ii]) extenders = append(extenders, &test.extenders[ii])
} }
scheduler := NewGenericScheduler(schedulertesting.PodsToCache(test.pods), test.predicates, test.prioritizers, extenders, random) scheduler := NewGenericScheduler(schedulertesting.PodsToCache(test.pods), test.predicates, test.prioritizers, extenders)
machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes))) machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes)))
if test.expectsErr { if test.expectsErr {
if err == nil { if err == nil {

View File

@ -20,7 +20,6 @@ package factory
import ( import (
"fmt" "fmt"
"math/rand"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
@ -317,9 +316,7 @@ func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String,
f.Run() f.Run()
r := rand.New(rand.NewSource(time.Now().UnixNano())) algo := scheduler.NewGenericScheduler(f.schedulerCache, predicateFuncs, priorityConfigs, extenders)
algo := scheduler.NewGenericScheduler(f.schedulerCache, predicateFuncs, priorityConfigs, extenders, r)
podBackoff := podBackoff{ podBackoff := podBackoff{
perPodBackoff: map[types.NamespacedName]*backoffEntry{}, perPodBackoff: map[types.NamespacedName]*backoffEntry{},

View File

@ -19,7 +19,6 @@ package scheduler
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"math/rand"
"sort" "sort"
"sync" "sync"
"time" "time"
@ -61,8 +60,7 @@ type genericScheduler struct {
prioritizers []algorithm.PriorityConfig prioritizers []algorithm.PriorityConfig
extenders []algorithm.SchedulerExtender extenders []algorithm.SchedulerExtender
pods algorithm.PodLister pods algorithm.PodLister
random *rand.Rand lastNodeIndexLock sync.Mutex
randomLock sync.Mutex
lastNodeIndex uint64 lastNodeIndex uint64
} }
@ -116,7 +114,7 @@ func (g *genericScheduler) Schedule(pod *api.Pod, nodeLister algorithm.NodeListe
} }
// selectHost takes a prioritized list of nodes and then picks one // selectHost takes a prioritized list of nodes and then picks one
// randomly from the nodes that had the highest score. // in a round-robin manner from the nodes that had the highest score.
func (g *genericScheduler) selectHost(priorityList schedulerapi.HostPriorityList) (string, error) { func (g *genericScheduler) selectHost(priorityList schedulerapi.HostPriorityList) (string, error) {
if len(priorityList) == 0 { if len(priorityList) == 0 {
return "", fmt.Errorf("empty priorityList") return "", fmt.Errorf("empty priorityList")
@ -126,10 +124,10 @@ func (g *genericScheduler) selectHost(priorityList schedulerapi.HostPriorityList
maxScore := priorityList[0].Score maxScore := priorityList[0].Score
firstAfterMaxScore := sort.Search(len(priorityList), func(i int) bool { return priorityList[i].Score < maxScore }) firstAfterMaxScore := sort.Search(len(priorityList), func(i int) bool { return priorityList[i].Score < maxScore })
g.randomLock.Lock() g.lastNodeIndexLock.Lock()
ix := int(g.lastNodeIndex % uint64(firstAfterMaxScore)) ix := int(g.lastNodeIndex % uint64(firstAfterMaxScore))
g.lastNodeIndex++ g.lastNodeIndex++
g.randomLock.Unlock() g.lastNodeIndexLock.Unlock()
return priorityList[ix].Host, nil return priorityList[ix].Host, nil
} }
@ -324,12 +322,11 @@ func EqualPriority(_ *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInf
return result, nil return result, nil
} }
func NewGenericScheduler(cache schedulercache.Cache, predicates map[string]algorithm.FitPredicate, prioritizers []algorithm.PriorityConfig, extenders []algorithm.SchedulerExtender, random *rand.Rand) algorithm.ScheduleAlgorithm { func NewGenericScheduler(cache schedulercache.Cache, predicates map[string]algorithm.FitPredicate, prioritizers []algorithm.PriorityConfig, extenders []algorithm.SchedulerExtender) algorithm.ScheduleAlgorithm {
return &genericScheduler{ return &genericScheduler{
cache: cache, cache: cache,
predicates: predicates, predicates: predicates,
prioritizers: prioritizers, prioritizers: prioritizers,
extenders: extenders, extenders: extenders,
random: random,
} }
} }

View File

@ -19,7 +19,6 @@ package scheduler
import ( import (
"fmt" "fmt"
"math" "math"
"math/rand"
"reflect" "reflect"
"strconv" "strconv"
"testing" "testing"
@ -114,7 +113,7 @@ func makeNodeList(nodeNames []string) api.NodeList {
} }
func TestSelectHost(t *testing.T) { func TestSelectHost(t *testing.T) {
scheduler := genericScheduler{random: rand.New(rand.NewSource(0))} scheduler := genericScheduler{}
tests := []struct { tests := []struct {
list schedulerapi.HostPriorityList list schedulerapi.HostPriorityList
possibleHosts sets.String possibleHosts sets.String
@ -277,7 +276,6 @@ func TestGenericScheduler(t *testing.T) {
}, },
} }
for _, test := range tests { for _, test := range tests {
random := rand.New(rand.NewSource(0))
cache := schedulercache.New(time.Duration(0), wait.NeverStop) cache := schedulercache.New(time.Duration(0), wait.NeverStop)
for _, pod := range test.pods { for _, pod := range test.pods {
cache.AddPod(pod) cache.AddPod(pod)
@ -285,7 +283,7 @@ func TestGenericScheduler(t *testing.T) {
for _, name := range test.nodes { for _, name := range test.nodes {
cache.AddNode(&api.Node{ObjectMeta: api.ObjectMeta{Name: name}}) cache.AddNode(&api.Node{ObjectMeta: api.ObjectMeta{Name: name}})
} }
scheduler := NewGenericScheduler(cache, test.predicates, test.prioritizers, []algorithm.SchedulerExtender{}, random) scheduler := NewGenericScheduler(cache, test.predicates, test.prioritizers, []algorithm.SchedulerExtender{})
machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes))) machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes)))
if test.expectsErr { if test.expectsErr {
if err == nil { if err == nil {

View File

@ -19,7 +19,6 @@ package scheduler
import ( import (
"errors" "errors"
"fmt" "fmt"
"math/rand"
"reflect" "reflect"
"sync" "sync"
"testing" "testing"
@ -218,8 +217,7 @@ func TestSchedulerForgetAssumedPodAfterDelete(t *testing.T) {
cache, cache,
map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}, map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts},
[]algorithm.PriorityConfig{}, []algorithm.PriorityConfig{},
[]algorithm.SchedulerExtender{}, []algorithm.SchedulerExtender{})
rand.New(rand.NewSource(time.Now().UnixNano())))
var gotBinding *api.Binding var gotBinding *api.Binding
c := &Config{ c := &Config{