Skip to content

Commit bb43b5e

Browse files
committed
cron compensator judge cron start time before execute
1 parent e9ffe30 commit bb43b5e

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

modules/pipeline/services/pipelinesvc/cron.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ func (s *PipelineSvc) RunCronPipelineFunc(id uint64) {
5656
return
5757
}
5858

59-
// 如果当前触发时间小于定时开始时间,return
60-
if pc.Extra.CronStartFrom != nil && cronTriggerTime.Before(*pc.Extra.CronStartFrom) {
59+
// if trigger time less than cronStartFrom, return directly
60+
if s.isCronShouldBeIgnored(pc) {
6161
logrus.Warnf("crond: pipelineCronID: %d, triggered but ignored, triggerTime: %s, cronStartFrom: %s",
6262
pc.ID, cronTriggerTime, *pc.Extra.CronStartFrom)
6363
return

modules/pipeline/services/pipelinesvc/cron_compensate.go

+18-3
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,21 @@ func (s *PipelineSvc) traverseDoCompensate(doCompensate func(cron spec.PipelineC
154154
}
155155

156156
group := limit_sync_group.NewSemaphore(int(conf.CronCompensateConcurrentNumber()))
157-
for i := range enabledCrons {
157+
for _, pc := range enabledCrons {
158+
if s.isCronShouldBeIgnored(pc) {
159+
triggerTime := time.Now()
160+
logrus.Warnf("crond compensator: pipelineCronID: %d, triggered compensate but ignored, triggerTime: %s, cronStartFrom: %s",
161+
pc.ID, triggerTime, *pc.Extra.CronStartFrom)
162+
continue
163+
}
158164
if sync {
159-
doCompensate(enabledCrons[i])
165+
doCompensate(pc)
160166
} else {
161167
group.Add(1)
162168
go func(pc spec.PipelineCron) {
163169
defer group.Done()
164170
doCompensate(pc)
165-
}(enabledCrons[i])
171+
}(pc)
166172
}
167173
}
168174
group.Wait()
@@ -464,3 +470,12 @@ func (s *PipelineSvc) createCronCompensatePipeline(pc spec.PipelineCron, trigger
464470
},
465471
})
466472
}
473+
474+
// isCronShouldIgnore if trigger time before cron start from time, should ignore cron at this trigger time
475+
func (s *PipelineSvc) isCronShouldBeIgnored(pc spec.PipelineCron) bool {
476+
if pc.Extra.CronStartFrom == nil {
477+
return false
478+
}
479+
triggerTime := time.Now()
480+
return triggerTime.Before(*pc.Extra.CronStartFrom)
481+
}

modules/pipeline/services/pipelinesvc/cron_compensate_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,14 @@ func TestGetTriggeredTime(t *testing.T) {
221221
triggerTime := getTriggeredTime(p)
222222
assert.Equal(t, now.Unix(), triggerTime.Unix())
223223
}
224+
225+
func Test_isCronShouldBeIgnored(t *testing.T) {
226+
emptyStartTimeCron := spec.PipelineCron{}
227+
startTime := time.Date(2099, 1, 1, 1, 1, 1, 1, time.Local)
228+
startTimeCron := spec.PipelineCron{Extra: spec.PipelineCronExtra{
229+
CronStartFrom: &startTime,
230+
}}
231+
svc := PipelineSvc{}
232+
assert.Equal(t, false, svc.isCronShouldBeIgnored(emptyStartTimeCron))
233+
assert.Equal(t, true, svc.isCronShouldBeIgnored(startTimeCron))
234+
}

0 commit comments

Comments
 (0)