diff --git a/plugin/pkg/scheduler/BUILD b/plugin/pkg/scheduler/BUILD index 55a2b4887d4..52055569d3e 100644 --- a/plugin/pkg/scheduler/BUILD +++ b/plugin/pkg/scheduler/BUILD @@ -8,66 +8,24 @@ load( "go_test", ) -go_library( - name = "go_default_library", - srcs = [ - "equivalence_cache.go", - "extender.go", - "generic_scheduler.go", - "scheduler.go", - ], - tags = ["automanaged"], - deps = [ - "//pkg/api/v1:go_default_library", - "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/util/hash:go_default_library", - "//plugin/pkg/scheduler/algorithm:go_default_library", - "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", - "//plugin/pkg/scheduler/api:go_default_library", - "//plugin/pkg/scheduler/metrics:go_default_library", - "//plugin/pkg/scheduler/schedulercache:go_default_library", - "//plugin/pkg/scheduler/util:go_default_library", - "//vendor:github.com/golang/glog", - "//vendor:github.com/golang/groupcache/lru", - "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/util/errors", - "//vendor:k8s.io/apimachinery/pkg/util/net", - "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/apimachinery/pkg/util/wait", - "//vendor:k8s.io/apiserver/pkg/util/trace", - "//vendor:k8s.io/client-go/rest", - "//vendor:k8s.io/client-go/tools/cache", - "//vendor:k8s.io/client-go/tools/record", - "//vendor:k8s.io/client-go/util/workqueue", - ], -) - go_test( name = "go_default_test", - srcs = [ - "extender_test.go", - "generic_scheduler_test.go", - "scheduler_test.go", - ], + srcs = ["scheduler_test.go"], library = ":go_default_library", tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/apis/extensions/v1beta1:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", - "//plugin/pkg/scheduler/algorithm/priorities:go_default_library", - "//plugin/pkg/scheduler/algorithm/priorities/util:go_default_library", - "//plugin/pkg/scheduler/api:go_default_library", + "//plugin/pkg/scheduler/core:go_default_library", "//plugin/pkg/scheduler/schedulercache:go_default_library", "//plugin/pkg/scheduler/testing:go_default_library", "//vendor:k8s.io/apimachinery/pkg/api/resource", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/labels", "//vendor:k8s.io/apimachinery/pkg/util/diff", - "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", @@ -75,6 +33,27 @@ go_test( ], ) +go_library( + name = "go_default_library", + srcs = ["scheduler.go"], + tags = ["automanaged"], + deps = [ + "//pkg/api/v1:go_default_library", + "//pkg/client/clientset_generated/clientset:go_default_library", + "//plugin/pkg/scheduler/algorithm:go_default_library", + "//plugin/pkg/scheduler/api:go_default_library", + "//plugin/pkg/scheduler/metrics:go_default_library", + "//plugin/pkg/scheduler/schedulercache:go_default_library", + "//plugin/pkg/scheduler/util:go_default_library", + "//vendor:github.com/golang/glog", + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", + ], +) + filegroup( name = "package-srcs", srcs = glob(["**"]), @@ -89,6 +68,7 @@ filegroup( "//plugin/pkg/scheduler/algorithm:all-srcs", "//plugin/pkg/scheduler/algorithmprovider:all-srcs", "//plugin/pkg/scheduler/api:all-srcs", + "//plugin/pkg/scheduler/core:all-srcs", "//plugin/pkg/scheduler/factory:all-srcs", "//plugin/pkg/scheduler/metrics:all-srcs", "//plugin/pkg/scheduler/schedulercache:all-srcs", diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/BUILD b/plugin/pkg/scheduler/algorithmprovider/defaults/BUILD index c1c9dc28093..99770b0471b 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/BUILD +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/BUILD @@ -15,10 +15,10 @@ go_library( deps = [ "//pkg/api/v1:go_default_library", "//pkg/cloudprovider/providers/aws:go_default_library", - "//plugin/pkg/scheduler:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", "//plugin/pkg/scheduler/algorithm/priorities:go_default_library", + "//plugin/pkg/scheduler/core:go_default_library", "//plugin/pkg/scheduler/factory:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go index a97da60e788..920c9c56ebc 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go @@ -25,10 +25,10 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/cloudprovider/providers/aws" - "k8s.io/kubernetes/plugin/pkg/scheduler" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/priorities" + "k8s.io/kubernetes/plugin/pkg/scheduler/core" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" "github.com/golang/glog" @@ -100,7 +100,7 @@ func init() { // EqualPriority is a prioritizer function that gives an equal weight of one to all nodes // Register the priority function so that its available // but do not include it as part of the default priorities - factory.RegisterPriorityFunction2("EqualPriority", scheduler.EqualPriorityMap, nil, 1) + factory.RegisterPriorityFunction2("EqualPriority", core.EqualPriorityMap, nil, 1) // ImageLocalityPriority prioritizes nodes based on locality of images requested by a pod. Nodes with larger size // of already-installed packages required by the pod will be preferred over nodes with no already-installed // packages required by the pod or a small total size of already-installed packages required by the pod. diff --git a/plugin/pkg/scheduler/core/BUILD b/plugin/pkg/scheduler/core/BUILD new file mode 100644 index 00000000000..4c82b9ed135 --- /dev/null +++ b/plugin/pkg/scheduler/core/BUILD @@ -0,0 +1,71 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = [ + "extender_test.go", + "generic_scheduler_test.go", + ], + library = ":go_default_library", + tags = ["automanaged"], + deps = [ + "//pkg/api/v1:go_default_library", + "//pkg/apis/extensions/v1beta1:go_default_library", + "//plugin/pkg/scheduler/algorithm:go_default_library", + "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", + "//plugin/pkg/scheduler/algorithm/priorities:go_default_library", + "//plugin/pkg/scheduler/algorithm/priorities/util:go_default_library", + "//plugin/pkg/scheduler/api:go_default_library", + "//plugin/pkg/scheduler/schedulercache:go_default_library", + "//vendor:k8s.io/apimachinery/pkg/api/resource", + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/apimachinery/pkg/util/wait", + ], +) + +go_library( + name = "go_default_library", + srcs = [ + "equivalence_cache.go", + "extender.go", + "generic_scheduler.go", + ], + tags = ["automanaged"], + deps = [ + "//pkg/api/v1:go_default_library", + "//pkg/util/hash:go_default_library", + "//plugin/pkg/scheduler/algorithm:go_default_library", + "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", + "//plugin/pkg/scheduler/api:go_default_library", + "//plugin/pkg/scheduler/schedulercache:go_default_library", + "//vendor:github.com/golang/glog", + "//vendor:github.com/golang/groupcache/lru", + "//vendor:k8s.io/apimachinery/pkg/util/errors", + "//vendor:k8s.io/apimachinery/pkg/util/net", + "//vendor:k8s.io/apiserver/pkg/util/trace", + "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/util/workqueue", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/plugin/pkg/scheduler/equivalence_cache.go b/plugin/pkg/scheduler/core/equivalence_cache.go similarity index 99% rename from plugin/pkg/scheduler/equivalence_cache.go rename to plugin/pkg/scheduler/core/equivalence_cache.go index 1770fb91834..7ea337bf845 100644 --- a/plugin/pkg/scheduler/equivalence_cache.go +++ b/plugin/pkg/scheduler/core/equivalence_cache.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package core import ( "hash/adler32" diff --git a/plugin/pkg/scheduler/extender.go b/plugin/pkg/scheduler/core/extender.go similarity index 99% rename from plugin/pkg/scheduler/extender.go rename to plugin/pkg/scheduler/core/extender.go index dca08567890..b33aae28eb3 100644 --- a/plugin/pkg/scheduler/extender.go +++ b/plugin/pkg/scheduler/core/extender.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package core import ( "bytes" diff --git a/plugin/pkg/scheduler/extender_test.go b/plugin/pkg/scheduler/core/extender_test.go similarity index 99% rename from plugin/pkg/scheduler/extender_test.go rename to plugin/pkg/scheduler/core/extender_test.go index 09ee08aa808..0bcac4bfdc7 100644 --- a/plugin/pkg/scheduler/extender_test.go +++ b/plugin/pkg/scheduler/core/extender_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package core import ( "fmt" diff --git a/plugin/pkg/scheduler/generic_scheduler.go b/plugin/pkg/scheduler/core/generic_scheduler.go similarity index 99% rename from plugin/pkg/scheduler/generic_scheduler.go rename to plugin/pkg/scheduler/core/generic_scheduler.go index a03624c7306..1d6ed49a931 100644 --- a/plugin/pkg/scheduler/generic_scheduler.go +++ b/plugin/pkg/scheduler/core/generic_scheduler.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package core import ( "fmt" diff --git a/plugin/pkg/scheduler/generic_scheduler_test.go b/plugin/pkg/scheduler/core/generic_scheduler_test.go similarity index 99% rename from plugin/pkg/scheduler/generic_scheduler_test.go rename to plugin/pkg/scheduler/core/generic_scheduler_test.go index 97d01a772ac..e29c8a26a7b 100644 --- a/plugin/pkg/scheduler/generic_scheduler_test.go +++ b/plugin/pkg/scheduler/core/generic_scheduler_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package core import ( "fmt" diff --git a/plugin/pkg/scheduler/factory/BUILD b/plugin/pkg/scheduler/factory/BUILD index 8139153508e..9c8dd8013f3 100644 --- a/plugin/pkg/scheduler/factory/BUILD +++ b/plugin/pkg/scheduler/factory/BUILD @@ -27,6 +27,7 @@ go_library( "//plugin/pkg/scheduler/algorithm/priorities:go_default_library", "//plugin/pkg/scheduler/api:go_default_library", "//plugin/pkg/scheduler/api/validation:go_default_library", + "//plugin/pkg/scheduler/core:go_default_library", "//plugin/pkg/scheduler/schedulercache:go_default_library", "//plugin/pkg/scheduler/util:go_default_library", "//vendor:github.com/golang/glog", diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index 86242ba0160..56b81e53b98 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -23,6 +23,7 @@ import ( "strings" "time" + "github.com/golang/glog" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" @@ -33,6 +34,7 @@ import ( genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/pkg/api/v1" + extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/legacylisters" "k8s.io/kubernetes/pkg/controller/informers" @@ -41,9 +43,7 @@ import ( "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" "k8s.io/kubernetes/plugin/pkg/scheduler/api/validation" - - "github.com/golang/glog" - extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" + "k8s.io/kubernetes/plugin/pkg/scheduler/core" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" "k8s.io/kubernetes/plugin/pkg/scheduler/util" ) @@ -102,7 +102,7 @@ type ConfigFactory struct { failureDomains []string // Equivalence class cache - equivalencePodCache *scheduler.EquivalenceCache + equivalencePodCache *core.EquivalenceCache } // NewConfigFactory initializes the default implementation of a Configurator To encourage eventual privatization of the struct type, we only @@ -360,7 +360,7 @@ func (f *ConfigFactory) CreateFromConfig(policy schedulerapi.Policy) (*scheduler if len(policy.ExtenderConfigs) != 0 { for ii := range policy.ExtenderConfigs { glog.V(2).Infof("Creating extender with config %+v", policy.ExtenderConfigs[ii]) - if extender, err := scheduler.NewHTTPExtender(&policy.ExtenderConfigs[ii], policy.APIVersion); err != nil { + if extender, err := core.NewHTTPExtender(&policy.ExtenderConfigs[ii], policy.APIVersion); err != nil { return nil, err } else { extenders = append(extenders, extender) @@ -399,7 +399,7 @@ func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, } f.Run() - algo := scheduler.NewGenericScheduler(f.schedulerCache, predicateFuncs, predicateMetaProducer, priorityConfigs, priorityMetaProducer, extenders) + algo := core.NewGenericScheduler(f.schedulerCache, predicateFuncs, predicateMetaProducer, priorityConfigs, priorityMetaProducer, extenders) podBackoff := util.CreateDefaultPodBackoff() return &scheduler.Config{ SchedulerCache: f.schedulerCache, @@ -594,7 +594,7 @@ func (factory *ConfigFactory) createReplicaSetLW() *cache.ListWatch { func (factory *ConfigFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue *cache.FIFO) func(pod *v1.Pod, err error) { return func(pod *v1.Pod, err error) { - if err == scheduler.ErrNoNodesAvailable { + if err == core.ErrNoNodesAvailable { glog.V(4).Infof("Unable to schedule %v %v: no nodes are registered to the cluster; waiting", pod.Namespace, pod.Name) } else { glog.Errorf("Error scheduling %v %v: %v; retrying", pod.Namespace, pod.Name, err) diff --git a/plugin/pkg/scheduler/scheduler.go b/plugin/pkg/scheduler/scheduler.go index 6d5b33fc78f..f57a026aa89 100644 --- a/plugin/pkg/scheduler/scheduler.go +++ b/plugin/pkg/scheduler/scheduler.go @@ -23,14 +23,13 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" + clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" "k8s.io/kubernetes/plugin/pkg/scheduler/metrics" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" "k8s.io/kubernetes/plugin/pkg/scheduler/util" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "github.com/golang/glog" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/cache" diff --git a/plugin/pkg/scheduler/scheduler_test.go b/plugin/pkg/scheduler/scheduler_test.go index a6d19895ebb..3db3e255f55 100644 --- a/plugin/pkg/scheduler/scheduler_test.go +++ b/plugin/pkg/scheduler/scheduler_test.go @@ -36,6 +36,7 @@ import ( "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/plugin/pkg/scheduler/core" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" schedulertesting "k8s.io/kubernetes/plugin/pkg/scheduler/testing" ) @@ -275,9 +276,9 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) { scheduler.scheduleOne() select { case err := <-errChan: - expectErr := &FitError{ + expectErr := &core.FitError{ Pod: secondPod, - FailedPredicates: FailedPredicateMap{node.Name: []algorithm.PredicateFailureReason{predicates.ErrPodNotFitsHostPorts}}, + FailedPredicates: core.FailedPredicateMap{node.Name: []algorithm.PredicateFailureReason{predicates.ErrPodNotFitsHostPorts}}, } if !reflect.DeepEqual(expectErr, err) { t.Errorf("err want=%v, get=%v", expectErr, err) @@ -446,7 +447,7 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) { } // Create expected failure reasons for all the nodes. Hopefully they will get rolled up into a non-spammy summary. - failedPredicatesMap := FailedPredicateMap{} + failedPredicatesMap := core.FailedPredicateMap{} for _, node := range nodes { failedPredicatesMap[node.Name] = []algorithm.PredicateFailureReason{ predicates.NewInsufficientResourceError(v1.ResourceCPU, 4000, 0, 2000), @@ -459,7 +460,7 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) { scheduler.scheduleOne() select { case err := <-errChan: - expectErr := &FitError{ + expectErr := &core.FitError{ Pod: podWithTooBigResourceRequests, FailedPredicates: failedPredicatesMap, } @@ -477,7 +478,7 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) { // queuedPodStore: pods queued before processing. // scache: scheduler cache that might contain assumed pods. func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache schedulercache.Cache, nodeLister algorithm.FakeNodeLister, predicateMap map[string]algorithm.FitPredicate) (*Scheduler, chan *v1.Binding, chan error) { - algo := NewGenericScheduler( + algo := core.NewGenericScheduler( scache, predicateMap, algorithm.EmptyMetadataProducer, @@ -507,7 +508,7 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache schedulercache. } func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, scache schedulercache.Cache, nodeLister algorithm.FakeNodeLister, predicateMap map[string]algorithm.FitPredicate, stop chan struct{}, bindingTime time.Duration) (*Scheduler, chan *v1.Binding) { - algo := NewGenericScheduler( + algo := core.NewGenericScheduler( scache, predicateMap, algorithm.EmptyMetadataProducer,