que-scheduler 3.1.1 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +2 -1
- data/lib/que/scheduler/db.rb +3 -1
- data/lib/que/scheduler/migrations.rb +2 -3
- data/lib/que/scheduler/scheduler_job.rb +3 -7
- data/lib/que/scheduler/state_checks.rb +63 -0
- data/lib/que/scheduler/version.rb +1 -1
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6f254bc8751dac98fee9686fd5c239e9e57582fb
|
4
|
+
data.tar.gz: 4aa6fddb651b9f99b02bb75fcd2a2e8aa4f904f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68aa99ec22631df458f58dc2c76bd57ecbf580982e7cb4389e703cdfcb90a4850099ca7a958ae96c80f089804d0ed200419536e123639efc56000da51ab8614c
|
7
|
+
data.tar.gz: f3a19e704d97f15b84d0b550c2220a2beeb475b36d9bb8c499794f0f655cd42922d9a9472e09be93462705d7022e85b6ba81ca44fa95131346d3ab5d04b2b4c3
|
data/README.md
CHANGED
@@ -180,7 +180,7 @@ As of migration `4`, two elements are added to the DB for que-scheduler to run.
|
|
180
180
|
1. The first is the scheduler job itself, which runs forever, re-enqueuing itself to performs its
|
181
181
|
duties.
|
182
182
|
1. The second part comprises the audit table `que_scheduler_audit` and the "enqueued" table
|
183
|
-
`
|
183
|
+
`que_scheduler_audit_enqueued`. The first tracks when the scheduler calculated what was necessary to run
|
184
184
|
(if anything). The second then logs every job that the scheduler enqueues.
|
185
185
|
|
186
186
|
## Upgrading
|
@@ -195,6 +195,7 @@ the root of the project.
|
|
195
195
|
#### Versions 3.x
|
196
196
|
- Addition of a config initializer.
|
197
197
|
- Addition of numerous extra columns to the audit table.
|
198
|
+
- Drop support for ruby 2.1 and rails 3.x
|
198
199
|
- Required cumulative migration: `Que::Scheduler::Migrations.migrate!(version: 4)`
|
199
200
|
#### Versions 2.x
|
200
201
|
- Introduction of the audit table.
|
data/lib/que/scheduler/db.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'config'
|
4
|
+
|
3
5
|
module Que
|
4
6
|
module Scheduler
|
5
7
|
module Db
|
6
8
|
SCHEDULER_COUNT_SQL =
|
7
|
-
"SELECT COUNT(*) FROM que_jobs WHERE job_class = '
|
9
|
+
"SELECT COUNT(*) FROM que_jobs WHERE job_class = 'Que::Scheduler::SchedulerJob'"
|
8
10
|
NOW_SQL = 'SELECT now()'
|
9
11
|
|
10
12
|
class << self
|
@@ -24,9 +24,8 @@ module Que
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def db_version
|
27
|
-
return
|
28
|
-
|
29
|
-
Que.execute(TABLE_COMMENT).first[:description].to_i
|
27
|
+
return Que.execute(TABLE_COMMENT).first[:description].to_i if audit_table_exists?
|
28
|
+
Que::Scheduler::Db.count_schedulers.zero? ? 0 : 1
|
30
29
|
end
|
31
30
|
|
32
31
|
private
|
@@ -3,6 +3,7 @@ require 'que'
|
|
3
3
|
require_relative 'defined_job'
|
4
4
|
require_relative 'enqueueing_calculator'
|
5
5
|
require_relative 'scheduler_job_args'
|
6
|
+
require_relative 'state_checks'
|
6
7
|
|
7
8
|
# The main job that runs every minute, determining what needs to be enqueued, enqueues the required
|
8
9
|
# jobs, then re-enqueues itself.
|
@@ -16,7 +17,8 @@ module Que
|
|
16
17
|
|
17
18
|
def run(options = nil)
|
18
19
|
Que::Scheduler::Db.transaction do
|
19
|
-
|
20
|
+
Que::Scheduler::StateChecks.check
|
21
|
+
|
20
22
|
scheduler_job_args = SchedulerJobArgs.build(options)
|
21
23
|
logs = ["que-scheduler last ran at #{scheduler_job_args.last_run_time}."]
|
22
24
|
|
@@ -61,12 +63,6 @@ module Que
|
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
64
|
-
def assert_one_scheduler_job
|
65
|
-
schedulers = Que::Scheduler::Db.count_schedulers
|
66
|
-
return if schedulers == 1
|
67
|
-
raise "Only one #{self.class.name} should be enqueued. #{schedulers} were found."
|
68
|
-
end
|
69
|
-
|
70
66
|
def enqueue_self_again(scheduler_job_args, last_full_execution, job_dictionary, enqueued_jobs)
|
71
67
|
next_run_at = scheduler_job_args.as_time.beginning_of_minute + SCHEDULER_FREQUENCY
|
72
68
|
SchedulerJob.enqueue(
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative 'audit'
|
2
|
+
require_relative 'db'
|
3
|
+
require_relative 'migrations'
|
4
|
+
|
5
|
+
module Que
|
6
|
+
module Scheduler
|
7
|
+
module StateChecks
|
8
|
+
class << self
|
9
|
+
def check
|
10
|
+
assert_db_migrated
|
11
|
+
assert_one_scheduler_job
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def assert_db_migrated
|
17
|
+
db_version = Que::Scheduler::Migrations.db_version
|
18
|
+
return if db_version == Que::Scheduler::Migrations::MAX_VERSION
|
19
|
+
raise(<<-ERR)
|
20
|
+
The que-scheduler db migration state was found to be #{db_version}. It should be #{Que::Scheduler::Migrations::MAX_VERSION}.
|
21
|
+
|
22
|
+
que-scheduler adds some tables to the DB to provide an audit history of what was
|
23
|
+
enqueued when, and with what options and arguments. The structure of these tables is
|
24
|
+
versioned, and should match that version required by the gem.
|
25
|
+
|
26
|
+
The currently migrated version of the audit tables is held in a table COMMENT (much like
|
27
|
+
how que keeps track of its DB versions). You can check the current DB version by
|
28
|
+
querying the COMMENT on the #{Que::Scheduler::Audit::TABLE_NAME} table like this:
|
29
|
+
|
30
|
+
#{Que::Scheduler::Migrations::TABLE_COMMENT}
|
31
|
+
|
32
|
+
Or you can use ruby:
|
33
|
+
|
34
|
+
Que::Scheduler::Migrations.db_version
|
35
|
+
|
36
|
+
To bring the db version up to the current one required, add a migration like this. It
|
37
|
+
is cumulative, so one line is sufficient to perform all necessary steps.
|
38
|
+
|
39
|
+
class UpdateQueSchedulerSchema < ActiveRecord::Migration
|
40
|
+
def change
|
41
|
+
Que::Scheduler::Migrations.migrate!(version: #{Que::Scheduler::Migrations::MAX_VERSION})
|
42
|
+
end
|
43
|
+
end
|
44
|
+
ERR
|
45
|
+
end
|
46
|
+
|
47
|
+
def assert_one_scheduler_job
|
48
|
+
schedulers = Que::Scheduler::Db.count_schedulers
|
49
|
+
return if schedulers == 1
|
50
|
+
raise(<<-ERR)
|
51
|
+
Only one #{Que::Scheduler::SchedulerJob.name} should be enqueued. #{schedulers} were found.
|
52
|
+
|
53
|
+
que-scheduler works by running a self-enqueueing version of itself that determines which
|
54
|
+
jobs should be enqueued based on the provided config. If two or more que-schedulers were
|
55
|
+
to run at once, then duplicate jobs would occur.
|
56
|
+
|
57
|
+
To resolve this problem, please remove any duplicate scheduler jobs from the que_jobs table.
|
58
|
+
ERR
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
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.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harry Lascelles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: backports
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,28 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '4.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '4.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: appraisal
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -316,6 +330,7 @@ files:
|
|
316
330
|
- lib/que/scheduler/migrations/4/up.sql
|
317
331
|
- lib/que/scheduler/scheduler_job.rb
|
318
332
|
- lib/que/scheduler/scheduler_job_args.rb
|
333
|
+
- lib/que/scheduler/state_checks.rb
|
319
334
|
- lib/que/scheduler/version.rb
|
320
335
|
homepage: https://github.com/hlascelles/que-scheduler
|
321
336
|
licenses:
|
@@ -342,7 +357,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
357
|
version: '0'
|
343
358
|
requirements: []
|
344
359
|
rubyforge_project:
|
345
|
-
rubygems_version: 2.
|
360
|
+
rubygems_version: 2.6.14.1
|
346
361
|
signing_key:
|
347
362
|
specification_version: 4
|
348
363
|
summary: A cron scheduler for Que
|