Merge pull request #9352 from zexi/bugfix/scheduler-sku-net

Bugfix/scheduler SKU net
This commit is contained in:
Zexi Li
2020-12-11 09:18:18 +08:00
committed by GitHub
3 changed files with 46 additions and 9 deletions
@@ -45,13 +45,25 @@ func (p *InstanceTypePredicate) Execute(u *core.Unit, c core.Candidater) (bool,
d := u.SchedData()
regionId := c.Getter().Region().Id
regionName := c.Getter().Region().Name
zoneId := c.Getter().Zone().Id
zoneName := c.Getter().Zone().Name
instanceType := d.InstanceType
sku := skuman.GetByZone(instanceType, zoneId)
if sku == nil {
h.Exclude(fmt.Sprintf("Not found server sku %s at zone %s", instanceType, zoneName))
reqRegion := d.PreferRegion
reqZone := d.PreferZone
if reqRegion != "" && reqZone == "" {
sku := skuman.GetByRegion(instanceType, regionId)
if sku == nil {
h.Exclude(fmt.Sprintf("Not found server sku %s at region %s", instanceType, regionName))
}
} else {
sku := skuman.GetByZone(instanceType, zoneId)
if sku == nil {
h.Exclude(fmt.Sprintf("Not found server sku %s at zone %s", instanceType, zoneName))
}
}
return h.GetResult()
+5 -2
View File
@@ -281,8 +281,11 @@ func newBaseHostDesc(b *baseBuilder, host *computemodels.SHost) (*BaseHostDesc,
if err := desc.fillNetworks(host); err != nil {
return nil, fmt.Errorf("Fill networks error: %v", err)
}
if err := desc.fillOnecloudVpcNetworks(); err != nil {
return nil, fmt.Errorf("Fill onecloud vpc networks error: %v", err)
// only onecloud host should fill onecloud vpc networks
if host.HostType == computeapi.HOST_TYPE_HYPERVISOR {
if err := desc.fillOnecloudVpcNetworks(); err != nil {
return nil, fmt.Errorf("Fill onecloud vpc networks error: %v", err)
}
}
if err := desc.fillZone(host); err != nil {
+26 -4
View File
@@ -56,14 +56,19 @@ func GetByZone(instanceType, zoneId string) *ServerSku {
return skuManager.GetByZone(instanceType, zoneId)
}
func GetByRegion(instanceType, regionId string) *ServerSku {
return skuManager.GetByRegion(instanceType, regionId)
}
type skuMap struct {
*sync.Map
}
type ServerSku struct {
Id string `json:"id"`
Name string `json:"name"`
ZoneId string `json:"zone_id"`
Id string `json:"id"`
Name string `json:"name"`
RegionId string `json:"cloudregion_id"`
ZoneId string `json:"zone_id"`
}
type skuList []*ServerSku
@@ -81,6 +86,15 @@ func (l skuList) DebugString() string {
return fmt.Sprintf("%s", jsonutils.Marshal(l).String())
}
func (l skuList) GetByRegion(regionId string) *ServerSku {
for _, s := range l {
if s.RegionId == regionId {
return s
}
}
return nil
}
func (l skuList) GetByZone(zoneId string) *ServerSku {
for _, s := range l {
if s.ZoneId == zoneId {
@@ -124,7 +138,7 @@ func (m *SSkuManager) syncOnce() {
startTime := time.Now()
skus := make([]ServerSku, 0)
q := models.ServerSkuManager.Query("id", "name", "zone_id")
q := models.ServerSkuManager.Query("id", "name", "cloudregion_id", "zone_id")
q = q.Filter(
sqlchemy.OR(
sqlchemy.Equals(q.Field("prepaid_status"), computeapi.SkuStatusAvailable),
@@ -152,3 +166,11 @@ func (m *SSkuManager) GetByZone(instanceType, zoneId string) *ServerSku {
}
return l.GetByZone(zoneId)
}
func (m *SSkuManager) GetByRegion(instanceType, regionId string) *ServerSku {
l := m.skuMap.Get(instanceType)
if l == nil {
return nil
}
return l.GetByRegion(regionId)
}