mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
add clean invalid sku job
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user