add clean invalid sku job

This commit is contained in:
TangBin
2018-12-13 17:44:48 +08:00
parent 28fdd6437a
commit 34ed406ddd
3 changed files with 48 additions and 0 deletions
+37
View File
@@ -536,3 +536,40 @@ func (manager *SServerSkuManager) GetSkuCountByProvider(provider string) int {
return q.Count()
}
// 删除表中zone not found的记录
func (manager *SServerSkuManager) PendingDeleteInvalidSku() error {
zones := make([]SZone, 0)
err := ZoneManager.Query("id").Distinct().All(&zones)
if err != nil {
log.Errorf(err.Error())
return httperrors.NewInternalServerError("query zone list failed.")
}
zoneIds := []string{}
for _, zone := range zones {
zoneIds = append(zoneIds, zone.Id)
}
skus := make([]SServerSku, 0)
q := manager.Query()
err = q.NotIn("zone_id", zoneIds).All(&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
}
+1
View File
@@ -63,6 +63,7 @@ func StartService() {
cron.AddJob2("AutoDiskSnapshot", options.Options.AutoSnapshotDay, options.Options.AutoSnapshotHour, 0, 0, models.DiskManager.AutoDiskSnapshot, false)
cron.AddJob2("SyncSkus", options.Options.SyncSkusDay, options.Options.SyncSkusHour, 0, 0, skus.SyncSkus, true)
cron.AddJob2("CleanInvalidSkus", options.Options.SyncSkusDay, options.Options.SyncSkusHour, 0, 0, skus.DeleteInvalidSkus, true) // skus只在启动时进行清理
cron.Start()
defer cron.Stop()
+10
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 {
@@ -322,6 +323,7 @@ func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bo
}
}
// 同步指定provider sku列表
func SyncSkusByProviderIds(providerIds []string) error {
skus := SkusZoneList{}
log.Debugf("SyncSkusByProviderIds %s", providerIds)
@@ -335,3 +337,11 @@ func SyncSkusByProviderIds(providerIds []string) error {
return nil
}
// 伪删除无效的sku.只在启动进程时进行清理。
func DeleteInvalidSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
if isStart {
log.Debugf("DeleteInvalidSkus in processing...")
models.ServerSkuManager.PendingDeleteInvalidSku()
}
}