blaxter-delayed_job 2.0.1 → 2.0.3

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.
data/README.markdown CHANGED
@@ -185,6 +185,8 @@ You can invoke `rake jobs:clear` to delete all jobs in the queue.
185
185
 
186
186
  Changes
187
187
  -------
188
+ * 2.0.3: The only_for feature wasn't working at all
189
+ * 2.0.2: Only update run_at when it's gonna be executed another time for sure (attempts < max_attempts)
188
190
  * 2.0.1: named_scope Delayed::Job.failed/finished/unfinished (jobs that have failed, have finished ok or still haven't been done)
189
191
  * 2.0.0: Contains the changes made in this fork, the ability to create workers with individual constraints without interfere to other workers
190
192
 
data/Rakefile CHANGED
@@ -3,17 +3,17 @@ begin
3
3
  require 'jeweler'
4
4
 
5
5
  Jeweler::Tasks.new do |s|
6
- s.name = "delayed_job"
6
+ s.name = "blaxter-delayed_job"
7
7
  s.summary = "Database-backed asynchronous priority queue system -- Extracted from Shopify"
8
- s.email = "tobi@leetsoft.com"
9
- s.homepage = "http://github.com/tobi/delayed_job/tree/master"
8
+ s.email = "blaxter@gmail.com"
9
+ s.homepage = "http://github.com/blaxter/delayed_job"
10
10
  s.description = "Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks."
11
- s.authors = ["Tobias Lütke"]
12
-
11
+ s.authors = ["Tobias Lütke", "Jesús García Sáez"]
12
+
13
13
  s.has_rdoc = true
14
14
  s.rdoc_options = ["--main", "README.textile", "--inline-source", "--line-numbers"]
15
15
  s.extra_rdoc_files = ["README.textile"]
16
-
16
+
17
17
  s.test_files = Dir['spec/**/*']
18
18
  end
19
19
 
@@ -27,12 +27,12 @@ Spec::Rake::SpecTask.new(:spec) do |spec|
27
27
  spec.libs << 'lib' << 'spec'
28
28
  spec.spec_files = FileList['spec/**/*_spec.rb']
29
29
  end
30
-
30
+
31
31
  Spec::Rake::SpecTask.new(:rcov) do |spec|
32
32
  spec.libs << 'lib' << 'spec'
33
33
  spec.pattern = 'spec/**/*_spec.rb'
34
34
  spec.rcov = true
35
35
  end
36
-
37
-
36
+
37
+
38
38
  task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.1
1
+ 2.0.3
data/delayed_job.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{delayed_job}
8
- s.version = "2.0.1"
8
+ s.version = "2.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobias L\303\274tke"]
12
- s.date = %q{2009-08-19}
12
+ s.date = %q{2010-03-22}
13
13
  s.description = %q{Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.}
14
14
  s.email = %q{tobi@leetsoft.com}
