Merge pull request #755 in YUNIONIO/onecloud from ~TANGBIN/onecloud:bugfix/tb-skus-table-update to release/2.4.0

* commit '17ec3fecb06dd64dcd8bd57e5e412fc710b06d54':
  skus delete query fix
  delete invalid sku while sync skus
  add clean invalid sku job
This commit is contained in:
邱剑
2018-12-14 12:34:33 +08:00
2 changed files with 33 additions and 0 deletions
+27
View File
@@ -536,3 +536,30 @@ func (manager *SServerSkuManager) GetSkuCountByProvider(provider string) int {
return q.Count()
}
// 删除表中zone not found的记录
func (manager *SServerSkuManager) PendingDeleteInvalidSku() error {
sq := ZoneManager.Query("id").Distinct().SubQuery()
skus := make([]SServerSku, 0)
q := manager.Query()
q = q.NotIn("zone_id", sq).IsNotEmpty("zone_id")
err := db.FetchModelObjects(manager, q, &skus)
if err != nil {
log.Errorf(err.Error())
return httperrors.NewInternalServerError("query sku list failed.")
}
for i := range skus {
sku := skus[i]
_, err = manager.TableSpec().Update(&sku, func() error {
return sku.MarkDelete()
})
if err != nil {
log.Errorf(err.Error())
return httperrors.NewInternalServerError("delete sku %s failed.", sku.Id)
}
}
return nil
}
+6
View File
@@ -306,6 +306,7 @@ func (self *SkusZoneList) SyncToLocalDB() error {
return err
}
// 全量同步sku列表.
func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
if isStart {
if models.ServerSkuManager.GetSkuCountByProvider("") > 0 {
@@ -320,8 +321,13 @@ func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bo
if e := skus.SyncToLocalDB(); e != nil {
log.Errorf("SyncSkus sync to local db failed, %s", e.Error())
}
// 清理无效的sku
log.Debugf("DeleteInvalidSkus in processing...")
models.ServerSkuManager.PendingDeleteInvalidSku()
}
// 同步指定provider sku列表
func SyncSkusByProviderIds(providerIds []string) error {
skus := SkusZoneList{}
log.Debugf("SyncSkusByProviderIds %s", providerIds)