que-scheduler 3.4.0 → 3.4.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 +4 -4
- data/lib/que-scheduler.rb +1 -1
- data/lib/que/scheduler.rb +8 -8
- data/lib/que/scheduler/audit.rb +3 -3
- data/lib/que/scheduler/config.rb +3 -3
- data/lib/que/scheduler/db.rb +2 -2
- data/lib/que/scheduler/defined_job.rb +9 -9
- data/lib/que/scheduler/enqueueing_calculator.rb +1 -1
- data/lib/que/scheduler/jobs/que_scheduler_audit_clear_down_job.rb +4 -4
- data/lib/que/scheduler/schedule.rb +8 -8
- data/lib/que/scheduler/scheduler_job.rb +10 -10
- data/lib/que/scheduler/scheduler_job_args.rb +3 -3
- data/lib/que/scheduler/state_checks.rb +3 -3
- data/lib/que/scheduler/to_enqueue.rb +4 -4
- data/lib/que/scheduler/version.rb +1 -1
- data/lib/que/scheduler/version_support.rb +9 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf1ee6c62677a8c215d48d990da257e0f4854c8e6e354e1eae3e90fc0685b601
|
4
|
+
data.tar.gz: dd948edfb90841bc54fc0bb3fc9e725bf4127f1ca31c53654a209ed6d5332e42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ae4812d01e7ea24300afb6b76a5194f3a25a912852723e30cbc8a1405d1822e8fb543dee955049f87e3063a9ae8b322675e6bbb836c0ab9fe0cc46c119b180c
|
7
|
+
data.tar.gz: 7246c2709a90c3e2ac7e14a9a8ee2f91792f3cccf0f516ad2dc6f119ddcf025b9eb9324fcf4e3eb6f7b279646066a02693f2f1364773a34c3aed011e041012da
|
data/lib/que-scheduler.rb
CHANGED
data/lib/que/scheduler.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
1
|
+
require "que/scheduler/version"
|
2
|
+
require "que/scheduler/version_support"
|
3
|
+
require "que/scheduler/config"
|
4
|
+
require "que/scheduler/scheduler_job"
|
5
|
+
require "que/scheduler/db"
|
6
|
+
require "que/scheduler/audit"
|
7
|
+
require "que/scheduler/migrations"
|
8
|
+
require "que/scheduler/jobs/que_scheduler_audit_clear_down_job"
|
data/lib/que/scheduler/audit.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "to_enqueue"
|
4
4
|
|
5
5
|
module Que
|
6
6
|
module Scheduler
|
7
7
|
module Audit
|
8
|
-
TABLE_NAME =
|
9
|
-
ENQUEUED_TABLE_NAME =
|
8
|
+
TABLE_NAME = "que_scheduler_audit"
|
9
|
+
ENQUEUED_TABLE_NAME = "que_scheduler_audit_enqueued"
|
10
10
|
INSERT_AUDIT = %{
|
11
11
|
INSERT INTO #{TABLE_NAME} (scheduler_job_id, executed_at)
|
12
12
|
VALUES ($1::bigint, $2::timestamptz)
|
data/lib/que/scheduler/config.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
1
|
+
require "que"
|
2
|
+
require_relative "version_support"
|
3
3
|
|
4
4
|
module Que
|
5
5
|
module Scheduler
|
@@ -21,7 +21,7 @@ module Que
|
|
21
21
|
end
|
22
22
|
|
23
23
|
Que::Scheduler.configure do |config|
|
24
|
-
config.schedule_location = ENV.fetch(
|
24
|
+
config.schedule_location = ENV.fetch("QUE_SCHEDULER_CONFIG_LOCATION", "config/que_schedule.yml")
|
25
25
|
config.transaction_adapter = ::Que.method(:transaction)
|
26
26
|
config.que_scheduler_queue = Que::Scheduler::VersionSupport.default_scheduler_queue
|
27
27
|
end
|
data/lib/que/scheduler/db.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "config"
|
4
4
|
|
5
5
|
module Que
|
6
6
|
module Scheduler
|
7
7
|
module Db
|
8
8
|
SCHEDULER_COUNT_SQL =
|
9
9
|
"SELECT COUNT(*) FROM que_jobs WHERE job_class = 'Que::Scheduler::SchedulerJob'"
|
10
|
-
NOW_SQL =
|
10
|
+
NOW_SQL = "SELECT now()"
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def count_schedulers
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "hashie"
|
2
|
+
require "fugit"
|
3
3
|
|
4
4
|
# This is the definition of one scheduleable job in the que-scheduler config yml file.
|
5
5
|
module Que
|
@@ -59,10 +59,10 @@ module Que
|
|
59
59
|
# rubocop:disable Style/GuardClause This reads better as a conditional
|
60
60
|
def validate_fields_types(options)
|
61
61
|
unless queue.nil? || queue.is_a?(String)
|
62
|
-
err_field(:queue, options,
|
62
|
+
err_field(:queue, options, "queue must be a string")
|
63
63
|
end
|
64
64
|
unless priority.nil? || priority.is_a?(Integer)
|
65
|
-
err_field(:priority, options,
|
65
|
+
err_field(:priority, options, "priority must be an integer")
|
66
66
|
end
|
67
67
|
unless DEFINED_JOB_TYPES.include?(schedule_type)
|
68
68
|
err_field(:schedule_type, options, "Not in #{DEFINED_JOB_TYPES}")
|
@@ -71,10 +71,10 @@ module Que
|
|
71
71
|
# rubocop:enable Style/GuardClause
|
72
72
|
|
73
73
|
def validate_fields_presence(options)
|
74
|
-
err_field(:name, options,
|
75
|
-
err_field(:job_class, options,
|
74
|
+
err_field(:name, options, "name must be present") if name.nil?
|
75
|
+
err_field(:job_class, options, "job_class must be present") if job_class.nil?
|
76
76
|
# An invalid cron is nil
|
77
|
-
err_field(:cron, options,
|
77
|
+
err_field(:cron, options, "cron must be present") if cron.nil?
|
78
78
|
end
|
79
79
|
|
80
80
|
def validate_job_class_related(options)
|
@@ -88,7 +88,7 @@ module Que
|
|
88
88
|
if queue &&
|
89
89
|
Que::Scheduler::ToEnqueue.active_job_sufficient_version? &&
|
90
90
|
job_class < ::ActiveJob::Base &&
|
91
|
-
Que::Scheduler::ToEnqueue.active_job_version < Gem::Version.create(
|
91
|
+
Que::Scheduler::ToEnqueue.active_job_version < Gem::Version.create("6.0.3")
|
92
92
|
puts <<-ERR
|
93
93
|
WARNING from que-scheduler....
|
94
94
|
Between versions 4.2.3 and 6.0.2 (inclusive) Rails did not support setting queue names
|
@@ -104,7 +104,7 @@ module Que
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
-
def err_field(field, options, reason =
|
107
|
+
def err_field(field, options, reason = "")
|
108
108
|
schedule = Que::Scheduler.configuration.schedule_location
|
109
109
|
value = options[field]
|
110
110
|
raise "Invalid #{field} '#{value}' for '#{name}' in que-scheduler schedule #{schedule}.\n" \
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "que"
|
2
2
|
|
3
3
|
# This job can optionally be scheduled to clear down the que-scheduler audit log if it
|
4
4
|
# isn't required in the long term.
|
@@ -21,8 +21,8 @@ module Que
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
DELETE_AUDIT_ENQUEUED_SQL = build_sql(
|
25
|
-
DELETE_AUDIT_SQL = build_sql(
|
24
|
+
DELETE_AUDIT_ENQUEUED_SQL = build_sql("que_scheduler_audit_enqueued").freeze
|
25
|
+
DELETE_AUDIT_SQL = build_sql("que_scheduler_audit").freeze
|
26
26
|
|
27
27
|
# Very low priority
|
28
28
|
Que::Scheduler::VersionSupport.set_priority(self, 100)
|
@@ -36,7 +36,7 @@ module Que
|
|
36
36
|
# This will delete all but `retain_row_count` oldest rows
|
37
37
|
count = Que::Scheduler::VersionSupport.execute(DELETE_AUDIT_SQL, [retain_row_count])
|
38
38
|
log = "#{self.class} cleared down #{count.first.fetch(:count)} rows"
|
39
|
-
::Que.log(event:
|
39
|
+
::Que.log(event: "que-scheduler".to_sym, message: log)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "defined_job"
|
2
2
|
|
3
3
|
module Que
|
4
4
|
module Scheduler
|
@@ -30,11 +30,11 @@ module Que
|
|
30
30
|
# an array with one item which is that value (this includes if it is a hash). It could
|
31
31
|
# also be a single nil value.
|
32
32
|
args_array =
|
33
|
-
if !defined_job_hash.key?(
|
33
|
+
if !defined_job_hash.key?("args")
|
34
34
|
# No args were requested
|
35
35
|
[]
|
36
36
|
else
|
37
|
-
args = defined_job_hash[
|
37
|
+
args = defined_job_hash["args"]
|
38
38
|
if args.is_a?(Array)
|
39
39
|
# An array of args was requested
|
40
40
|
args
|
@@ -47,12 +47,12 @@ module Que
|
|
47
47
|
|
48
48
|
Que::Scheduler::DefinedJob.create(
|
49
49
|
name: name,
|
50
|
-
job_class: defined_job_hash[
|
51
|
-
queue: defined_job_hash[
|
50
|
+
job_class: defined_job_hash["class"] || name,
|
51
|
+
queue: defined_job_hash["queue"],
|
52
52
|
args_array: args_array,
|
53
|
-
priority: defined_job_hash[
|
54
|
-
cron: defined_job_hash[
|
55
|
-
schedule_type: defined_job_hash[
|
53
|
+
priority: defined_job_hash["priority"],
|
54
|
+
cron: defined_job_hash["cron"],
|
55
|
+
schedule_type: defined_job_hash["schedule_type"]&.to_sym
|
56
56
|
)
|
57
57
|
end
|
58
58
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require "que"
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
6
|
-
require_relative
|
7
|
-
require_relative
|
8
|
-
require_relative
|
3
|
+
require_relative "schedule"
|
4
|
+
require_relative "enqueueing_calculator"
|
5
|
+
require_relative "scheduler_job_args"
|
6
|
+
require_relative "state_checks"
|
7
|
+
require_relative "to_enqueue"
|
8
|
+
require_relative "version_support"
|
9
9
|
|
10
10
|
# The main job that runs every minute, determining what needs to be enqueued, enqueues the required
|
11
11
|
# jobs, then re-enqueues itself.
|
@@ -29,7 +29,7 @@ module Que
|
|
29
29
|
scheduler_job_args, scheduler_job_args.as_time, result.job_dictionary, enqueued_jobs
|
30
30
|
)
|
31
31
|
# Only now we're sure nothing errored, log the results
|
32
|
-
logs.each { |str| ::Que.log(event:
|
32
|
+
logs.each { |str| ::Que.log(event: "que-scheduler".to_sym, message: str) }
|
33
33
|
destroy
|
34
34
|
end
|
35
35
|
end
|
@@ -51,7 +51,7 @@ module Que
|
|
51
51
|
else
|
52
52
|
# This can happen if a middleware nixes the enqueue call
|
53
53
|
"que-scheduler called enqueue on #{to_enqueue.job_class} " \
|
54
|
-
|
54
|
+
"but it reported no job was scheduled. Has `enqueue` been overridden?"
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -71,7 +71,7 @@ module Que
|
|
71
71
|
|
72
72
|
# rubocop:disable Style/GuardClause This reads better as a conditional
|
73
73
|
unless Que::Scheduler::VersionSupport.job_attributes(enqueued_job).fetch(:job_id)
|
74
|
-
raise
|
74
|
+
raise "SchedulerJob could not self-schedule. Has `.enqueue` been monkey patched?"
|
75
75
|
end
|
76
76
|
# rubocop:enable Style/GuardClause
|
77
77
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "hashie"
|
2
|
+
require "active_support"
|
3
|
+
require "active_support/time_with_zone"
|
4
4
|
|
5
5
|
# These are the args that are used for this particular run of the scheduler.
|
6
6
|
module Que
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "que"
|
2
2
|
|
3
3
|
# This module uses polymorphic dispatch to centralise the differences between supporting Que::Job
|
4
4
|
# and other job systems.
|
@@ -23,13 +23,13 @@ module Que
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def active_job_version
|
26
|
-
Gem.loaded_specs[
|
26
|
+
Gem.loaded_specs["activejob"]&.version
|
27
27
|
end
|
28
28
|
|
29
29
|
def active_job_sufficient_version?
|
30
30
|
# ActiveJob 4.x does not support job_ids correctly
|
31
31
|
# https://github.com/rails/rails/pull/20056/files
|
32
|
-
active_job_version && active_job_version > Gem::Version.create(
|
32
|
+
active_job_version && active_job_version > Gem::Version.create("5")
|
33
33
|
end
|
34
34
|
|
35
35
|
def active_job_version_supports_queues?
|
@@ -38,7 +38,7 @@ module Que
|
|
38
38
|
# and readded in Rails 6.0.3
|
39
39
|
# https://github.com/rails/rails/pull/38635
|
40
40
|
ToEnqueue.active_job_version && ToEnqueue.active_job_version >=
|
41
|
-
Gem::Version.create(
|
41
|
+
Gem::Version.create("6.0.3")
|
42
42
|
end
|
43
43
|
|
44
44
|
private
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "que"
|
2
2
|
|
3
3
|
# The purpose of this module is to centralise the differences when supporting both que 0.x and
|
4
4
|
# 1.x with the same gem.
|
@@ -15,7 +15,7 @@ module Que
|
|
15
15
|
# the top of all jobs it enqueues.
|
16
16
|
def set_priority(context, priority)
|
17
17
|
if zero_major?
|
18
|
-
context.instance_variable_set(
|
18
|
+
context.instance_variable_set("@priority", priority)
|
19
19
|
else
|
20
20
|
context.priority = priority
|
21
21
|
end
|
@@ -24,7 +24,7 @@ module Que
|
|
24
24
|
# Ensure the job runs at least once an hour when it is backing off due to errors
|
25
25
|
def apply_retry_semantics(context)
|
26
26
|
if zero_major?
|
27
|
-
context.instance_variable_set(
|
27
|
+
context.instance_variable_set("@retry_interval", RETRY_PROC)
|
28
28
|
else
|
29
29
|
context.maximum_retry_count = 1 << 128 # Heat death of universe
|
30
30
|
context.retry_interval = RETRY_PROC
|
@@ -33,9 +33,9 @@ module Que
|
|
33
33
|
|
34
34
|
def job_attributes(enqueued_job)
|
35
35
|
if zero_major?
|
36
|
-
enqueued_job.attrs.transform_keys(&:to_sym)
|
36
|
+
enqueued_job.attrs.to_h.transform_keys(&:to_sym)
|
37
37
|
else
|
38
|
-
enqueued_job.que_attrs.transform_keys(&:to_sym).tap do |hash|
|
38
|
+
enqueued_job.que_attrs.to_h.transform_keys(&:to_sym).tap do |hash|
|
39
39
|
hash[:job_id] = hash.delete(:id)
|
40
40
|
end
|
41
41
|
end
|
@@ -48,7 +48,7 @@ module Que
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def default_scheduler_queue
|
51
|
-
zero_major? ?
|
51
|
+
zero_major? ? "" : Que::DEFAULT_QUEUE
|
52
52
|
end
|
53
53
|
|
54
54
|
def running_synchronously?
|
@@ -56,18 +56,18 @@ module Que
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def running_synchronously_code?
|
59
|
-
zero_major? ?
|
59
|
+
zero_major? ? "Que.mode == :sync" : "Que.run_synchronously = true"
|
60
60
|
end
|
61
61
|
|
62
62
|
def zero_major?
|
63
63
|
# This is the only way to handle beta releases too
|
64
|
-
@zero_major ||= Gem.loaded_specs[
|
64
|
+
@zero_major ||= Gem.loaded_specs["que"].version.to_s.split(".").first.to_i.zero?
|
65
65
|
end
|
66
66
|
|
67
67
|
private
|
68
68
|
|
69
69
|
def normalise_array_of_hashes(array)
|
70
|
-
array.map { |row| row.transform_keys(&:to_sym) }
|
70
|
+
array.map { |row| row.to_h.transform_keys(&:to_sym) }
|
71
71
|
end
|
72
72
|
end
|
73
73
|
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.
|
4
|
+
version: 3.4.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: 2020-
|
11
|
+
date: 2020-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|