rocketjob 3.0.4 → 3.0.5

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
2
  SHA1:
3
- metadata.gz: b6cc91f7e665fcbe24f0ff2fd388540e5dc04274
4
- data.tar.gz: 2c7277a7216c799d0ad59c645a5d3100079bf8f9
3
+ metadata.gz: 61ffcbdf9443ca63dc699d732c9cc5c228b3505a
4
+ data.tar.gz: cbecb1f0d5df94328fa4190847aa8422211294a4
5
5
  SHA512:
6
- metadata.gz: 69f216ca8f7b62df4fd72bae9f8ef5d4bfbdcff166df82ae494ca8986cd9cc0360e5fb1886334697a5144c3c70b34ce054e36ac0ccde66aa009aab6e71a5a727
7
- data.tar.gz: c600c821b1c881c428930f4f9e9133413205ce87811cd001d3b0ceba8c27455bc131d3d7695582f3e1a802872646f1a34c985297847f55a9ecb2495d93a1bec4
6
+ metadata.gz: 5e6de043e3a10b052855dfc5db392501bfad718242eecd1ef78110400e94d9fd571a88928877d613da0d520dbb984ed59cf61c66df18ce041fc85cd4028f135a
7
+ data.tar.gz: b1c2c436df6ceb73176a7cb65a343ab0a3c4b682099043270a8cc9409b79e272e029d2bc1b27b8e987629976030b929c3b3863bdf8a751e488c826d3ff5ec1c5
@@ -8,7 +8,7 @@ module RocketJob
8
8
  # Example:
9
9
  # class MyJob < RocketJob
10
10
  # # Maximum number of workers to process instances of this job at the same time.
11
- # self.throttle_max_workers = 25
11
+ # self.throttle_running_jobs = 25
12
12
  #
13
13
  # def perform
14
14
  # # ....
@@ -23,7 +23,7 @@ module RocketJob
23
23
  # - If throughput is not as important as preventing brief spikes when many
24
24
  # workers are running, add a double check into the perform:
25
25
  # class MyJob < RocketJob
26
- # self.throttle_max_workers = 25
26
+ # self.throttle_running_jobs = 25
27
27
  #
28
28
  # def perform
29
29
  # # (Optional) Prevent a brief spike from exceeding the wax worker throttle
@@ -36,8 +36,8 @@ module RocketJob
36
36
  extend ActiveSupport::Concern
37
37
 
38
38
  included do
39
- class_attribute :throttle_max_workers
40
- self.throttle_max_workers = nil
39
+ class_attribute :throttle_running_jobs
40
+ self.throttle_running_jobs = nil
41
41
  end
42
42
 
43
43
  # Throttle to add when the throttle is exceeded
@@ -47,7 +47,7 @@ module RocketJob
47
47
 
48
48
  # Returns [Boolean] whether the throttle for this job has been exceeded
49
49
  def throttle_exceeded?
50
- throttle_max_workers && (throttle_max_workers != 0) ? (self.class.running.count >= throttle_max_workers) : false
50
+ throttle_running_jobs && (throttle_running_jobs != 0) ? (self.class.running.where(:id.ne => id).count >= throttle_running_jobs) : false
51
51
  end
52
52
 
53
53
  # Prevent a brief spike from exceeding the wax worker throttle
@@ -57,8 +57,6 @@ module RocketJob
57
57
  end
58
58
  end
59
59
 
60
- private
61
-
62
60
  # Merge filter(s)
63
61
  def throttle_merge_filter(target, source)
64
62
  source.each_pair do |k, v|
@@ -69,6 +67,7 @@ module RocketJob
69
67
  v
70
68
  end
71
69
  end
70
+ target
72
71
  end
73
72
 
74
73
  end
@@ -57,8 +57,9 @@ module RocketJob
57
57
  job.rocket_job_fail_on_exception!(worker_name) { job.destroy }
58
58
  logger.info "Destroyed expired job #{job.class.name}, id:#{job.id}"
59
59
  when job.throttle_exceeded?
60
+ logger.debug { "Throttle exceeded with job #{job.class.name}, id:#{job.id}" }
60
61
  # Add jobs filter to the current filter
61
- throttle_merge_filter(filter, job.throttle_filter)
62
+ job.throttle_merge_filter(filter, job.throttle_filter)
62
63
  # Restore retrieved job so that other workers can process it later
63
64
  job.set(worker_name: nil, state: :queued)
64
65
  else
@@ -1,3 +1,3 @@
1
1
  module RocketJob #:nodoc
2
- VERSION = '3.0.4'
2
+ VERSION = '3.0.5'
3
3
  end
@@ -7,16 +7,16 @@ module Plugins
7
7
 
8
8
  class ThrottleJob < RocketJob::Job
9
9
  # Only allow one to be processed at a time
10
- self.throttle_max_workers = 1
10
+ self.throttle_running_jobs = 1
11
11
 
12
12
  def perform
13
13
  21
14
14
  end
15
15
  end
16
16
 
17
- describe RocketJob::Plugins::Job::Logger do
17
+ describe RocketJob::Plugins::Job::Throttle do
18
18
  before do
19
- ThrottleJob.delete_all
19
+ RocketJob::Job.delete_all
20
20
  end
21
21
 
22
22
  describe '#throttle_exceeded?' do
