fix(region): optimized filter sku by zone (#23655)

This commit is contained in:
屈轩
2025-11-01 13:04:41 +08:00
committed by GitHub
parent 41c5c66fe2
commit 1d9e418df8
4 changed files with 24 additions and 24 deletions
+15 -15
View File
@@ -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
View File
@@ -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 {
+7 -7
View File
@@ -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 {