mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-08-31 01:35:56 +08:00
fix(region): optimized filter sku by zone (#23655)
This commit is contained in:
@@ -818,24 +818,24 @@ func (manager *SServerSkuManager) ListItemFilter(
|
||||
|
||||
zoneStr := query.ZoneId
|
||||
if len(zoneStr) > 0 {
|
||||
_zone, err := ZoneManager.FetchByIdOrName(ctx, userCred, zoneStr)
|
||||
zoneObj, err := validators.ValidateModel(ctx, userCred, ZoneManager, &zoneStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2("zone", zoneStr)
|
||||
}
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
return nil, err
|
||||
}
|
||||
zone := _zone.(*SZone)
|
||||
region, _ := zone.GetRegion()
|
||||
if region == nil {
|
||||
return nil, httperrors.NewResourceNotFoundError("failed to find cloudregion for zone %s(%s)", zone.Name, zone.Id)
|
||||
}
|
||||
//OneCloud忽略zone参数
|
||||
if region.Provider == api.CLOUD_PROVIDER_ONECLOUD {
|
||||
q = q.Equals("cloudregion_id", region.Id)
|
||||
} else {
|
||||
q = q.Equals("zone_id", zone.Id)
|
||||
zone := zoneObj.(*SZone)
|
||||
region, err := zone.GetRegion()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "GetRegion %s", zone.Name)
|
||||
}
|
||||
q = q.Filter(
|
||||
sqlchemy.OR(
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(q.Field("cloudregion_id"), region.Id),
|
||||
sqlchemy.IsNullOrEmpty(q.Field("zone_id")),
|
||||
),
|
||||
sqlchemy.Equals(q.Field("zone_id"), zone.Id),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
q, err = managedResourceFilterByRegion(ctx, q, query.RegionalFilterListInput, "", nil)
|
||||
|
||||
@@ -78,7 +78,7 @@ func (p *InstanceTypePredicate) Execute(ctx context.Context, u *core.Unit, c cor
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sku := skuman.GetByZone(instanceType, zoneId)
|
||||
sku := skuman.GetByZone(instanceType, regionId, zoneId)
|
||||
if sku == nil {
|
||||
h.Exclude(fmt.Sprintf("Not found server sku %s at zone %s", instanceType, zoneName))
|
||||
}
|
||||
|
||||
+1
-1
@@ -144,7 +144,7 @@ func (b baseHostGetter) HostType() string {
|
||||
|
||||
func (b baseHostGetter) Sku(instanceType string) *sku.ServerSku {
|
||||
zone := b.Zone()
|
||||
return sku.GetByZone(instanceType, zone.GetId())
|
||||
return sku.GetByZone(instanceType, zone.CloudregionId, zone.GetId())
|
||||
}
|
||||
|
||||
func (b baseHostGetter) Storages() []*api.CandidateStorage {
|
||||
|
||||
@@ -200,8 +200,8 @@ func SyncOnce(wait bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetByZone(instanceType, zoneId string) *ServerSku {
|
||||
return skuManager.GetByZone(instanceType, zoneId)
|
||||
func GetByZone(instanceType, regionId, zoneId string) *ServerSku {
|
||||
return skuManager.GetByZone(instanceType, regionId, zoneId)
|
||||
}
|
||||
|
||||
func GetByRegion(instanceType, regionId string) []*ServerSku {
|
||||
@@ -232,7 +232,7 @@ func (l skuList) Has(newSku *ServerSku) (int, bool) {
|
||||
}
|
||||
|
||||
func (l skuList) DebugString() string {
|
||||
return fmt.Sprintf("%s", jsonutils.Marshal(l).String())
|
||||
return jsonutils.Marshal(l).String()
|
||||
}
|
||||
|
||||
func (l skuList) GetByRegion(regionId string) []*ServerSku {
|
||||
@@ -246,9 +246,9 @@ func (l skuList) GetByRegion(regionId string) []*ServerSku {
|
||||
return ret
|
||||
}
|
||||
|
||||
func (l skuList) GetByZone(zoneId string) *ServerSku {
|
||||
func (l skuList) GetByZone(regionId, zoneId string) *ServerSku {
|
||||
for _, s := range l {
|
||||
if s.ZoneId == zoneId {
|
||||
if s.ZoneId == zoneId || (len(s.ZoneId) == 0 && s.RegionId == regionId) {
|
||||
return s
|
||||
}
|
||||
}
|
||||
@@ -327,12 +327,12 @@ func (m *SSkuManager) sync() {
|
||||
wait.Forever(m.syncOnce, m.refreshInterval)
|
||||
}
|
||||
|
||||
func (m *SSkuManager) GetByZone(instanceType, zoneId string) *ServerSku {
|
||||
func (m *SSkuManager) GetByZone(instanceType, regionId, zoneId string) *ServerSku {
|
||||
l := m.skuMap.Get(instanceType)
|
||||
if l == nil {
|
||||
return nil
|
||||
}
|
||||
return l.GetByZone(zoneId)
|
||||
return l.GetByZone(regionId, zoneId)
|
||||
}
|
||||
|
||||
func (m *SSkuManager) GetByRegion(instanceType, regionId string) []*ServerSku {
|
||||
|
||||
Reference in New Issue
Block a user