backburner 0.4.2 → 0.4.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/CHANGELOG.md +5 -0
- data/lib/backburner/version.rb +1 -1
- data/lib/backburner/worker.rb +56 -19
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## Version 0.4.3 (July 19 2013)
|
4
|
+
|
5
|
+
* FIX #44 Additional fix to issue introduced in 0.4.2
|
6
|
+
* FIX #45 More graceful shutdown using Kernel.exit and rescuing SystemExit. (Thanks @ryanjohns)
|
7
|
+
|
3
8
|
## Version 0.4.2 (July 3 2013)
|
4
9
|
|
5
10
|
* FIX #44 Properly retry to connect to beanstalkd when connection fails.
|
data/lib/backburner/version.rb
CHANGED
data/lib/backburner/worker.rb
CHANGED
@@ -27,15 +27,15 @@ module Backburner
|
|
27
27
|
pri = resolve_priority(opts[:pri] || job_class)
|
28
28
|
delay = [0, opts[:delay].to_i].max
|
29
29
|
ttr = opts[:ttr] || Backburner.configuration.respond_timeout
|
30
|
-
tube = connection.tubes[expand_tube_name(opts[:queue] || job_class)]
|
31
30
|
res = Backburner::Hooks.invoke_hook_events(job_class, :before_enqueue, *args)
|
32
31
|
return false unless res # stop if hook is false
|
33
32
|
data = { :class => job_class.name, :args => args }
|
34
|
-
|
33
|
+
retryable_command do
|
34
|
+
tube = connection.tubes[expand_tube_name(opts[:queue] || job_class)]
|
35
|
+
tube.put(data.to_json, :pri => pri, :delay => delay, :ttr => ttr)
|
36
|
+
end
|
35
37
|
Backburner::Hooks.invoke_hook_events(job_class, :after_enqueue, *args)
|
36
38
|
return true
|
37
|
-
rescue Beaneater::NotConnected => e
|
38
|
-
retry_connection!
|
39
39
|
end
|
40
40
|
|
41
41
|
# Starts processing jobs with the specified tube_names.
|
@@ -44,7 +44,11 @@ module Backburner
|
|
44
44
|
# Backburner::Worker.start(["foo.tube.name"])
|
45
45
|
#
|
46
46
|
def self.start(tube_names=nil)
|
47
|
-
|
47
|
+
begin
|
48
|
+
self.new(tube_names).start
|
49
|
+
rescue SystemExit
|
50
|
+
# do nothing
|
51
|
+
end
|
48
52
|
end
|
49
53
|
|
50
54
|
# Returns the worker connection.
|
@@ -54,23 +58,21 @@ module Backburner
|
|
54
58
|
@connection ||= Connection.new(Backburner.configuration.beanstalk_url)
|
55
59
|
end
|
56
60
|
|
57
|
-
# Retries
|
61
|
+
# Retries the given command specified in the block several times if there is a connection error
|
62
|
+
# Used to execute beanstalkd commands in a retryable way
|
63
|
+
#
|
64
|
+
# @example
|
65
|
+
# retryable_command { ... }
|
58
66
|
# @raise [Beaneater::NotConnected] If beanstalk fails to connect multiple times.
|
59
|
-
|
60
|
-
|
67
|
+
#
|
68
|
+
def self.retryable_command(max_tries=8, &block)
|
61
69
|
begin
|
62
|
-
|
63
|
-
self.connection
|
70
|
+
yield
|
64
71
|
rescue Beaneater::NotConnected => e
|
65
|
-
|
66
|
-
|
67
|
-
sleep 0.5
|
68
|
-
retry
|
69
|
-
else # stop retrying
|
70
|
-
raise e
|
71
|
-
end
|
72
|
+
retry_connection!(max_tries)
|
73
|
+
yield
|
72
74
|
end
|
73
|
-
end
|
75
|
+
end
|
74
76
|
|
75
77
|
# List of tube names to be watched and processed
|
76
78
|
attr_accessor :tube_names
|
@@ -111,7 +113,7 @@ module Backburner
|
|
111
113
|
# Triggers this worker to shutdown
|
112
114
|
def shutdown
|
113
115
|
log_info 'Worker exiting...'
|
114
|
-
Kernel.exit
|
116
|
+
Kernel.exit
|
115
117
|
end
|
116
118
|
|
117
119
|
# Processes tube_names given tube_names array.
|
@@ -156,6 +158,41 @@ module Backburner
|
|
156
158
|
handle_error(e, job.name, job.args)
|
157
159
|
end
|
158
160
|
|
161
|
+
# Retries the given command specified in the block several times if there is a connection error
|
162
|
+
# Used to execute beanstalkd commands in a retryable way
|
163
|
+
#
|
164
|
+
# @example
|
165
|
+
# retryable_command { ... }
|
166
|
+
# @raise [Beaneater::NotConnected] If beanstalk fails to connect multiple times.
|
167
|
+
#
|
168
|
+
def self.retryable_command(max_tries=8, &block)
|
169
|
+
begin
|
170
|
+
yield
|
171
|
+
rescue Beaneater::NotConnected => e
|
172
|
+
retry_connection!(max_tries)
|
173
|
+
yield
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# Retries to make a connection to beanstalkd if that connection failed.
|
178
|
+
# @raise [Beaneater::NotConnected] If beanstalk fails to connect multiple times.
|
179
|
+
#
|
180
|
+
def self.retry_connection!(max_tries=8)
|
181
|
+
retry_count = 0
|
182
|
+
begin
|
183
|
+
@connection = nil
|
184
|
+
self.connection.stats
|
185
|
+
rescue Beaneater::NotConnected => e
|
186
|
+
if retry_count < max_tries
|
187
|
+
retry_count += 1
|
188
|
+
sleep 1
|
189
|
+
retry
|
190
|
+
else # stop retrying
|
191
|
+
raise e
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end # retry_connection!
|
195
|
+
|
159
196
|
protected
|
160
197
|
|
161
198
|
# Returns a list of all tubes known within the system
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backburner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: beaneater
|
@@ -169,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
169
|
version: '0'
|
170
170
|
segments:
|
171
171
|
- 0
|
172
|
-
hash: -
|
172
|
+
hash: -2883142524196216213
|
173
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
174
|
none: false
|
175
175
|
requirements:
|
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
178
|
version: '0'
|
179
179
|
segments:
|
180
180
|
- 0
|
181
|
-
hash: -
|
181
|
+
hash: -2883142524196216213
|
182
182
|
requirements: []
|
183
183
|
rubyforge_project:
|
184
184
|
rubygems_version: 1.8.25
|