@@ -50,6 +50,45 @@ module Plugins
50
50
  end
51
51
  end
52
52
 
53
+ describe '.rocket_job_next_job' do
54
+ before do
55
+ @worker_name = 'worker:123'
56
+ end
57
+
58
+ after do
59
+ @job.destroy if @job && !@job.new_record?
60
+ end
61
+
62
+ it 'return nil when no jobs available' do
63
+ assert_nil RocketJob::Job.rocket_job_next_job(@worker_name)
64
+ end
65
+
66
+ it 'return the job when others are queued, paused, failed, or complete' do
67
+ @job = ThrottleJob.create!
68
+ ThrottleJob.create!(state: :failed)
69
+ ThrottleJob.create!(state: :complete)
70
+ ThrottleJob.create!(state: :paused)
71
+ assert job = RocketJob::Job.rocket_job_next_job(@worker_name), -> { ThrottleJob.all.to_a.ai }
72
+ assert_equal @job.id, job.id, -> { ThrottleJob.all.to_a.ai }
73
+ end
74
+
75
+ it 'return nil when other jobs are running' do
76
+ ThrottleJob.create!
77
+ @job = ThrottleJob.new
78
+ @job.start!
79
+ assert_nil RocketJob::Job.rocket_job_next_job(@worker_name), -> { ThrottleJob.all.to_a.ai }
80
+ end
81
+
82
+ it 'add job to filter when other jobs are running' do
83
+ ThrottleJob.create!
84
+ @job = ThrottleJob.new
85
+ @job.start!
86
+ filter = {}
87
+ assert_nil RocketJob::Job.rocket_job_next_job(@worker_name, filter), -> { ThrottleJob.all.to_a.ai }
88
+ assert_equal 1, filter.size
89
+ end
90
+ end
91
+
53
92
  end
54
93
  end
55
94
  end
@@ -43,30 +43,30 @@ module Plugins
43
43
 
44
44
  describe '.rocket_job_next_job' do
45
45
  before do
46
- @job = QuietJob.new
47
- @worker = RocketJob::Server.new(name: 'worker:123')
46
+ @job = QuietJob.new
47
+ @worker_name = 'worker:123'
48
48
  end
49
49
 
50
50
  it 'return nil when no jobs available' do
51
- assert_nil RocketJob::Job.rocket_job_next_job(@worker.name)
51
+ assert_nil RocketJob::Job.rocket_job_next_job(@worker_name)
52
52
  end
53
53
 
54
54
  it 'return the first job' do
55
55
  @job.save!
56
- assert job = RocketJob::Job.rocket_job_next_job(@worker.name), 'Failed to find job'
56
+ assert job = RocketJob::Job.rocket_job_next_job(@worker_name), 'Failed to find job'
57
57
  assert_equal @job.id, job.id
58
58
  end
59
59
 
60
60
  it 'Ignore future dated jobs' do
61
61
  @job.run_at = Time.now + 1.hour
62
62
  @job.save!
63
- assert_nil RocketJob::Job.rocket_job_next_job(@worker.name)
63
+ assert_nil RocketJob::Job.rocket_job_next_job(@worker_name)
64
64
  end
65
65
 
66
66
  it 'Process future dated jobs when time is now' do
67
67
  @job.run_at = Time.now
68
68
  @job.save!
69
- assert job = RocketJob::Job.rocket_job_next_job(@worker.name), 'Failed to find future job'
69
+ assert job = RocketJob::Job.rocket_job_next_job(@worker_name), 'Failed to find future job'
70
70
  assert_equal @job.id, job.id
71
71
  end
72
72
 
@@ -74,7 +74,7 @@ module Plugins
74
74
  count = RocketJob::Job.count
75
75
  @job.expires_at = Time.now - 100
76
76
  @job.save!
77
- assert_nil RocketJob::Job.rocket_job_next_job(@worker.name)
77
+ assert_nil RocketJob::Job.rocket_job_next_job(@worker_name)
78
78
  assert_equal count, RocketJob::Job.count
79
79
  end
80
80
  end
@@ -173,8 +173,8 @@ module Plugins
173
173
 
174
174
  describe '#rocket_job_active_workers' do
175
175
  before do
176
- @job = QuietJob.create!
177
- @worker = RocketJob::Server.create!(name: 'worker:123')
176
+ @job = QuietJob.create!
177
+ @worker_name = 'worker:123'
178
178
  end
179
179
 
180
180
  it 'should return empty hash for no active jobs' do
@@ -182,12 +182,12 @@ module Plugins
182
182
  end
183
183
 
184
184
  it 'should return active servers' do
185
- assert job = RocketJob::Job.rocket_job_next_job(@worker.name)
185
+ assert job = RocketJob::Job.rocket_job_next_job(@worker_name)
186
186
  assert active = job.rocket_job_active_workers
187
187
  assert_equal 1, active.size
188
188
  assert active_worker = active.first
189
189
  assert_equal @job.id, active_worker.job.id
190
- assert_equal @worker.name, active_worker.name
190
+ assert_equal @worker_name, active_worker.name
191
191
  assert_equal job.started_at, active_worker.started_at
192
192
  assert active_worker.duration_s
193
193
  assert active_worker.duration
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocketjob
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-15 00:00:00.000000000 Z
11
+ date: 2017-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby