Merge pull request #3595 from tb365/bugfix/tb-redis-skus-sync-1112

elastic cache sync bugfix
This commit is contained in:
yunion-ci-robot
2019-11-13 19:47:20 +08:00
committed by GitHub
7 changed files with 79 additions and 22 deletions
+21 -13
View File
@@ -110,24 +110,32 @@ func syncRegionSkus(ctx context.Context, userCred mcclient.TokenCredential, loca
log.Errorf("GetSkuCountByRegion fail %s", err)
return
}
if cnt > 0 {
return
}
// 提前同步instance type.如果同步失败可能导致vm 内存显示为0
if err = syncSkusByRegion(localRegion); err != nil {
msg := fmt.Sprintf("Get Skus for region %s failed %s", localRegion.GetName(), err)
log.Errorln(msg)
// 暂时不终止同步
// logSyncFailed(provider, task, msg)
return
if cnt == 0 {
// 提前同步instance type.如果同步失败可能导致vm 内存显示为0
if err = syncSkusByRegion(localRegion); err != nil {
msg := fmt.Sprintf("Get Skus for region %s failed %s", localRegion.GetName(), err)
log.Errorln(msg)
// 暂时不终止同步
// logSyncFailed(provider, task, msg)
return
}
_, err = modules.SchedManager.SyncSku(auth.GetAdminSession(ctx, options.Options.Region, ""), false)
if err != nil {
log.Errorf("SchedManager SyncSku %s", err)
}
}
_, err = modules.SchedManager.SyncSku(auth.GetAdminSession(ctx, options.Options.Region, ""), false)
cnt, err = ElasticcacheSkuManager.GetSkuCountByRegion(regionId)
if err != nil {
log.Errorf("SchedManager SyncSku %s", err)
log.Errorf("ElasticcacheSkuManager.GetSkuCountByRegion fail %s", err)
return
}
syncElasticCacheSkusByRegion(ctx, userCred, localRegion)
if cnt == 0 {
syncElasticCacheSkusByRegion(ctx, userCred, localRegion)
}
}
func syncProjects(ctx context.Context, userCred mcclient.TokenCredential, syncResults SSyncResultSet, driver cloudprovider.ICloudProvider, provider *SCloudprovider) {
@@ -121,6 +121,16 @@ func (self *SElasticcache) GetCustomizeColumns(ctx context.Context, userCred mcc
extra := self.SStatusStandaloneResourceBase.GetCustomizeColumns(ctx, userCred, query)
info := self.getCloudProviderInfo()
extra.Update(jsonutils.Marshal(&info))
vpc, err := VpcManager.FetchById(self.VpcId)
if err == nil {
extra.Set("vpc", jsonutils.NewString(vpc.GetName()))
}
network, err := NetworkManager.FetchById(self.NetworkId)
if err == nil {
extra.Set("network", jsonutils.NewString(network.GetName()))
}
return extra
}
+7 -1
View File
@@ -96,6 +96,12 @@ func (self *SElasticcacheSku) GetCustomizeColumns(ctx context.Context, userCred
return self.SStatusStandaloneResourceBase.GetCustomizeColumns(ctx, userCred, query)
}
func (manager *SElasticcacheSkuManager) GetSkuCountByRegion(regionId string) (int, error) {
q := manager.Query().Equals("cloudregion_id", regionId)
return q.CountWithError()
}
func (manager *SElasticcacheSkuManager) FetchCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, objs []db.IModel, fields stringutils2.SSortedStrings) []*jsonutils.JSONDict {
regions := map[string]string{}
for i := range objs {
@@ -189,7 +195,7 @@ func (manager *SElasticcacheSkuManager) FetchSkusByRegion(regionID string) ([]SE
return skus, nil
}
func (manager *SElasticcacheSkuManager) syncDBInstanceSkus(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, extSkuMeta *SSkuResourcesMeta) compare.SyncResult {
func (manager *SElasticcacheSkuManager) syncElasticcacheSkus(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, extSkuMeta *SSkuResourcesMeta) compare.SyncResult {
lockman.LockClass(ctx, manager, db.GetLockClassKey(manager, userCred))
defer lockman.ReleaseClass(ctx, manager, db.GetLockClassKey(manager, userCred))
+3 -4
View File
@@ -179,9 +179,8 @@ func (self *SSkuResourcesMeta) filterByRegion(items []jsonutils.JSONObject) []js
ret := []jsonutils.JSONObject{}
for i := range items {
item := items[i]
provider, _ := item.GetString("provider")
regionId, _ := item.GetString("cloudregion_id")
if self.region.GetExternalId() != fmt.Sprintf("%s/%s", provider, regionId) {
if self.region.GetExternalId() != strings.TrimSpace(regionId) {
continue
}
@@ -305,7 +304,7 @@ func SyncElasticCacheSkus(ctx context.Context, userCred mcclient.TokenCredential
for i := range cloudregions {
region := &cloudregions[i]
meta.SetRegionFilter(region)
result := ElasticcacheSkuManager.syncDBInstanceSkus(ctx, userCred, region, meta)
result := ElasticcacheSkuManager.syncElasticcacheSkus(ctx, userCred, region, meta)
notes := fmt.Sprintf("syncElasticCacheSkusByRegion %s result: %s", region.Name, result.Result())
log.Infof(notes)
}
@@ -320,7 +319,7 @@ func syncElasticCacheSkusByRegion(ctx context.Context, userCred mcclient.TokenCr
}
meta.SetRegionFilter(region)
result := ElasticcacheSkuManager.syncDBInstanceSkus(ctx, userCred, region, meta)
result := ElasticcacheSkuManager.syncElasticcacheSkus(ctx, userCred, region, meta)
notes := fmt.Sprintf("syncElasticCacheSkusByRegion %s result: %s", region.Name, result.Result())
log.Infof(notes)
}
@@ -32,11 +32,15 @@ type SElasticcacheAccount struct {
}
func (self *SElasticcacheAccount) GetId() string {
return fmt.Sprintf("%s/admin", self.cacheDB.InstanceID)
return fmt.Sprintf("%s/root", self.cacheDB.InstanceID)
}
func (self *SElasticcacheAccount) GetName() string {
return self.cacheDB.AccessUser
if len(self.cacheDB.AccessUser) > 0 {
return self.cacheDB.AccessUser
}
return "root"
}
func (self *SElasticcacheAccount) GetGlobalId() string {
@@ -17,6 +17,9 @@ package huawei
import (
"time"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/multicloud"
@@ -56,6 +59,20 @@ func (self *SElasticcacheBackup) GetGlobalId() string {
return self.GetId()
}
func (self *SElasticcacheBackup) Refresh() error {
cache, err := self.cacheDB.GetICloudElasticcacheBackup(self.GetId())
if err != nil {
return errors.Wrap(err, "ElasticcacheBackup.Refresh.GetICloudElasticcacheBackup")
}
err = jsonutils.Update(self, cache)
if err != nil {
return errors.Wrap(err, "ElasticcacheBackup.Refresh.Update")
}
return nil
}
func (self *SElasticcacheBackup) GetStatus() string {
switch self.Status {
case "waiting", "backuping":
+15 -2
View File
@@ -19,10 +19,9 @@ import (
"strings"
"time"
"github.com/pkg/errors"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/pkg/errors"
billing_api "yunion.io/x/onecloud/pkg/apis/billing"
api "yunion.io/x/onecloud/pkg/apis/compute"
@@ -98,6 +97,20 @@ func (self *SElasticcache) GetGlobalId() string {
return self.GetId()
}
func (self *SElasticcache) Refresh() error {
cache, err := self.region.GetElasticCache(self.GetId())
if err != nil {
return errors.Wrap(err, "Elasticcache.Refresh.GetElasticCache")
}
err = jsonutils.Update(self, cache)
if err != nil {
return errors.Wrap(err, "Elasticcache.Refresh.Update")
}
return nil
}
func (self *SElasticcache) GetStatus() string {
switch self.Status {
case "RUNNING":