diff --git a/pkg/cloudcommon/cronman/cronman.go b/pkg/cloudcommon/cronman/cronman.go index 6693eae89c..4e257b1b1a 100644 --- a/pkg/cloudcommon/cronman/cronman.go +++ b/pkg/cloudcommon/cronman/cronman.go @@ -42,10 +42,11 @@ func (t *Timer2) Next(now time.Time) time.Time { } type SCronJob struct { - Name string - job func(ctx context.Context, userCred mcclient.TokenCredential) - Timer ICronTimer - Next time.Time + Name string + job func(ctx context.Context, userCred mcclient.TokenCredential) + Timer ICronTimer + Next time.Time + StartRun bool } type CronJobTimerHeap []*SCronJob @@ -107,7 +108,7 @@ func (self *SCronJobManager) AddJob1(name string, interval time.Duration, jobFun } } -func (self *SCronJobManager) AddJob2(name string, day, hour, min, sec int, jobFunc func(ctx context.Context, userCred mcclient.TokenCredential)) { +func (self *SCronJobManager) AddJob2(name string, day, hour, min, sec int, jobFunc func(ctx context.Context, userCred mcclient.TokenCredential), startRun bool) { t := Timer2{ day: day, hour: hour, @@ -115,9 +116,10 @@ func (self *SCronJobManager) AddJob2(name string, day, hour, min, sec int, jobFu sec: sec, } job := SCronJob{ - Name: name, - job: jobFunc, - Timer: &t, + Name: name, + job: jobFunc, + Timer: &t, + StartRun: startRun, } if !self.running { self.jobs = append(self.jobs, &job) @@ -155,6 +157,12 @@ func (self *SCronJobManager) run() { } else { timer = time.NewTimer(self.jobs[0].Next.Sub(now)) } + for i := 0; i < len(self.jobs); i += 1 { + if self.jobs[i].StartRun { + self.jobs[i].StartRun = false + self.jobs[i].runJob() + } + } select { case now = <-timer.C: for i, job := range self.jobs { diff --git a/pkg/compute/models/skus.go b/pkg/compute/models/skus.go index e6141042f3..276504c5fb 100644 --- a/pkg/compute/models/skus.go +++ b/pkg/compute/models/skus.go @@ -4,9 +4,9 @@ import ( "context" "database/sql" + "yunion.io/x/jsonutils" "yunion.io/x/sqlchemy" - "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" diff --git a/pkg/compute/service/service.go b/pkg/compute/service/service.go index 0779e85ce4..92fb761069 100644 --- a/pkg/compute/service/service.go +++ b/pkg/compute/service/service.go @@ -59,8 +59,8 @@ func StartService() { cron.AddJob1("CleanPendingDeleteServers", time.Duration(options.Options.PendingDeleteCheckSeconds)*time.Second, models.GuestManager.CleanPendingDeleteServers) cron.AddJob1("CleanPendingDeleteDisks", time.Duration(options.Options.PendingDeleteCheckSeconds)*time.Second, models.DiskManager.CleanPendingDeleteDisks) cron.AddJob1("CleanPendingDeleteLoadbalancers", time.Duration(options.Options.LoadbalancerPendingDeleteCheckInterval)*time.Second, models.LoadbalancerAgentManager.CleanPendingDeleteLoadbalancers) - cron.AddJob2("AutoDiskSnapshot", options.Options.AutoSnapshotDay, options.Options.AutoSnapshotHour, 0, 0, models.DiskManager.AutoDiskSnapshot) - cron.AddJob2("SyncSkus", options.Options.SyncSkusDay, options.Options.SyncSkusHour, 0, 0, skus.SyncSkus) + 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.Start() defer cron.Stop() diff --git a/pkg/compute/skus/skus.go b/pkg/compute/skus/skus.go index b0cddd6cee..23cd3ce508 100644 --- a/pkg/compute/skus/skus.go +++ b/pkg/compute/skus/skus.go @@ -5,8 +5,10 @@ import ( "database/sql" "fmt" "strings" + "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/compute/options"