que-scheduler 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/que/scheduler/scheduler_job.rb +49 -23
- data/lib/que/scheduler/version.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0e9f48536b268d1387f247f8a7ee52a55dbfef5
|
4
|
+
data.tar.gz: 148ab173c0eb5c22a6cfd6bf83fb7e846570c705
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 508e5271f7f35b62b6704a4f7633d026e149ede22f7f6497af8296aed7fd5c1bfcd8d1fbdd6b4ce4ec03adc59dedae195500830453038bfe0f33fb77c99f49ec
|
7
|
+
data.tar.gz: f18b35343f7a9075db5771b2c2f2917fb49df8efcd81fe055e5c048e2742d21623051291d81f5527af7b15664e178cd3eeac9516cc96d5c11060cf1e233e593f
|
@@ -24,8 +24,15 @@ module Que
|
|
24
24
|
::ActiveRecord::Base.transaction do
|
25
25
|
scheduler_job_args = SchedulerJobArgs.prepare_scheduler_job_args(options)
|
26
26
|
logs = ["que-scheduler last ran at #{scheduler_job_args.last_run_time}."]
|
27
|
-
|
28
|
-
|
27
|
+
|
28
|
+
# It's possible one worker node has severe clock skew, and reports a time earlier than
|
29
|
+
# the last run. If so, log, and rescheduled with the same last run at.
|
30
|
+
if scheduler_job_args.as_time < scheduler_job_args.last_run_time
|
31
|
+
SchedulerJob.handle_clock_skew(scheduler_job_args, logs)
|
32
|
+
else
|
33
|
+
# Otherwise, run as normal
|
34
|
+
SchedulerJob.handle_normal_call(scheduler_job_args, logs)
|
35
|
+
end
|
29
36
|
|
30
37
|
# Only now we're sure nothing errored, log the results
|
31
38
|
logs.each { |str| Que.log(message: str) }
|
@@ -35,27 +42,6 @@ module Que
|
|
35
42
|
|
36
43
|
private
|
37
44
|
|
38
|
-
def enqueue_required_jobs(scheduler_job_args, logs)
|
39
|
-
# Obtain the hash of missed jobs. Keys are the job classes, and the values are arrays
|
40
|
-
# each containing more arrays for the arguments of that instance.
|
41
|
-
result = ScheduleParser.parse(SchedulerJob.scheduler_config, scheduler_job_args)
|
42
|
-
result.missed_jobs.each do |job_class, args_arrays|
|
43
|
-
args_arrays.each do |args|
|
44
|
-
logs << "que-scheduler enqueueing #{job_class} with options: #{args}"
|
45
|
-
job_class.enqueue(*args)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
result
|
49
|
-
end
|
50
|
-
|
51
|
-
def enqueue_self_again(scheduler_job_args, new_job_dictionary)
|
52
|
-
SchedulerJob.enqueue(
|
53
|
-
last_run_time: scheduler_job_args.as_time.iso8601,
|
54
|
-
job_dictionary: new_job_dictionary,
|
55
|
-
run_at: scheduler_job_args.as_time.beginning_of_minute + SCHEDULER_FREQUENCY
|
56
|
-
)
|
57
|
-
end
|
58
|
-
|
59
45
|
class << self
|
60
46
|
def scheduler_config
|
61
47
|
@scheduler_config ||= begin
|
@@ -80,6 +66,46 @@ module Que
|
|
80
66
|
)
|
81
67
|
end
|
82
68
|
end
|
69
|
+
|
70
|
+
def handle_normal_call(scheduler_job_args, logs)
|
71
|
+
result = enqueue_required_jobs(scheduler_job_args, logs)
|
72
|
+
enqueue_self_again(
|
73
|
+
scheduler_job_args.as_time,
|
74
|
+
scheduler_job_args.as_time,
|
75
|
+
result.schedule_dictionary
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
def enqueue_required_jobs(scheduler_job_args, logs)
|
80
|
+
# Obtain the hash of missed jobs. Keys are the job classes, and the values are arrays
|
81
|
+
# each containing more arrays for the arguments of that instance.
|
82
|
+
result = ScheduleParser.parse(SchedulerJob.scheduler_config, scheduler_job_args)
|
83
|
+
result.missed_jobs.each do |job_class, args_arrays|
|
84
|
+
args_arrays.each do |args|
|
85
|
+
logs << "que-scheduler enqueueing #{job_class} with options: #{args}"
|
86
|
+
job_class.enqueue(*args)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
result
|
90
|
+
end
|
91
|
+
|
92
|
+
def enqueue_self_again(last_full_execution, this_run_time, new_job_dictionary)
|
93
|
+
SchedulerJob.enqueue(
|
94
|
+
last_run_time: last_full_execution.iso8601,
|
95
|
+
job_dictionary: new_job_dictionary,
|
96
|
+
run_at: this_run_time.beginning_of_minute + SCHEDULER_FREQUENCY
|
97
|
+
)
|
98
|
+
end
|
99
|
+
|
100
|
+
def handle_clock_skew(scheduler_job_args, logs)
|
101
|
+
logs << 'que-scheduler detected worker with time older than last run. ' \
|
102
|
+
'Rescheduling without enqueueing jobs.'
|
103
|
+
enqueue_self_again(
|
104
|
+
scheduler_job_args.last_run_time,
|
105
|
+
scheduler_job_args.as_time,
|
106
|
+
scheduler_job_args.job_dictionary
|
107
|
+
)
|
108
|
+
end
|
83
109
|
end
|
84
110
|
end
|
85
111
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: que-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harry Lascelles
|
@@ -25,61 +25,61 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: backports
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: fugit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: hashie
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: que
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0.10'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0.10'
|
83
83
|
description: A lightweight cron scheduler for the async job worker Que
|
84
84
|
email:
|
85
85
|
- harry@harrylascelles.com
|