15
15
  s.files = [
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
37
37
  s.homepage = %q{http://github.com/tobi/delayed_job/tree/master}
38
38
  s.rdoc_options = ["--main", "README.textile", "--inline-source", "--line-numbers"]
39
39
  s.require_paths = ["lib"]
40
- s.rubygems_version = %q{1.3.3}
40
+ s.rubygems_version = %q{1.3.6}
41
41
  s.summary = %q{Database-backed asynchronous priority queue system -- Extracted from Shopify}
42
42
  s.test_files = [
43
43
  "spec/delayed_method_spec.rb",
@@ -6,7 +6,7 @@ class CreateDelayedJobs < ActiveRecord::Migration
6
6
  t.text :handler
7
7
  t.string :job_type
8
8
  t.string :name
9
- t.string :last_error
9
+ t.text :last_error
10
10
  t.datetime :run_at
11
11
  t.datetime :locked_at
12
12
  t.datetime :failed_at
data/lib/delayed/job.rb CHANGED
@@ -99,7 +99,11 @@ module Delayed
99
99
  # This leads to a more even distribution of jobs across the worker processes.
100
100
  find_available( options ).each do |job|
101
101
  t = job.run_with_lock( max_run_time, worker_name )
102
- return t unless t.nil? # return if we did work (good or bad)
102
+ if t.nil?
103
+ Delayed::Worker.logger.info "* #{worker_name} No work done."
104
+ else
105
+ return t
106
+ end
103
107
  end
104
108
  # we didn't do any work, all 5 were not lockable
105
109
  nil
@@ -120,6 +124,7 @@ module Delayed
120
124
  else
121
125
  break # leave if no work could be done
122
126
  end
127
+ Delayed::Worker.logger.info "#{options[:worker_name]} job done..."
123
128
  break if Worker.exit # leave if we're exiting
124
129
  end
125
130
 
@@ -163,11 +168,12 @@ module Delayed
163
168
  # Reschedule the job in the future (when a job fails).
164
169
  # Uses an exponential scale depending on the number of failed attempts.
165
170
  def reschedule(message, backtrace = [], time = nil)
166
- if self.attempts < (payload_object.send(:max_attempts) rescue MAX_ATTEMPTS)
171
+ max_attempts = payload_object.send(:max_attempts) rescue MAX_ATTEMPTS
172
+ if self.attempts < max_attempts
167
173
  time ||= Job.db_time_now + (attempts ** 4) + 5
168
174
 
169
175
  self.attempts += 1
170
- self.run_at = time
176
+ self.run_at = time unless self.attempts == max_attempts
171
177
  self.last_error = message + "\n" + backtrace.join("\n")
172
178
  self.unlock
173
179
  save!
@@ -180,10 +186,10 @@ module Delayed
180
186
  # Try to run one job.
181
187
  # Returns true/false (work done/work failed) or nil if job can't be locked.
182
188
  def run_with_lock(max_run_time = MAX_RUN_TIME, worker_name = Worker::DEFAULT_WORKER_NAME)
183
- Delayed::Worker.logger.info "* [JOB] aquiring lock on #{name}"
189
+ Delayed::Worker.logger.info "* [JOB] #{worker_name} aquiring lock on #{name}"
184
190
  unless lock_exclusively!(max_run_time, worker_name)
185
191
  # We did not get the lock, some other worker process must have
186
- Delayed::Worker.logger.warn "* [JOB] failed to aquire exclusive lock for #{name}"
192
+ Delayed::Worker.logger.warn "* [JOB] #{worker_name} - failed to aquire exclusive lock for #{name}"
187
193
  return nil # no work done
188
194
  end
189
195
 
@@ -193,7 +199,7 @@ module Delayed
193
199
  end
194
200
  destroy_successful_jobs ? destroy :
195
201
  update_attribute(:finished_at, Time.now)
196
- Delayed::Worker.logger.info "* [JOB] #{name} completed after %.4f" % runtime
202
+ Delayed::Worker.logger.info "* [JOB] #{worker_name} - #{name} completed after %.4f" % runtime
197
203
  return true # did work
198
204
  rescue Exception => e
199
205
  reschedule e.message, e.backtrace
@@ -27,7 +27,7 @@ module Delayed
27
27
  attr_accessor :name
28
28
 
29
29
  # Constraints for this worker, what kind of jobs is gonna execute?
30
- attr_accessor :min_priority, :max_priority, :job_types
30
+ attr_accessor :min_priority, :max_priority, :job_types, :only_for
31
31
 
32
32
  attr_accessor :quiet
33
33
 
@@ -41,7 +41,7 @@ module Delayed
41
41
  # - max_priority: constraint for selecting what jobs to execute (integer)
42
42
  # - job_types: constraint for selecting what jobs to execute (String or Array)
43
43
  def initialize(options={})
44
- [ :quiet, :name, :min_priority, :max_priority, :job_types ].each do |attr_name|
44
+ [ :quiet, :name, :min_priority, :max_priority, :job_types, :only_for ].each do |attr_name|
45
45
  send "#{attr_name}=", options[attr_name]
46
46
  end
47
47
  # Default values
@@ -90,6 +90,7 @@ module Delayed
90
90
  :limit => 5,
91
91
  :min_priority => min_priority,
92
92
  :max_priority => max_priority,
93
+ :only_for => only_for,
93
94
  :job_types => job_types }
94
95
  end
95
96
  end
metadata CHANGED
@@ -1,20 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blaxter-delayed_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ prerelease: false
5
+ segments:
6
+ - 2
7
+ - 0
8
+ - 3
9
+ version: 2.0.3
5
10
  platform: ruby
6
11
  authors:
7
12
  - "Tobias L\xC3\xBCtke"
13
+ - "Jes\xC3\xBAs Garc\xC3\xADa S\xC3\xA1ez"
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-08-19 00:00:00 -07:00
18
+ date: 2010-03-22 00:00:00 +01:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
16
22
  description: Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.
17
- email: tobi@leetsoft.com
23
+ email: blaxter@gmail.com
18
24
  executables: []
19
25
 
20
26
  extensions: []
@@ -42,9 +48,10 @@ files:
42
48
  - spec/story_spec.rb
43
49
  - tasks/jobs.rake
44
50
  - tasks/tasks.rb
45
- has_rdoc: false
46
- homepage: http://github.com/tobi/delayed_job/tree/master
47
- licenses:
51
+ has_rdoc: true
52
+ homepage: http://github.com/blaxter/delayed_job
53
+ licenses: []
54
+
48
55
  post_install_message:
49
56
  rdoc_options:
50
57
  - --main
@@ -57,18 +64,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
57
64
  requirements:
58
65
  - - ">="
59
66
  - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
60
69
  version: "0"
61
- version:
62
70
  required_rubygems_version: !ruby/object:Gem::Requirement
63
71
  requirements:
64
72
  - - ">="
65
73
  - !ruby/object:Gem::Version
74
+ segments:
75
+ - 0
66
76
  version: "0"
67
- version:
68
77
  requirements: []
69
78
 
70
79
  rubyforge_project:
71
- rubygems_version: 1.3.5
80
+ rubygems_version: 1.3.6
72
81
  signing_key:
73
82
  specification_version: 3
74
83
  summary: Database-backed asynchronous priority queue system -- Extracted from Shopify