From 7c84cd51e3da1cf4f8c192b675efc6caad484928 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Tue, 4 Dec 2018 23:33:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=EF=BC=9AcronJob=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20startRun=20=E7=9A=84=E5=BC=80=E5=85=B3=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9Ctrue=EF=BC=8C=E5=88=99=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E4=B8=80=E5=90=AF=E5=8A=A8=E5=B0=B1=E8=BF=90=E8=A1=8C=E4=B8=80?= =?UTF-8?q?=E6=AC=A1job=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/cronman/cronman.go | 24 ++++++++++++++++-------- pkg/compute/models/skus.go | 2 +- pkg/compute/service/service.go | 4 ++-- pkg/compute/skus/skus.go | 2 ++ 4 files changed, 21 insertions(+), 11 deletions(-) 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"