Skip to content

Commit af88acc

Browse files
authored
Merge pull request kubernetes#82704 from ahg-g/ahg-default-registry
Resolved cycle dependency in framework plugins registration
2 parents c2a3f0b + 3174d9c commit af88acc

File tree

19 files changed

+164
-34
lines changed

19 files changed

+164
-34
lines changed

cmd/kube-scheduler/app/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ go_library(
1616
"//pkg/scheduler:go_default_library",
1717
"//pkg/scheduler/algorithmprovider:go_default_library",
1818
"//pkg/scheduler/apis/config:go_default_library",
19+
"//pkg/scheduler/framework/plugins:go_default_library",
1920
"//pkg/scheduler/framework/v1alpha1:go_default_library",
2021
"//pkg/scheduler/metrics:go_default_library",
2122
"//pkg/util/configz:go_default_library",

cmd/kube-scheduler/app/server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
"k8s.io/kubernetes/pkg/scheduler"
5050
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
5151
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
52+
plugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins"
5253
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
5354
"k8s.io/kubernetes/pkg/scheduler/metrics"
5455
"k8s.io/kubernetes/pkg/util/configz"
@@ -158,7 +159,7 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}, regis
158159
// To help debugging, immediately log version
159160
klog.V(1).Infof("Starting Kubernetes Scheduler version %+v", version.Get())
160161

161-
registry := framework.NewRegistry()
162+
registry := plugins.NewDefaultRegistry()
162163
for _, option := range registryOptions {
163164
if err := option(registry); err != nil {
164165
return err

pkg/scheduler/factory/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ go_test(
6464
"//pkg/scheduler/api:go_default_library",
6565
"//pkg/scheduler/api/latest:go_default_library",
6666
"//pkg/scheduler/apis/config:go_default_library",
67-
"//pkg/scheduler/framework/v1alpha1:go_default_library",
67+
"//pkg/scheduler/framework/plugins:go_default_library",
6868
"//pkg/scheduler/internal/cache:go_default_library",
6969
"//pkg/scheduler/internal/queue:go_default_library",
7070
"//pkg/scheduler/nodeinfo:go_default_library",

pkg/scheduler/factory/factory_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import (
4040
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
4141
latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest"
4242
"k8s.io/kubernetes/pkg/scheduler/apis/config"
43-
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
43+
plugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins"
4444
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
4545
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
4646
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
@@ -496,7 +496,7 @@ func newConfigFactory(client clientset.Interface, hardPodAffinitySymmetricWeight
496496
schedulerapi.DefaultPercentageOfNodesToScore,
497497
bindTimeoutSeconds,
498498
stopCh,
499-
framework.NewRegistry(),
499+
plugins.NewDefaultRegistry(),
500500
nil,
501501
[]config.PluginConfig{},
502502
})

pkg/scheduler/framework/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ filegroup(
99
name = "all-srcs",
1010
srcs = [
1111
":package-srcs",
12-
"//pkg/scheduler/framework/plugins/examples:all-srcs",
12+
"//pkg/scheduler/framework/plugins:all-srcs",
1313
"//pkg/scheduler/framework/v1alpha1:all-srcs",
1414
],
1515
tags = ["automanaged"],
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library")
2+
3+
go_library(
4+
name = "go_default_library",
5+
srcs = ["default_registry.go"],
6+
importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins",
7+
visibility = ["//visibility:public"],
8+
deps = [
9+
"//pkg/scheduler/framework/plugins/noop:go_default_library",
10+
"//pkg/scheduler/framework/v1alpha1:go_default_library",
11+
],
12+
)
13+
14+
filegroup(
15+
name = "package-srcs",
16+
srcs = glob(["**"]),
17+
tags = ["automanaged"],
18+
visibility = ["//visibility:private"],
19+
)
20+
21+
filegroup(
22+
name = "all-srcs",
23+
srcs = [
24+
":package-srcs",
25+
"//pkg/scheduler/framework/plugins/examples:all-srcs",
26+
"//pkg/scheduler/framework/plugins/noop:all-srcs",
27+
],
28+
tags = ["automanaged"],
29+
visibility = ["//visibility:public"],
30+
)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package plugins
18+
19+
import (
20+
noop "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noop"
21+
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
22+
)
23+
24+
// NewDefaultRegistry builds a default registry with all the default plugins.
25+
// This is the registry that Kubernetes default scheduler uses. A scheduler that
26+
// runs custom plugins, can pass a different Registry when initializing the scheduler.
27+
func NewDefaultRegistry() framework.Registry {
28+
return framework.Registry{
29+
// This is just a test plugin to showcase the setup, it should be deleted once
30+
// we have at least one legitimate plugin here.
31+
noop.Name: noop.New,
32+
}
33+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library")
2+
3+
go_library(
4+
name = "go_default_library",
5+
srcs = ["noop.go"],
6+
importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noop",
7+
visibility = ["//visibility:public"],
8+
deps = [
9+
"//pkg/scheduler/framework/v1alpha1:go_default_library",
10+
"//staging/src/k8s.io/api/core/v1:go_default_library",
11+
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
12+
],
13+
)
14+
15+
filegroup(
16+
name = "package-srcs",
17+
srcs = glob(["**"]),
18+
tags = ["automanaged"],
19+
visibility = ["//visibility:private"],
20+
)
21+
22+
filegroup(
23+
name = "all-srcs",
24+
srcs = [":package-srcs"],
25+
tags = ["automanaged"],
26+
visibility = ["//visibility:public"],
27+
)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package prebind
18+
19+
import (
20+
"k8s.io/api/core/v1"
21+
"k8s.io/apimachinery/pkg/runtime"
22+
23+
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
24+
)
25+
26+
// NoOpFilter is a plugin that implements the filter plugin and always returns Success.
27+
// This is just to make sure that all code dependencies are properly addressed while
28+
// working on legitimate plugins.
29+
type NoOpFilter struct{}
30+
31+
var _ = framework.FilterPlugin(NoOpFilter{})
32+
33+
// Name is the name of the plugin used in Registry and configurations.
34+
const Name = "noop-filter"
35+
36+
// Name returns name of the plugin. It is used in logs, etc.
37+
func (n NoOpFilter) Name() string {
38+
return Name
39+
}
40+
41+
// Filter invoked at the filter extension point.
42+
func (n NoOpFilter) Filter(pc *framework.PluginContext, pod *v1.Pod, nodeName string) *framework.Status {
43+
return nil
44+
}
45+
46+
// New initializes a new plugin and returns it.
47+
func New(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
48+
return &NoOpFilter{}, nil
49+
}

pkg/scheduler/framework/v1alpha1/registry.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,3 @@ func (r Registry) Unregister(name string) error {
6868
delete(r, name)
6969
return nil
7070
}
71-
72-
// NewRegistry builds a default registry with all the default plugins.
73-
// This is the registry that Kubernetes default scheduler uses. A scheduler that
74-
// runs custom plugins, can pass a different Registry and when initializing the
75-
// scheduler.
76-
func NewRegistry() Registry {
77-
return Registry{
78-
// FactoryMap:
79-
// New plugins are registered here.
80-
// example:
81-
// {
82-
// stateful_plugin.Name: stateful.NewStatefulMultipointExample,
83-
// fooplugin.Name: fooplugin.New,
84-
// }
85-
}
86-
}

0 commit comments

Comments
 (0)