onyx-resque-retry 0.1.0 → 0.1.1
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/lib/resque/plugins/retry.rb +1 -1
- data/lib/resque-retry.rb +14 -0
- data/test/retry_inheriting_checks_test.rb +12 -0
- data/test/test_helper.rb +2 -5
- data/test/test_jobs.rb +52 -0
- metadata +12 -11
data/lib/resque/plugins/retry.rb
CHANGED
@@ -129,7 +129,7 @@ module Resque
|
|
129
129
|
|
130
130
|
# call user retry criteria check blocks.
|
131
131
|
retry_criteria_checks.each do |criteria_check|
|
132
|
-
should_retry ||= !!
|
132
|
+
should_retry ||= !!instance_exec(exception, *args, &criteria_check)
|
133
133
|
end
|
134
134
|
|
135
135
|
should_retry
|
data/lib/resque-retry.rb
CHANGED
@@ -4,3 +4,17 @@ require 'resque_scheduler'
|
|
4
4
|
require 'resque/plugins/retry'
|
5
5
|
require 'resque/plugins/exponential_backoff'
|
6
6
|
require 'resque/failure/multiple_with_retry_suppression'
|
7
|
+
|
8
|
+
class Object
|
9
|
+
def instance_exec(*args, &block)
|
10
|
+
mname = "__instance_exec_#{Thread.current.object_id.abs}"
|
11
|
+
class << self; self end.class_eval{ define_method(mname, &block) }
|
12
|
+
begin
|
13
|
+
puts "instance_exec args = #{args.inspect}"
|
14
|
+
ret = send(mname, *args)
|
15
|
+
ensure
|
16
|
+
class << self; self end.class_eval{ undef_method(mname) } rescue nil
|
17
|
+
end
|
18
|
+
ret
|
19
|
+
end
|
20
|
+
end
|
@@ -30,4 +30,16 @@ class RetryInheritingChecksTest < Test::Unit::TestCase
|
|
30
30
|
assert_equal 1, klass.retry_criteria_checks.size
|
31
31
|
assert_equal 'test', klass.test_value
|
32
32
|
end
|
33
|
+
|
34
|
+
def test_retry_criteria_check_should_be_evaluated_under_child_context
|
35
|
+
Resque.enqueue(InheritedJob, 'arg')
|
36
|
+
|
37
|
+
10.times do
|
38
|
+
perform_next_job(@worker)
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_equal 0, BaseJob.retry_attempt, "BaseJob retry attempts"
|
42
|
+
assert_equal 0, InheritedJob.retry_attempt, "InheritedJob retry attempts"
|
43
|
+
assert_equal 5, InheritedRetryJob.retry_attempt, "InheritedRetryJob retry attempts"
|
44
|
+
end
|
33
45
|
end
|
data/test/test_helper.rb
CHANGED
@@ -6,6 +6,7 @@ require 'test/unit'
|
|
6
6
|
require 'rubygems'
|
7
7
|
require 'turn'
|
8
8
|
require 'simplecov'
|
9
|
+
require 'mocha'
|
9
10
|
|
10
11
|
SimpleCov.start do
|
11
12
|
add_filter "/test/"
|
@@ -28,11 +29,7 @@ end
|
|
28
29
|
at_exit do
|
29
30
|
next if $!
|
30
31
|
|
31
|
-
|
32
|
-
exit_code = MiniTest::Unit.new.run(ARGV)
|
33
|
-
else
|
34
|
-
exit_code = Test::Unit::AutoRunner.run
|
35
|
-
end
|
32
|
+
exit_code = Test::Unit::AutoRunner.run
|
36
33
|
|
37
34
|
pid = `ps -e -o pid,command | grep [r]edis-test`.split(" ")[0]
|
38
35
|
puts "Killing test redis server..."
|
data/test/test_jobs.rb
CHANGED
@@ -147,6 +147,58 @@ module RetryModuleDefaultsJob
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
+
class AsyncJob
|
151
|
+
extend Resque::Plugins::Retry
|
152
|
+
|
153
|
+
class << self
|
154
|
+
def perform(*opts)
|
155
|
+
process
|
156
|
+
end
|
157
|
+
|
158
|
+
def process
|
159
|
+
raise "Shouldn't be called"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
class BaseJob < AsyncJob
|
165
|
+
@retry_limit = 0
|
166
|
+
@auto_retry_limit = 5
|
167
|
+
@retry_exceptions = []
|
168
|
+
|
169
|
+
retry_criteria_check do |exception, *args|
|
170
|
+
keep_trying?
|
171
|
+
end
|
172
|
+
|
173
|
+
class << self
|
174
|
+
def keep_trying?
|
175
|
+
retry_attempt < @auto_retry_limit
|
176
|
+
end
|
177
|
+
|
178
|
+
def inherited(subclass)
|
179
|
+
super
|
180
|
+
%w(@retry_exceptions @retry_delay @retry_limit @auto_retry_limit).each do |variable|
|
181
|
+
value = BaseJob.instance_variable_get(variable)
|
182
|
+
value = value.dup rescue value
|
183
|
+
subclass.instance_variable_set(variable, value)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def process
|
188
|
+
raise "Got called #{Time.now}"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
class InheritedRetryJob < BaseJob
|
194
|
+
@queue = :testing
|
195
|
+
end
|
196
|
+
|
197
|
+
class InheritedJob < BaseJob
|
198
|
+
@queue = :testing
|
199
|
+
@retry_job_class = InheritedRetryJob
|
200
|
+
end
|
201
|
+
|
150
202
|
module RetryModuleCustomRetryCriteriaCheck
|
151
203
|
extend Resque::Plugins::Retry
|
152
204
|
@queue = :testing
|
metadata
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onyx-resque-retry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
-
|
13
|
+
- Luke Antins
|
14
|
+
- Ryan Carver
|
14
15
|
autorequire:
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2011-10-
|
19
|
+
date: 2011-10-18 00:00:00 -04:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -135,18 +136,18 @@ files:
|
|
135
136
|
- Rakefile
|
136
137
|
- README.md
|
137
138
|
- HISTORY.md
|
138
|
-
- test/
|
139
|
+
- test/redis-test.conf
|
139
140
|
- test/multiple_failure_test.rb
|
140
141
|
- test/retry_inheriting_checks_test.rb
|
141
|
-
- test/redis-test.conf
|
142
|
-
- test/retry_criteria_test.rb
|
143
142
|
- test/resque_test.rb
|
143
|
+
- test/test_jobs.rb
|
144
|
+
- test/retry_criteria_test.rb
|
145
|
+
- test/retry_test.rb
|
144
146
|
- test/exponential_backoff_test.rb
|
145
147
|
- test/test_helper.rb
|
146
|
-
- test/test_jobs.rb
|
147
|
-
- lib/resque/failure/multiple_with_retry_suppression.rb
|
148
|
-
- lib/resque/plugins/exponential_backoff.rb
|
149
148
|
- lib/resque/plugins/retry.rb
|
149
|
+
- lib/resque/plugins/exponential_backoff.rb
|
150
|
+
- lib/resque/failure/multiple_with_retry_suppression.rb
|
150
151
|
- lib/resque-retry.rb
|
151
152
|
- lib/resque-retry/server/views/retry.erb
|
152
153
|
- lib/resque-retry/server/views/retry_timestamp.erb
|