mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
Merge pull request #1322 from ioito/hotfix/qx-image-zone
避免产生storagecacheimage脏数据
This commit is contained in:
@@ -536,6 +536,33 @@ func (image *SCachedimage) GetRegions() ([]SCloudregion, error) {
|
||||
return regions, nil
|
||||
}
|
||||
|
||||
func (image *SCachedimage) GetUsableZones() ([]SZone, error) {
|
||||
zones := ZoneManager.Query().SubQuery()
|
||||
storages := StorageManager.Query().SubQuery()
|
||||
storagecaches := StoragecacheManager.Query().SubQuery()
|
||||
storagecacheimages := StoragecachedimageManager.Query().SubQuery()
|
||||
providers := CloudproviderManager.Query().SubQuery()
|
||||
|
||||
q := zones.Query()
|
||||
q = q.Join(storages, sqlchemy.Equals(q.Field("id"), storages.Field("zone_id")))
|
||||
q = q.Join(storagecaches, sqlchemy.Equals(storages.Field("storagecache_id"), storagecaches.Field("id")))
|
||||
q = q.Join(providers, sqlchemy.Equals(providers.Field("id"), storagecaches.Field("manager_id")))
|
||||
q = q.Join(storagecacheimages, sqlchemy.Equals(storagecaches.Field("id"), storagecacheimages.Field("storagecache_id")))
|
||||
q = q.Filter(sqlchemy.IsTrue(providers.Field("enabled")))
|
||||
q = q.Filter(sqlchemy.In(providers.Field("status"), api.CLOUD_PROVIDER_VALID_STATUS))
|
||||
q = q.Filter(sqlchemy.In(providers.Field("health_status"), api.CLOUD_PROVIDER_VALID_HEALTH_STATUS))
|
||||
q = q.Filter(sqlchemy.Equals(storagecacheimages.Field("cachedimage_id"), image.Id))
|
||||
q = q.Filter(sqlchemy.Equals(storagecacheimages.Field("status"), api.CACHED_IMAGE_STATUS_READY))
|
||||
q = q.Filter(sqlchemy.Equals(q.Field("status"), api.ZONE_ENABLE))
|
||||
|
||||
result := []SZone{}
|
||||
err := db.FetchModelObjects(ZoneManager, q, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (image *SCachedimage) GetCloudprovider() (*SCloudprovider, error) {
|
||||
caches := image.getValidStoragecache()
|
||||
if len(caches) == 0 {
|
||||
|
||||
@@ -77,12 +77,18 @@ func (scache *SStoragecache) GetIImages() ([]cloudprovider.ICloudImage, error) {
|
||||
}
|
||||
|
||||
func (scache *SStoragecache) GetIImageById(extId string) (cloudprovider.ICloudImage, error) {
|
||||
image, err := scache.region.GetImage(extId)
|
||||
images, err := scache.region.GetImages(scache.ZoneId, extId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
image.storageCache = scache
|
||||
return image, nil
|
||||
if len(images) == 1 {
|
||||
images[0].storageCache = scache
|
||||
return &images[0], nil
|
||||
}
|
||||
if len(images) == 0 {
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
return nil, cloudprovider.ErrDuplicateId
|
||||
}
|
||||
|
||||
func (scache *SStoragecache) GetPath() string {
|
||||
|
||||
Reference in New Issue
Block a user