blaxter-delayed_job 2.0.1 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
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