blaxter-delayed_job 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/delayed/job.rb +3 -9
- data/lib/delayed/job_handler.rb +5 -0
- data/spec/job_spec.rb +5 -3
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.1
|
data/lib/delayed/job.rb
CHANGED
@@ -24,7 +24,7 @@ module Delayed
|
|
24
24
|
cattr_accessor :destroy_successful_jobs
|
25
25
|
self.destroy_successful_jobs = false
|
26
26
|
|
27
|
-
NextTaskSQL = '(run_at <= ? AND (locked_at IS NULL OR locked_at < ?)) AND failed_at IS NULL AND finished_at IS NULL'
|
27
|
+
NextTaskSQL = '(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR (locked_by = ?)) AND failed_at IS NULL AND finished_at IS NULL'
|
28
28
|
NextTaskOrder = 'priority DESC, run_at ASC'
|
29
29
|
|
30
30
|
ParseObjectFromYaml = /\!ruby\/\w+\:([^\s]+)/
|
@@ -75,7 +75,7 @@ module Delayed
|
|
75
75
|
|
76
76
|
sql = NextTaskSQL.dup
|
77
77
|
time_now = db_time_now
|
78
|
-
conditions = [time_now, time_now - max_run_time]
|
78
|
+
conditions = [time_now, time_now - max_run_time, worker_name]
|
79
79
|
if options[:min_priority]
|
80
80
|
sql << ' AND (priority >= ?)'
|
81
81
|
conditions << options[:min_priority]
|
@@ -246,13 +246,7 @@ module Delayed
|
|
246
246
|
# Simply resume and update the locked_at
|
247
247
|
self.class.update_all(["locked_at = ?", now], ["id = ? and locked_by = ?", id, worker])
|
248
248
|
end
|
249
|
-
|
250
|
-
self.locked_at = now
|
251
|
-
self.locked_by = worker
|
252
|
-
return true
|
253
|
-
else
|
254
|
-
return false
|
255
|
-
end
|
249
|
+
affected_rows == 1 && reload
|
256
250
|
end
|
257
251
|
|
258
252
|
# Unlock this job (note: not saved to DB)
|
data/lib/delayed/job_handler.rb
CHANGED
@@ -90,11 +90,16 @@ module Delayed
|
|
90
90
|
|
91
91
|
# Whether we can or not execute this job
|
92
92
|
def can_execute(job)
|
93
|
+
return false if is_already_in_execution(job)
|
93
94
|
object = get_object(job)
|
94
95
|
object && ! is_there_job_in_execution_for(object) &&
|
95
96
|
jobs_in_execution < @max_active_jobs
|
96
97
|
end
|
97
98
|
|
99
|
+
def is_already_in_execution(job)
|
100
|
+
!! @jobs.values.detect {|h| h[:job].id == job.id }
|
101
|
+
end
|
102
|
+
|
98
103
|
def each_job_in_execution
|
99
104
|
@jobs.each_pair do |key, value|
|
100
105
|
yield value[:job], value[:started_at], value[:thread]
|
data/spec/job_spec.rb
CHANGED
@@ -428,10 +428,10 @@ describe Delayed::Job do
|
|
428
428
|
SimpleJob.runs.should == 1 # runs the one open job
|
429
429
|
end
|
430
430
|
|
431
|
-
it "should find
|
431
|
+
it "should find our own jobs regardless of locks" do
|
432
432
|
SimpleJob.runs.should == 0
|
433
433
|
Delayed::Job.work_off :worker_name => 'worker1'
|
434
|
-
SimpleJob.runs.should ==
|
434
|
+
SimpleJob.runs.should == 3 # runs open job plus worker1 jobs that were already locked
|
435
435
|
end
|
436
436
|
end
|
437
437
|
|
@@ -453,7 +453,9 @@ describe Delayed::Job do
|
|
453
453
|
it "should ignore locks when finding our own jobs" do
|
454
454
|
SimpleJob.runs.should == 0
|
455
455
|
Delayed::Job.work_off :worker_name => 'worker1'
|
456
|
-
SimpleJob.runs.should ==
|
456
|
+
SimpleJob.runs.should == 3 # runs open job plus worker1 jobs
|
457
|
+
# This is useful in the case of a crash/restart on worker1,
|
458
|
+
# but make sure multiple workers on the same host have unique names!
|
457
459
|
end
|
458
460
|
|
459
461
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blaxter-delayed_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 2.1.
|
9
|
+
- 1
|
10
|
+
version: 2.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Tobias L\xC3\xBCtke"
|