que-scheduler 3.1.1 → 3.2.1
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 +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
|