Skip to content

Commit

Permalink
fix: 优化sku同步逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
Qu Xuan committed Jul 2, 2020
1 parent 029233a commit 0442751
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 198 deletions.
43 changes: 1 addition & 42 deletions pkg/compute/models/dbinstance_skus.go
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ func (manager *SDBInstanceSkuManager) SyncDBInstanceSkus(ctx context.Context, us

syncResult := compare.SyncResult{}

iskus, err := meta.GetDBInstanceSkusByRegion(region.ExternalId)
iskus, err := meta.GetDBInstanceSkusByRegionExternalId(region.ExternalId)
if err != nil {
syncResult.Error(err)
return syncResult
Expand Down Expand Up @@ -545,52 +545,11 @@ func (sku *SDBInstanceSku) syncWithCloudSku(ctx context.Context, userCred mcclie
return err
}

func (manager *SDBInstanceSkuManager) getZoneBySuffix(region *SCloudregion, suffix string) (*SZone, error) {
q := ZoneManager.Query().Equals("cloudregion_id", region.Id).Endswith("external_id", suffix)
count, err := q.CountWithError()
if err != nil {
return nil, err
}
if count > 1 {
return nil, fmt.Errorf("duplicate zone with suffix %s in region %s", suffix, region.Name)
}
if count == 0 {
return nil, fmt.Errorf("failed to found zone with suffix %s in region %s", suffix, region.Name)
}
zone := &SZone{}
return zone, q.First(zone)
}

func (manager *SDBInstanceSkuManager) newFromCloudSku(ctx context.Context, userCred mcclient.TokenCredential, isku SDBInstanceSku, region *SCloudregion) error {
sku := &isku
sku.SetModelManager(manager, sku)
sku.Id = "" //避免使用yunion meta的id,导致出现duplicate entry问题
sku.CloudregionId = region.Id

if len(isku.Zone1) > 0 {
zone, err := manager.getZoneBySuffix(region, isku.Zone1)
if err != nil {
return errors.Wrapf(err, "failed to get zone1 info by %s", isku.Zone1)
}
sku.Zone1 = zone.Id
}

if len(isku.Zone2) > 0 {
zone, err := manager.getZoneBySuffix(region, isku.Zone2)
if err != nil {
return errors.Wrapf(err, "failed to get zone1 info by %s", isku.Zone2)
}
sku.Zone2 = zone.Id
}

if len(isku.Zone3) > 0 {
zone, err := manager.getZoneBySuffix(region, isku.Zone3)
if err != nil {
return errors.Wrapf(err, "failed to get zone1 info by %s", isku.Zone3)
}
sku.Zone3 = zone.Id
}

return manager.TableSpec().Insert(ctx, sku)
}

Expand Down
3 changes: 1 addition & 2 deletions pkg/compute/models/elasticcache_skus.go
Original file line number Diff line number Diff line change
Expand Up @@ -383,8 +383,7 @@ func (manager *SElasticcacheSkuManager) SyncElasticcacheSkus(ctx context.Context

syncResult := compare.SyncResult{}

extSkuMeta.SetRegionFilter(region)
extSkus, err := extSkuMeta.GetElasticCacheSkus()
extSkus, err := extSkuMeta.GetElasticCacheSkusByRegionExternalId(region.ExternalId)
if err != nil {
syncResult.Error(err)
return syncResult
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/skus.go
Original file line number Diff line number Diff line change
Expand Up @@ -1237,7 +1237,7 @@ func (manager *SServerSkuManager) SyncServerSkus(ctx context.Context, userCred m

syncResult := compare.SyncResult{}

extSkus, err := extSkuMeta.GetServerSkus(region)
extSkus, err := extSkuMeta.GetServerSkusByRegionExternalId(region.ExternalId)
if err != nil {
syncResult.Error(err)
return syncResult
Expand Down

0 comments on commit 0442751

Please sign in to comment.