Merge pull request #665 in YUNIONIO/onecloud from ~QIUJIAN/onecloud:hotfix/qj-cronjob-run-on-startup-option to release/2.4.0

* commit '7c84cd51e3da1cf4f8c192b675efc6caad484928':
  改进:cronJob增加 startRun 的开关,如果true,则程序一启动就运行一次job。
This commit is contained in:
邱剑
2018-12-05 10:54:58 +08:00
4 changed files with 21 additions and 11 deletions
+16 -8
View File
@@ -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 {
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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()
+2
View File
@@ -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"