que-scheduler 3.2.2 → 3.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +13 -7
- data/lib/que/scheduler/migrations.rb +9 -7
- data/lib/que/scheduler/state_checks.rb +2 -0
- data/lib/que/scheduler/version.rb +1 -1
- metadata +25 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 15498dda40836c4e4f447f78a2cb5f259df54a2ba6be22d24c4343a3fffad2d1
|
4
|
+
data.tar.gz: b23b41708e1dd364fdd7a101ecdb7a5b6899ea9fad78fe6ca2ff3470db0f08dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28d70ce26b05e89c0b72ac8ca20b5e730891e032a5bf9a5f3d9e187e145f5f9d5e5ae357bdee1ad752ee11086ef1c9c7188c511adda85bd4ba9abb34d9cc54be
|
7
|
+
data.tar.gz: 7a53a1bd6d4c56c105172ccb2e9a2aa70ab862691bda8473b9476444c3afd4a382f1b0177daa325583cda54719c48ff99f2409bff6f34a29cb64d9cb7029d763
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@ que-scheduler
|
|
2
2
|
================
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/que-scheduler.svg)](https://badge.fury.io/rb/que-scheduler)
|
5
|
-
[![Build
|
5
|
+
[![Build status](https://gitlab.com/hlascelles/que-scheduler/badges/master/pipeline.svg)](https://gitlab.com/hlascelles/que-scheduler/pipelines)
|
6
6
|
[![Coverage Status](https://coveralls.io/repos/github/hlascelles/que-scheduler/badge.svg?branch=master)](https://coveralls.io/github/hlascelles/que-scheduler?branch=master)
|
7
7
|
[![Code Climate Maintainability](https://api.codeclimate.com/v1/badges/710d2fc5202f95d76e8a/maintainability)](https://codeclimate.com/github/hlascelles/que-scheduler/maintainability)
|
8
8
|
|
@@ -86,11 +86,13 @@ all_options_job:
|
|
86
86
|
priority: 25
|
87
87
|
args: ['open']
|
88
88
|
|
89
|
-
# Ensure you never miss a job, even after downtime
|
89
|
+
# Ensure you never miss a job, even after downtime, by using "schedule_type: every_event"
|
90
90
|
DailyBatchReport:
|
91
91
|
cron: "0 3 * * *"
|
92
|
-
# This job will be run every day
|
93
|
-
#
|
92
|
+
# This job will be run every day at 03:00 as normal.
|
93
|
+
# However, the "schedule_type: every_event" setting below will ensure that if workers are offline
|
94
|
+
# for any amount of time then the bcaklog will always be enqueued on recovery.
|
95
|
+
# See "Schedule types" below for more information.
|
94
96
|
schedule_type: every_event
|
95
97
|
```
|
96
98
|
|
@@ -104,11 +106,15 @@ A job can have a `schedule_type` assigned to it. Valid values are:
|
|
104
106
|
the way resque-scheduler would perform if it were taken down for some time.
|
105
107
|
1. `every_event` - Every cron match will result in a job being scheduled. If multiple cron times go
|
106
108
|
by during an extended period of downtime, then a job will be scheduled for every one missed on
|
107
|
-
startup. This `schedule_type` should be used for
|
109
|
+
startup. This `schedule_type` should be used for regular batch jobs that need to know which time
|
108
110
|
they are running a batch for. The job will always be scheduled with an ISO8601 string of the cron
|
109
111
|
that matched as the first argument.
|
110
|
-
|
111
|
-
|
112
|
+
|
113
|
+
An example would be an eventing DailyReportJob which summarises a day's sales. If no jobs run for
|
114
|
+
a few days due to a technical failure, then on recovery a report would still be needed for each
|
115
|
+
individual day. "schedule_type: every_event" would ensure this happens.
|
116
|
+
|
117
|
+
This feature ensures that jobs which *must run* for a certain cron match will always eventually
|
112
118
|
execute, even after a total system crash, or even a DB backup restore.
|
113
119
|
|
114
120
|
## Gem configuration
|
@@ -28,9 +28,17 @@ module Que
|
|
28
28
|
|
29
29
|
def db_version
|
30
30
|
return Que.execute(TABLE_COMMENT).first[:description].to_i if audit_table_exists?
|
31
|
+
|
31
32
|
Que::Scheduler::Db.count_schedulers.zero? ? 0 : 1
|
32
33
|
end
|
33
34
|
|
35
|
+
def audit_table_exists?
|
36
|
+
result = Que.execute(<<-SQL)
|
37
|
+
SELECT * FROM information_schema.tables WHERE table_name = '#{AUDIT_TABLE_NAME}';
|
38
|
+
SQL
|
39
|
+
result.any?
|
40
|
+
end
|
41
|
+
|
34
42
|
private
|
35
43
|
|
36
44
|
def migrate_up(current, version)
|
@@ -46,17 +54,11 @@ module Que
|
|
46
54
|
def execute_step(number, direction)
|
47
55
|
Que.execute(IO.read("#{__dir__}/migrations/#{number}/#{direction}.sql"))
|
48
56
|
return unless audit_table_exists?
|
57
|
+
|
49
58
|
Que.execute(
|
50
59
|
"COMMENT ON TABLE que_scheduler_audit IS '#{direction == :up ? number : number - 1}'"
|
51
60
|
)
|
52
61
|
end
|
53
|
-
|
54
|
-
def audit_table_exists?
|
55
|
-
result = Que.execute(<<-SQL)
|
56
|
-
SELECT * FROM information_schema.tables WHERE table_name = '#{AUDIT_TABLE_NAME}';
|
57
|
-
SQL
|
58
|
-
result.any?
|
59
|
-
end
|
60
62
|
end
|
61
63
|
end
|
62
64
|
end
|
@@ -16,6 +16,7 @@ module Que
|
|
16
16
|
def assert_db_migrated
|
17
17
|
db_version = Que::Scheduler::Migrations.db_version
|
18
18
|
return if db_version == Que::Scheduler::Migrations::MAX_VERSION
|
19
|
+
|
19
20
|
raise(<<-ERR)
|
20
21
|
The que-scheduler db migration state was found to be #{db_version}. It should be #{Que::Scheduler::Migrations::MAX_VERSION}.
|
21
22
|
|
@@ -47,6 +48,7 @@ module Que
|
|
47
48
|
def assert_one_scheduler_job
|
48
49
|
schedulers = Que::Scheduler::Db.count_schedulers
|
49
50
|
return if schedulers == 1
|
51
|
+
|
50
52
|
raise(<<-ERR)
|
51
53
|
Only one #{Que::Scheduler::SchedulerJob.name} should be enqueued. #{schedulers} were found.
|
52
54
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: que-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harry Lascelles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -45,6 +45,9 @@ dependencies:
|
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.1'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 1.1.8
|
48
51
|
type: :runtime
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -52,6 +55,9 @@ dependencies:
|
|
52
55
|
- - "~>"
|
53
56
|
- !ruby/object:Gem::Version
|
54
57
|
version: '1.1'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.1.8
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: hashie
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,20 +114,6 @@ dependencies:
|
|
108
114
|
- - ">="
|
109
115
|
- !ruby/object:Gem::Version
|
110
116
|
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: bundler
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
117
|
- !ruby/object:Gem::Dependency
|
126
118
|
name: combustion
|
127
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,6 +198,20 @@ dependencies:
|
|
206
198
|
- - ">="
|
207
199
|
- !ruby/object:Gem::Version
|
208
200
|
version: '0'
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: psych
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - "~>"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: 3.0.0
|
208
|
+
type: :development
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 3.0.0
|
209
215
|
- !ruby/object:Gem::Dependency
|
210
216
|
name: rake
|
211
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,14 +260,14 @@ dependencies:
|
|
254
260
|
requirements:
|
255
261
|
- - "~>"
|
256
262
|
- !ruby/object:Gem::Version
|
257
|
-
version: 0.
|
263
|
+
version: '0.61'
|
258
264
|
type: :development
|
259
265
|
prerelease: false
|
260
266
|
version_requirements: !ruby/object:Gem::Requirement
|
261
267
|
requirements:
|
262
268
|
- - "~>"
|
263
269
|
- !ruby/object:Gem::Version
|
264
|
-
version: 0.
|
270
|
+
version: '0.61'
|
265
271
|
- !ruby/object:Gem::Dependency
|
266
272
|
name: sqlite3
|
267
273
|
requirement: !ruby/object:Gem::Requirement
|
@@ -358,7 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
358
364
|
version: '0'
|
359
365
|
requirements: []
|
360
366
|
rubyforge_project:
|
361
|
-
rubygems_version: 2.6
|
367
|
+
rubygems_version: 2.7.6
|
362
368
|
signing_key:
|
363
369
|
specification_version: 4
|
364
370
|
summary: A cron scheduler for Que
|