From 21e63cf75a26e41758742e4d15b6353b3bae12e2 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Sat, 28 Jun 2014 14:21:08 -0700 Subject: [PATCH] Move scheduler to own package. --- pkg/{registry => scheduler}/scheduler.go | 42 +++++++++++-------- pkg/{registry => scheduler}/scheduler_test.go | 0 2 files changed, 24 insertions(+), 18 deletions(-) rename pkg/{registry => scheduler}/scheduler.go (74%) rename pkg/{registry => scheduler}/scheduler_test.go (100%) diff --git a/pkg/registry/scheduler.go b/pkg/scheduler/scheduler.go similarity index 74% rename from pkg/registry/scheduler.go rename to pkg/scheduler/scheduler.go index e0518259cb225..23e358fa3fd4a 100644 --- a/pkg/registry/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -24,26 +24,36 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" ) +// Anything that can list minions for a scheduler. +type MinionLister interface { + List() (machines []string, err error) +} + +// Make a MinionLister from a []string +type StringMinionLister []string + +func (s StringMinionLister) List() ([]string, error) { + return []string(s), nil +} + // Scheduler is an interface implemented by things that know how to schedule pods onto machines. type Scheduler interface { - Schedule(api.Pod) (string, error) + Schedule(api.Pod, MinionLister) (string, error) } // RandomScheduler choses machines uniformly at random. type RandomScheduler struct { - machines MinionRegistry - random rand.Rand + random rand.Rand } -func MakeRandomScheduler(machines MinionRegistry, random rand.Rand) Scheduler { +func MakeRandomScheduler(random rand.Rand) Scheduler { return &RandomScheduler{ - machines: machines, - random: random, + random: random, } } -func (s *RandomScheduler) Schedule(pod api.Pod) (string, error) { - machines, err := s.machines.List() +func (s *RandomScheduler) Schedule(pod api.Pod, minionLister MinionLister) (string, error) { + machines, err := minionLister.List() if err != nil { return "", err } @@ -52,19 +62,17 @@ func (s *RandomScheduler) Schedule(pod api.Pod) (string, error) { // RoundRobinScheduler chooses machines in order. type RoundRobinScheduler struct { - machines MinionRegistry currentIndex int } -func MakeRoundRobinScheduler(machines MinionRegistry) Scheduler { +func MakeRoundRobinScheduler() Scheduler { return &RoundRobinScheduler{ - machines: machines, currentIndex: -1, } } -func (s *RoundRobinScheduler) Schedule(pod api.Pod) (string, error) { - machines, err := s.machines.List() +func (s *RoundRobinScheduler) Schedule(pod api.Pod, minionLister MinionLister) (string, error) { + machines, err := minionLister.List() if err != nil { return "", err } @@ -74,14 +82,12 @@ func (s *RoundRobinScheduler) Schedule(pod api.Pod) (string, error) { } type FirstFitScheduler struct { - machines MinionRegistry registry PodRegistry random *rand.Rand } -func MakeFirstFitScheduler(machines MinionRegistry, registry PodRegistry, random *rand.Rand) Scheduler { +func MakeFirstFitScheduler(registry PodRegistry, random *rand.Rand) Scheduler { return &FirstFitScheduler{ - machines: machines, registry: registry, random: random, } @@ -98,8 +104,8 @@ func (s *FirstFitScheduler) containsPort(pod api.Pod, port api.Port) bool { return false } -func (s *FirstFitScheduler) Schedule(pod api.Pod) (string, error) { - machines, err := s.machines.List() +func (s *FirstFitScheduler) Schedule(pod api.Pod, minionLister MinionLister) (string, error) { + machines, err := minionLister.List() if err != nil { return "", err } diff --git a/pkg/registry/scheduler_test.go b/pkg/scheduler/scheduler_test.go similarity index 100% rename from pkg/registry/scheduler_test.go rename to pkg/scheduler/scheduler_test.go