From 4a32bde4a50815b8029464d046be9c57ecc39eb3 Mon Sep 17 00:00:00 2001 From: Klaus Ma Date: Mon, 14 Aug 2017 09:02:41 +0800 Subject: [PATCH 1/3] Update RegisterMandatoryFitPredicate to avoid double register. --- .../algorithmprovider/defaults/defaults.go | 1 - plugin/pkg/scheduler/factory/plugins.go | 21 +++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go index 7e25b0405c2..2d7e278a921 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go @@ -176,7 +176,6 @@ func defaultPredicates() sets.String { factory.RegisterFitPredicate("CheckNodeDiskPressure", predicates.CheckNodeDiskPressurePredicate), // Fit is determied by node condtions: not ready, network unavailable and out of disk. - factory.RegisterFitPredicate("CheckNodeCondition", predicates.CheckNodeConditionPredicate), factory.RegisterMandatoryFitPredicate("CheckNodeCondition", predicates.CheckNodeConditionPredicate), // Fit is determined by volume zone requirements. diff --git a/plugin/pkg/scheduler/factory/plugins.go b/plugin/pkg/scheduler/factory/plugins.go index ad245c7d9c6..8963525e93b 100644 --- a/plugin/pkg/scheduler/factory/plugins.go +++ b/plugin/pkg/scheduler/factory/plugins.go @@ -72,10 +72,10 @@ var ( schedulerFactoryMutex sync.Mutex // maps that hold registered algorithm types - fitPredicateMap = make(map[string]FitPredicateFactory) - mandatoryFitPredicateMap = make(map[string]FitPredicateFactory) - priorityFunctionMap = make(map[string]PriorityConfigFactory) - algorithmProviderMap = make(map[string]AlgorithmProviderConfig) + fitPredicateMap = make(map[string]FitPredicateFactory) + mandatoryFitPredicates = make(map[string]bool) + priorityFunctionMap = make(map[string]PriorityConfigFactory) + algorithmProviderMap = make(map[string]AlgorithmProviderConfig) // Registered metadata producers priorityMetadataProducer MetadataProducerFactory @@ -107,7 +107,8 @@ func RegisterMandatoryFitPredicate(name string, predicate algorithm.FitPredicate schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() validateAlgorithmNameOrDie(name) - mandatoryFitPredicateMap[name] = func(PluginFactoryArgs) algorithm.FitPredicate { return predicate } + fitPredicateMap[name] = func(PluginFactoryArgs) algorithm.FitPredicate { return predicate } + mandatoryFitPredicates[name] = true return name } @@ -321,10 +322,12 @@ func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[st predicates[name] = factory(args) } - // Always include required fit predicates. - for name, factory := range mandatoryFitPredicateMap { - if _, found := predicates[name]; !found { - predicates[name] = factory(args) + // Always include mandatory fit predicates. + for name, mandatory := range mandatoryFitPredicates { + if mandatory { + if factory, found := fitPredicateMap[name]; found { + predicates[name] = factory(args) + } } } From 2da96fc458ec505f766c45d7774a2ca93c658552 Mon Sep 17 00:00:00 2001 From: Klaus Ma Date: Wed, 16 Aug 2017 14:57:12 +0800 Subject: [PATCH 2/3] Replaced bool map to string set. --- plugin/pkg/scheduler/factory/plugins.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plugin/pkg/scheduler/factory/plugins.go b/plugin/pkg/scheduler/factory/plugins.go index 8963525e93b..cbf1eb9df0c 100644 --- a/plugin/pkg/scheduler/factory/plugins.go +++ b/plugin/pkg/scheduler/factory/plugins.go @@ -73,7 +73,7 @@ var ( // maps that hold registered algorithm types fitPredicateMap = make(map[string]FitPredicateFactory) - mandatoryFitPredicates = make(map[string]bool) + mandatoryFitPredicates = sets.NewString() priorityFunctionMap = make(map[string]PriorityConfigFactory) algorithmProviderMap = make(map[string]AlgorithmProviderConfig) @@ -108,7 +108,7 @@ func RegisterMandatoryFitPredicate(name string, predicate algorithm.FitPredicate defer schedulerFactoryMutex.Unlock() validateAlgorithmNameOrDie(name) fitPredicateMap[name] = func(PluginFactoryArgs) algorithm.FitPredicate { return predicate } - mandatoryFitPredicates[name] = true + mandatoryFitPredicates.Insert(name) return name } @@ -323,11 +323,9 @@ func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[st } // Always include mandatory fit predicates. - for name, mandatory := range mandatoryFitPredicates { - if mandatory { - if factory, found := fitPredicateMap[name]; found { - predicates[name] = factory(args) - } + for _, name := range mandatoryFitPredicates.List() { + if factory, found := fitPredicateMap[name]; found { + predicates[name] = factory(args) } } From 051dfb1ba255a87aa1efd90dc17d731894da478a Mon Sep 17 00:00:00 2001 From: Klaus Ma Date: Thu, 17 Aug 2017 07:16:07 +0800 Subject: [PATCH 3/3] address review comments. --- plugin/pkg/scheduler/factory/plugins.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/pkg/scheduler/factory/plugins.go b/plugin/pkg/scheduler/factory/plugins.go index cbf1eb9df0c..48cdca881a4 100644 --- a/plugin/pkg/scheduler/factory/plugins.go +++ b/plugin/pkg/scheduler/factory/plugins.go @@ -323,7 +323,7 @@ func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[st } // Always include mandatory fit predicates. - for _, name := range mandatoryFitPredicates.List() { + for name := range mandatoryFitPredicates { if factory, found := fitPredicateMap[name]; found { predicates[name] = factory(args) }