fix(region): optimized cached image list (#23153)

This commit is contained in:
屈轩
2025-08-22 15:43:13 +08:00
committed by GitHub
parent 9852dfc5cf
commit a08a5831d0
2 changed files with 25 additions and 27 deletions
+24 -26
View File
@@ -901,47 +901,45 @@ func (manager *SCachedimageManager) ListItemFilter(
}
{
var idFilter bool
storagecachedImages := StoragecachedimageManager.Query("cachedimage_id").Equals("status", api.CACHED_IMAGE_STATUS_ACTIVE).SubQuery()
storageCaches := StoragecacheManager.Query().SubQuery()
storagecachedImages := StoragecachedimageManager.Query("cachedimage_id").Equals("status", api.CACHED_IMAGE_STATUS_ACTIVE) // .SubQuery()
storagecachedImages = storagecachedImages.Snapshot()
storagesQ := StorageManager.Query()
storagesQ := StorageManager.Query("storagecache_id")
storagesQ = storagesQ.Snapshot()
if query.Valid {
idFilter = true
storagesQ = storagesQ.In("status", []string{api.STORAGE_ENABLED, api.STORAGE_ONLINE}).IsTrue("enabled")
}
if len(query.CloudproviderId) > 0 {
idFilter = true
storagesQ = storagesQ.In("manager_id", query.CloudproviderId)
}
storages := storagesQ.SubQuery()
zonesQ := ZoneManager.Query()
if len(query.HostSchedtagId) > 0 {
hostschedtags := HostschedtagManager.Query("host_id").Equals("schedtag_id", query.HostSchedtagId)
hoststorages := HoststorageManager.Query("storage_id").In("host_id", hostschedtags.Distinct().SubQuery())
storagesQ = storagesQ.In("id", hoststorages.Distinct().SubQuery())
}
zonesQ := ZoneManager.Query("id")
zonesQ = zonesQ.Snapshot()
if len(query.ZoneId) > 0 {
idFilter = true
zonesQ = zonesQ.Equals("id", query.ZoneId)
}
if len(query.CloudregionId) > 0 {
idFilter = true
zonesQ = zonesQ.In("cloudregion_id", query.CloudregionId)
}
zones := zonesQ.SubQuery()
subq := storagecachedImages.Query(storagecachedImages.Field("cachedimage_id"))
subq = subq.Join(storageCaches, sqlchemy.Equals(storagecachedImages.Field("storagecache_id"), storageCaches.Field("id")))
subq = subq.Join(storages, sqlchemy.Equals(storageCaches.Field("id"), storages.Field("storagecache_id")))
subq = subq.Join(zones, sqlchemy.Equals(storages.Field("zone_id"), zones.Field("id")))
if len(query.HostSchedtagId) > 0 {
idFilter = true
hoststorages := HoststorageManager.Query("host_id", "storage_id").SubQuery()
hostschedtags := HostschedtagManager.Query().Equals("schedtag_id", query.HostSchedtagId).SubQuery()
subq = subq.Join(hoststorages, sqlchemy.Equals(hoststorages.Field("storage_id"), storages.Field("id")))
subq = subq.Join(hostschedtags, sqlchemy.Equals(hostschedtags.Field("host_id"), hoststorages.Field("host_id")))
if zonesQ.IsAltered() {
storagesQ = storagesQ.Filter(
sqlchemy.In(storagesQ.Field("zone_id"), zonesQ.Distinct().SubQuery()),
)
}
if idFilter {
subQ := subq.Distinct().SubQuery()
q = q.Join(subQ, sqlchemy.Equals(q.Field("id"), subQ.Field("cachedimage_id")))
if storagesQ.IsAltered() {
storagecachedImages = storagecachedImages.Filter(
sqlchemy.In(storagecachedImages.Field("storagecache_id"), storagesQ.Distinct().SubQuery()),
)
}
if storagecachedImages.IsAltered() {
q = q.In("id", storagecachedImages.Distinct().SubQuery())
}
}
@@ -53,7 +53,7 @@ func (self *SecurityGroupCreateTask) OnInit(ctx context.Context, obj db.IStandal
}
rules := api.SSecgroupRuleResourceSet{}
self.GetParams().Unmarshal(&rules)
self.GetParams().Unmarshal(&rules, "rules")
driver := region.GetDriver()
err = driver.RequestCreateSecurityGroup(ctx, self.GetUserCred(), secgroup, rules)