From de9a1bef72337e1a74b9fd2701c24d64272f0cb4 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Mon, 4 Mar 2019 02:31:39 +0800 Subject: [PATCH] fix: resolve import loop between skus and models, merge skus into models --- pkg/compute/models/cloudsync.go | 10 +++--- .../{skus/skus.go => models/skustools.go} | 31 +++++++++---------- pkg/compute/service/service.go | 3 +- pkg/compute/skus/doc.go | 1 - 4 files changed, 21 insertions(+), 24 deletions(-) rename pkg/compute/{skus/skus.go => models/skustools.go} (89%) delete mode 100644 pkg/compute/skus/doc.go diff --git a/pkg/compute/models/cloudsync.go b/pkg/compute/models/cloudsync.go index e597ddfd22..1fa9581cbe 100644 --- a/pkg/compute/models/cloudsync.go +++ b/pkg/compute/models/cloudsync.go @@ -8,12 +8,12 @@ import ( "yunion.io/x/log" "yunion.io/x/pkg/util/compare" "yunion.io/x/pkg/utils" + "yunion.io/x/sqlchemy" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/mcclient" - "yunion.io/x/sqlchemy" ) type SSyncableBaseResource struct { @@ -72,7 +72,7 @@ func syncRegionZones(ctx context.Context, userCred mcclient.TokenCredential, pro return localZones, remoteZones, nil } -/*func syncRegionSkus(localRegion *SCloudregion) { +func syncRegionSkus(localRegion *SCloudregion) { if localRegion == nil { log.Debugf("local region is nil skipped.") return @@ -81,7 +81,7 @@ func syncRegionZones(ctx context.Context, userCred mcclient.TokenCredential, pro regionId := localRegion.GetId() if len(regionId) > 0 && ServerSkuManager.GetSkuCountByRegion(regionId) == 0 { // 提前同步instance type.如果同步失败可能导致vm 内存显示为0 - if err := skus.SyncSkusByRegion(localRegion); err != nil { + if err := syncSkusByRegion(localRegion); err != nil { msg := fmt.Sprintf("Get Skus for region %s failed %s", localRegion.GetName(), err) log.Errorf(msg) // 暂时不终止同步 @@ -89,7 +89,7 @@ func syncRegionZones(ctx context.Context, userCred mcclient.TokenCredential, pro return } } -}*/ +} func syncRegionEips(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, localRegion *SCloudregion, remoteRegion cloudprovider.ICloudRegion, syncRange *SSyncRange) { eips, err := remoteRegion.GetIEips() @@ -642,7 +642,7 @@ func syncPublicCloudProviderInfo( localZones, remoteZones, _ := syncRegionZones(ctx, userCred, provider, localRegion, remoteRegion) if !driver.GetFactory().NeedSyncSkuFromCloud() { - // syncRegionSkus(localRegion) + syncRegionSkus(localRegion) } // no need to lock public cloud region as cloud region for public cloud is readonly diff --git a/pkg/compute/skus/skus.go b/pkg/compute/models/skustools.go similarity index 89% rename from pkg/compute/skus/skus.go rename to pkg/compute/models/skustools.go index 37cb298aa4..a278191a81 100644 --- a/pkg/compute/skus/skus.go +++ b/pkg/compute/models/skustools.go @@ -1,4 +1,4 @@ -package skus +package models import ( "context" @@ -11,7 +11,6 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudprovider" - "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" @@ -140,11 +139,11 @@ func (self *SkusZone) Init() error { return nil } -func (self *SkusZone) doCreate(data models.SServerSku) error { +func (self *SkusZone) doCreate(data SServerSku) error { data.CloudregionId = self.RegionId data.ZoneId = self.ZoneId data.Provider = self.Provider - if err := models.ServerSkuManager.TableSpec().Insert(&data); err != nil { + if err := ServerSkuManager.TableSpec().Insert(&data); err != nil { log.Debugf("SkusZone doCreate fail: %s", err.Error()) return err } @@ -153,7 +152,7 @@ func (self *SkusZone) doCreate(data models.SServerSku) error { return nil } -func (self *SkusZone) doUpdate(odata *models.SServerSku, sku jsonutils.JSONObject) error { +func (self *SkusZone) doUpdate(odata *SServerSku, sku jsonutils.JSONObject) error { _, err := db.Update(odata, func() error { if err := sku.Unmarshal(&odata); err != nil { return err @@ -178,12 +177,12 @@ func (self *SkusZone) SyncToLocalDB() error { for _, sku := range self.skus { name, _ := sku.GetString("name") - if obj, err := models.ServerSkuManager.FetchByZoneId(self.ZoneId, name); err != nil { + if obj, err := ServerSkuManager.FetchByZoneId(self.ZoneId, name); err != nil { if err != sql.ErrNoRows { log.Debugf("SyncToLocalDB zone %s name %s : %s", self.ZoneId, name, err.Error()) return err } - data := models.SServerSku{} + data := SServerSku{} if e := sku.Unmarshal(&data); e != nil { log.Debugf("sku Unmarshal failed: %s, %s", sku, e.Error()) return e @@ -192,7 +191,7 @@ func (self *SkusZone) SyncToLocalDB() error { return err } } else { - odata, ok := obj.(*models.SServerSku) + odata, ok := obj.(*SServerSku) if !ok { return fmt.Errorf("SkusZone model assertion error. %s", obj) } @@ -212,7 +211,7 @@ func (self *SkusZone) getExternalZone() (string, string, string) { if len(parts) == 3 { // provider, region, zone return parts[0], parts[1], parts[2] - } else if len(parts) == 2 && parts[0] == models.CLOUD_PROVIDER_AZURE { + } else if len(parts) == 2 && parts[0] == CLOUD_PROVIDER_AZURE { // azure 没有zone的概念 return parts[0], parts[1], parts[1] } @@ -228,7 +227,7 @@ type SkusZoneList struct { failed int } -func (self *SkusZoneList) initData(provider string, region models.SCloudregion, zones []models.SZone) { +func (self *SkusZoneList) initData(provider string, region SCloudregion, zones []SZone) { for _, z := range zones { log.Debugf("SkusZoneList initData provider %s zone %s", provider, z.GetId()) skusZone := &SkusZone{ @@ -253,13 +252,13 @@ func (self *SkusZoneList) Refresh(providerIds *[]string) error { } for _, p := range pIds { - regions, e := models.CloudregionManager.GetRegionByProvider(p) + regions, e := CloudregionManager.GetRegionByProvider(p) if e != nil { return e } for _, r := range regions { - zones, e := models.ZoneManager.GetZonesByRegion(&r) + zones, e := ZoneManager.GetZonesByRegion(&r) if e != nil { return e } @@ -308,7 +307,7 @@ func (self *SkusZoneList) SyncToLocalDB() error { // 全量同步sku列表. func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) { if isStart { - if models.ServerSkuManager.GetSkuCountByProvider("") > 0 { + if ServerSkuManager.GetSkuCountByProvider("") > 0 { return } } @@ -323,7 +322,7 @@ func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bo // 清理无效的sku log.Debugf("DeleteInvalidSkus in processing...") - models.ServerSkuManager.PendingDeleteInvalidSku() + ServerSkuManager.PendingDeleteInvalidSku() } // 同步指定provider sku列表 @@ -342,9 +341,9 @@ func SyncSkusByProviderIds(providerIds []string) error { } // 同步指定region sku列表 -func SyncSkusByRegion(region *models.SCloudregion) error { +func syncSkusByRegion(region *SCloudregion) error { skulist := SkusZoneList{} - zones, err := models.ZoneManager.GetZonesByRegion(region) + zones, err := ZoneManager.GetZonesByRegion(region) if err != nil { return err } diff --git a/pkg/compute/service/service.go b/pkg/compute/service/service.go index 7919cb099f..1d91ee4009 100644 --- a/pkg/compute/service/service.go +++ b/pkg/compute/service/service.go @@ -25,7 +25,6 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/compute/options" - "yunion.io/x/onecloud/pkg/compute/skus" ) func StartService() { @@ -77,7 +76,7 @@ func StartService() { cron.AddJob1WithStartRun("AutoSyncCloudaccountTask", time.Duration(opts.CloudAutoSyncIntervalSeconds)*time.Second, models.CloudaccountManager.AutoSyncCloudaccountTask, true) cron.AddJob2("AutoDiskSnapshot", opts.AutoSnapshotDay, opts.AutoSnapshotHour, 0, 0, models.DiskManager.AutoDiskSnapshot, false) - cron.AddJob2("SyncSkus", opts.SyncSkusDay, opts.SyncSkusHour, 0, 0, skus.SyncSkus, true) + cron.AddJob2("SyncSkus", opts.SyncSkusDay, opts.SyncSkusHour, 0, 0, models.SyncSkus, true) cron.Start() defer cron.Stop() diff --git a/pkg/compute/skus/doc.go b/pkg/compute/skus/doc.go deleted file mode 100644 index e8d523c1f8..0000000000 --- a/pkg/compute/skus/doc.go +++ /dev/null @@ -1 +0,0 @@ -package skus // import "yunion.io/x/onecloud/pkg/compute/skus"