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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 06b6f5ebd900c51a93128ec3927fecfa21b94121941ea24bf6b1fab012108ef2
4
- data.tar.gz: ce6d5d824bbb0861eadafe00d3a0984e8f9fd3dfabd7491a73def267ece8162a
2
+ SHA1:
3
+ metadata.gz: 6f254bc8751dac98fee9686fd5c239e9e57582fb
4
+ data.tar.gz: 4aa6fddb651b9f99b02bb75fcd2a2e8aa4f904f4
5
5
  SHA512:
6
- metadata.gz: 8cb8c5cf44d7363503c2f9a6960fbb8363d2e69401680d7b8fc0a3648fe902d7f5748663e4bfa14558664ddb3e2d3337cae0e5e1456d6577a867b7714cd221c6
7
- data.tar.gz: f12ac6c79a998c5c4b868ef9fd2bf847a64d99f8d10853f39c2b3f1e0021cab5dda5c945d0b94aa1581f4a2f7f55cda4c06d25f5133aadf945bd0788db9ec623
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
- `que_scheduler_audit`. The first tracks when the scheduler calculated what was necessary to run
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.
@@ -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 = '#{Que::Scheduler::SchedulerJob.name}'"
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 0 if Que::Scheduler::Db.count_schedulers.zero?
28
- return 1 unless audit_table_exists?
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
- assert_one_scheduler_job
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
@@ -1,5 +1,5 @@
1
1
  module Que
2
2
  module Scheduler
3
- VERSION = '3.1.1'.freeze
3
+ VERSION = '3.2.1'.freeze
4
4
  end
5
5
  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.1.1
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-06-05 00:00:00.000000000 Z
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: '3.0'
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: '3.0'
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: '3.0'
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: '3.0'
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.7.6
360
+ rubygems_version: 2.6.14.1
346
361
  signing_key:
347
362
  specification_version: 4
348
363
  summary: A cron scheduler for Que