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 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