From a7284ae91e75b3fa9c191374c2e9cb527a6b8fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Mon, 20 May 2024 11:52:51 +0800 Subject: [PATCH] fix(scheduler): cloudprovider predicate (#20313) --- .../predicates/cloudprovider_schedtag_predicate.go | 2 +- pkg/scheduler/algorithm/predicates/predicates.go | 10 ++++++++-- pkg/scheduler/api/sched.go | 3 +++ pkg/scheduler/core/context.go | 7 ++++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/pkg/scheduler/algorithm/predicates/cloudprovider_schedtag_predicate.go b/pkg/scheduler/algorithm/predicates/cloudprovider_schedtag_predicate.go index 6ad7262913..13a073a721 100644 --- a/pkg/scheduler/algorithm/predicates/cloudprovider_schedtag_predicate.go +++ b/pkg/scheduler/algorithm/predicates/cloudprovider_schedtag_predicate.go @@ -45,7 +45,7 @@ func (p *CloudproviderSchedtagPredicate) Clone() core.FitPredicate { func (p *CloudproviderSchedtagPredicate) PreExecute(ctx context.Context, u *core.Unit, cs []core.Candidater) (bool, error) { driver := u.GetHypervisorDriver() - if driver != nil && !driver.DoScheduleCloudproviderTagFilter() { + if driver == nil || !driver.DoScheduleCloudproviderTagFilter() { return false, nil } return p.ServerBaseSchedtagPredicate.PreExecute(ctx, u, cs) diff --git a/pkg/scheduler/algorithm/predicates/predicates.go b/pkg/scheduler/algorithm/predicates/predicates.go index 8c2fa14354..ac510f79e5 100644 --- a/pkg/scheduler/algorithm/predicates/predicates.go +++ b/pkg/scheduler/algorithm/predicates/predicates.go @@ -60,7 +60,8 @@ func (b *BasePredicate) PreExecute(ctx context.Context, unit *core.Unit, candis } func (b *BasePredicate) GetHypervisorDriver(u *core.Unit) models.IGuestDriver { - driver, _ := models.GetDriver(u.GetHypervisor(), u.SchedInfo.Provider) + hypervisor := u.GetHypervisor() + driver, _ := models.GetDriver(hypervisor, u.SchedInfo.Provider) return driver } @@ -346,7 +347,11 @@ func (w SchedtagResourceW) GetDynamicSchedDesc() *jsonutils.JSONDict { } func (p *BaseSchedtagPredicate) GetHypervisorDriver() models.IGuestDriver { - driver, _ := models.GetDriver(p.Hypervisor, p.Provider) + hypervisor := p.Hypervisor + if hypervisor == api.HostHypervisorForKvm { + hypervisor = api.SchedTypeKvm + } + driver, _ := models.GetDriver(hypervisor, p.Provider) return driver } @@ -413,6 +418,7 @@ func (p *BaseSchedtagPredicate) PreExecute(ctx context.Context, sp ISchedtagPred } p.Hypervisor = u.GetHypervisor() + p.Provider = u.SchedInfo.Provider // always do select step u.AppendSelectPlugin(sp) diff --git a/pkg/scheduler/api/sched.go b/pkg/scheduler/api/sched.go index bd4ccf9f2e..1eb888c4d4 100644 --- a/pkg/scheduler/api/sched.go +++ b/pkg/scheduler/api/sched.go @@ -163,6 +163,9 @@ func NewSchedInfo(input *api.ScheduleInput) *SchedInfo { data.Provider = region.Provider } } + if len(data.Provider) == 0 { + data.Provider = computeapi.CLOUD_PROVIDER_ONECLOUD + } if data.Backup { if data.PreferBackupHost != "" { diff --git a/pkg/scheduler/core/context.go b/pkg/scheduler/core/context.go index 02713cb573..466a5924b4 100644 --- a/pkg/scheduler/core/context.go +++ b/pkg/scheduler/core/context.go @@ -447,11 +447,16 @@ func (u *Unit) SchedData() *api.SchedInfo { } func (u *Unit) GetHypervisor() string { + driver, _ := models.GetHostDriver(u.SchedInfo.Hypervisor, u.SchedInfo.Provider) + if driver != nil { + return driver.GetHypervisor() + } return u.SchedData().Hypervisor } func (u *Unit) GetHypervisorDriver() models.IGuestDriver { - driver, _ := models.GetDriver(u.GetHypervisor(), u.SchedInfo.Provider) + hypervisor := u.GetHypervisor() + driver, _ := models.GetDriver(hypervisor, u.SchedInfo.Provider) return driver }