From 06f1303f542efe2633a46f0ac467df78969b1dc7 Mon Sep 17 00:00:00 2001 From: Zexi Date: Mon, 10 Jun 2019 19:41:16 +0800 Subject: [PATCH] scheduler: add domain filter --- .../algorithm/predicates/domain_predicate.go | 31 +++++++++++++++++++ .../predicates/guest/status_predicate.go | 4 --- pkg/scheduler/algorithmprovider/defaults.go | 1 + 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 pkg/scheduler/algorithm/predicates/domain_predicate.go diff --git a/pkg/scheduler/algorithm/predicates/domain_predicate.go b/pkg/scheduler/algorithm/predicates/domain_predicate.go new file mode 100644 index 0000000000..899001c65b --- /dev/null +++ b/pkg/scheduler/algorithm/predicates/domain_predicate.go @@ -0,0 +1,31 @@ +package predicates + +import ( + "yunion.io/x/onecloud/pkg/scheduler/core" +) + +type DomainPredicate struct { + BasePredicate +} + +func (p *DomainPredicate) Name() string { + return "host_domain" +} + +func (p *DomainPredicate) Clone() core.FitPredicate { + return &DomainPredicate{} +} + +func (p *DomainPredicate) Execute(u *core.Unit, c core.Candidater) (bool, []core.PredicateFailureReason, error) { + h := NewPredicateHelper(p, u, c) + getter := c.Getter() + cloudprovider := getter.Cloudprovider() + if cloudprovider == nil { + return h.GetResult() + } + domainId := getter.DomainId() + if domainId != u.SchedInfo.Domain { + h.Exclude2("domain_belong", domainId, u.SchedInfo.Domain) + } + return h.GetResult() +} diff --git a/pkg/scheduler/algorithm/predicates/guest/status_predicate.go b/pkg/scheduler/algorithm/predicates/guest/status_predicate.go index a2e7b2140a..32ff819ce4 100644 --- a/pkg/scheduler/algorithm/predicates/guest/status_predicate.go +++ b/pkg/scheduler/algorithm/predicates/guest/status_predicate.go @@ -75,10 +75,6 @@ func (p *StatusPredicate) Execute(u *core.Unit, c core.Candidater) (bool, []core if cloudprovider.HealthStatus != api.CLOUD_PROVIDER_HEALTH_NORMAL { h.Exclude2("cloud_provider_health_status", cloudprovider.HealthStatus, api.CLOUD_PROVIDER_HEALTH_NORMAL) } - domainId := getter.DomainId() - if domainId != u.SchedInfo.Domain { - h.Exclude2("domain_belong", domainId, u.SchedInfo.Domain) - } } return h.GetResult() diff --git a/pkg/scheduler/algorithmprovider/defaults.go b/pkg/scheduler/algorithmprovider/defaults.go index d1f9620e4c..f51800cfa0 100644 --- a/pkg/scheduler/algorithmprovider/defaults.go +++ b/pkg/scheduler/algorithmprovider/defaults.go @@ -33,6 +33,7 @@ func defaultPredicates() sets.String { factory.RegisterFitPredicate("b-GuestHypervisorFilter", &predicateguest.HypervisorPredicate{}), factory.RegisterFitPredicate("c-GuestAggregateFilter", &predicates.AggregatePredicate{}), factory.RegisterFitPredicate("d-GuestMigrateFilter", &predicateguest.MigratePredicate{}), + factory.RegisterFitPredicate("e-GuestDomainFilter", &predicates.DomainPredicate{}), //factory.RegisterFitPredicate("e-GuestNestFilter", &predicateguest.NestPredicate{}), //factory.RegisterFitPredicate("f-GuestGroupFilter", &predicateguest.GroupPredicate{}), factory.RegisterFitPredicate("g-GuestCPUFilter", &predicateguest.CPUPredicate{}),