From e6fa568ad40e46a739ad8dcd9fe1590902001140 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Fri, 10 Oct 2014 13:49:09 -0700 Subject: [PATCH] Switch away from the static node info --- pkg/client/client.go | 6 ++++++ pkg/scheduler/predicates.go | 11 ++++++++++- plugin/pkg/scheduler/factory/factory.go | 7 +------ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/pkg/client/client.go b/pkg/client/client.go index 80ecdfa0a38..e4a0c49c39a 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -291,3 +291,9 @@ func (c *Client) ListMinions() (result *api.MinionList, err error) { err = c.Get().Path("minions").Do().Into(result) return } + +func (c *Client) GetMinion(id string) (result *api.Minion, err error) { + result = &api.Minion{} + err = c.Get().Path("minions").Path(id).Do().Into(result) + return +} diff --git a/pkg/scheduler/predicates.go b/pkg/scheduler/predicates.go index 3b4e881f0fd..74628af4b84 100644 --- a/pkg/scheduler/predicates.go +++ b/pkg/scheduler/predicates.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/GoogleCloudPlatform/kubernetes/pkg/api" + "github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/resources" "github.com/golang/glog" @@ -39,7 +40,15 @@ func (nodes StaticNodeInfo) GetNodeInfo(nodeID string) (*api.Minion, error) { return &nodes.Items[ix], nil } } - return nil, fmt.Errorf("failed to find node: %s", nodeID) + return nil, fmt.Errorf("failed to find node: %s, %#v", nodeID, nodes) +} + +type ClientNodeInfo struct { + *client.Client +} + +func (nodes ClientNodeInfo) GetNodeInfo(nodeID string) (*api.Minion, error) { + return nodes.GetMinion(nodeID) } type ResourceFit struct { diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index f229ecc1c9e..3a709d60b33 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -64,17 +64,12 @@ func (factory *ConfigFactory) Create() (*scheduler.Config, error) { r := rand.New(rand.NewSource(time.Now().UnixNano())) - // TODO: remove this construction-time listing. - nodes, err := factory.Client.ListMinions() - if err != nil { - return nil, err - } algo := algorithm.NewGenericScheduler( []algorithm.FitPredicate{ // Fit is defined based on the absence of port conflicts. algorithm.PodFitsPorts, // Fit is determined by resource availability - algorithm.NewResourceFitPredicate(algorithm.StaticNodeInfo{nodes}), + algorithm.NewResourceFitPredicate(algorithm.ClientNodeInfo{factory.Client}), }, // All nodes where things fit are equally likely (Random) algorithm.EqualPriority,