resque-retry 1.5.3 → 1.6.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -3
- data/HISTORY.md +5 -0
- data/README.md +1 -1
- data/lib/resque-retry/version.rb +1 -1
- data/lib/resque/failure/multiple_with_retry_suppression.rb +6 -2
- data/lib/resque/plugins/exponential_backoff.rb +8 -4
- data/lib/resque/plugins/retry.rb +11 -5
- data/resque-retry.gemspec +1 -1
- data/test/multiple_failure_test.rb +4 -4
- data/test/resque_test.rb +8 -4
- data/test/retry_exception_delay_test.rb +1 -1
- data/test/test_jobs.rb +9 -2
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18f7b00c3922adebe816efc0357bfba5925dddc5ae85bea9d4b69e0a05e9fb46
|
4
|
+
data.tar.gz: dd4d14d570a628aa667445cd4f64929ecc0bcab22bc536b164bc9e9437574a59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffab51ba83437149d5bc39400983e436a38cd4e2d200b7562fa892f16f6facf1310a0dcf666030d8181aec5424dbcd80c146983ce25b3579f7e9a4088692dc8f
|
7
|
+
data.tar.gz: dcef4495dfc111270f16bb02dafa72d1fb66caebe4302dbb0359aad2dcaf72f29c887cc7e0caa22c3ef012aba5813933fb19c1c210b597bea17b6ab4ab561ff6
|
data/.travis.yml
CHANGED
data/HISTORY.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 1.6.0 (2019-04-21)
|
2
|
+
|
3
|
+
* Clean-up / refactoring in preparation for a release (`ruby` deprecations, etc.)
|
4
|
+
* Loosen version requirement to allow resque v2.0 and up (@peret)
|
5
|
+
|
1
6
|
# 1.5.3 (2018-11-26)
|
2
7
|
|
3
8
|
* Monkey patch in the `requeue_queue` method onto the `Resque::Failure` backend (this _should_ be a temporary fix)
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
resque-retry
|
2
2
|
============
|
3
3
|
|
4
|
-
A [Resque][resque] plugin. Requires Resque ~> 1.25 & [resque-scheduler][resque-scheduler] ~> 4.0.
|
4
|
+
A [Resque][resque] plugin. Requires Resque ~> 1.25 or Resque ~> 2.0 & [resque-scheduler][resque-scheduler] ~> 4.0.
|
5
5
|
|
6
6
|
This gem provides retry, delay and exponential backoff support for resque jobs.
|
7
7
|
|
data/lib/resque-retry/version.rb
CHANGED
@@ -89,8 +89,12 @@ module Resque
|
|
89
89
|
# https://github.com/resque/resque/pull/1659
|
90
90
|
#
|
91
91
|
# @api public
|
92
|
-
|
93
|
-
|
92
|
+
class_eval do |klass|
|
93
|
+
if !klass.respond_to?(:requeue_queue)
|
94
|
+
def klass.requeue_queue(queue)
|
95
|
+
classes.first.requeue_queue(queue)
|
96
|
+
end
|
97
|
+
end
|
94
98
|
end
|
95
99
|
|
96
100
|
protected
|
@@ -52,12 +52,16 @@ module Resque
|
|
52
52
|
#
|
53
53
|
# @api private
|
54
54
|
def self.extended(receiver)
|
55
|
+
retry_delay_multiplicand_min = DEFAULT_RETRY_DELAY_MULTIPLICAND_MIN
|
55
56
|
retry_delay_multiplicand_min = \
|
56
|
-
receiver.instance_variable_get(
|
57
|
-
|
57
|
+
receiver.instance_variable_get(:@retry_delay_multiplicand_min) \
|
58
|
+
if receiver.instance_variable_defined?(:@retry_delay_multiplicand_min)
|
59
|
+
|
60
|
+
retry_delay_multiplicand_max = DEFAULT_RETRY_DELAY_MULTIPLICAND_MAX
|
58
61
|
retry_delay_multiplicand_max = \
|
59
|
-
receiver.instance_variable_get(
|
60
|
-
|
62
|
+
receiver.instance_variable_get(:@retry_delay_multiplicand_max) \
|
63
|
+
if receiver.instance_variable_defined?(:@retry_delay_multiplicand_max)
|
64
|
+
|
61
65
|
if retry_delay_multiplicand_min > retry_delay_multiplicand_max
|
62
66
|
raise InvalidRetryDelayMultiplicandConfigurationException.new(
|
63
67
|
%{"@retry_delay_multiplicand_min" must be less than or equal to "@retry_delay_multiplicand_max"}
|
data/lib/resque/plugins/retry.rb
CHANGED
@@ -52,8 +52,13 @@ module Resque
|
|
52
52
|
#
|
53
53
|
# @api private
|
54
54
|
def self.extended(receiver)
|
55
|
-
retry_exceptions =
|
56
|
-
|
55
|
+
retry_exceptions = nil
|
56
|
+
retry_exceptions = receiver.instance_variable_get(:@retry_exceptions) \
|
57
|
+
if receiver.instance_variable_defined?(:@retry_exceptions)
|
58
|
+
|
59
|
+
fatal_exceptions = nil
|
60
|
+
fatal_exceptions = receiver.instance_variable_get(:@fatal_exceptions) \
|
61
|
+
if receiver.instance_variable_defined?(:@fatal_exceptions)
|
57
62
|
|
58
63
|
if fatal_exceptions && retry_exceptions
|
59
64
|
raise AmbiguousRetryStrategyException.new(%{You can't define both "@fatal_exceptions" and "@retry_exceptions"})
|
@@ -130,7 +135,7 @@ module Resque
|
|
130
135
|
#
|
131
136
|
# @api public
|
132
137
|
def retry_delay(exception_class = nil)
|
133
|
-
if @retry_exceptions.is_a?(Hash)
|
138
|
+
if instance_variable_defined?(:@retry_exceptions) && @retry_exceptions.is_a?(Hash)
|
134
139
|
delay = @retry_exceptions[exception_class] ||= begin
|
135
140
|
relevant_definitions = @retry_exceptions.select { |ex| exception_class <= ex }
|
136
141
|
relevant_definitions.any? ? relevant_definitions.sort.first[1] : 0
|
@@ -261,7 +266,7 @@ module Resque
|
|
261
266
|
#
|
262
267
|
# @api public
|
263
268
|
def retry_exceptions
|
264
|
-
if @retry_exceptions.is_a?(Hash)
|
269
|
+
if instance_variable_defined?(:@retry_exceptions) && @retry_exceptions.is_a?(Hash)
|
265
270
|
@retry_exceptions.keys
|
266
271
|
else
|
267
272
|
@retry_exceptions ||= nil
|
@@ -487,7 +492,8 @@ module Resque
|
|
487
492
|
# This hook is called from a worker processes, not the job process
|
488
493
|
# that failed with a DirtyExit, so @retry_attempt wasn't set yet
|
489
494
|
@retry_attempt = Resque.redis.get(redis_retry_key(*args)).to_i
|
490
|
-
elsif
|
495
|
+
elsif instance_variable_defined?(:@on_failure_retry_hook_already_called) && \
|
496
|
+
@on_failure_retry_hook_already_called
|
491
497
|
log_message 'on_failure_retry_hook_already_called', args, exception
|
492
498
|
return
|
493
499
|
end
|
data/resque-retry.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.files = `git ls-files`.split($/)
|
30
30
|
s.require_paths = %w[lib]
|
31
31
|
|
32
|
-
s.add_dependency('resque', '
|
32
|
+
s.add_dependency('resque', '>= 1.25', '< 3.0')
|
33
33
|
s.add_dependency('resque-scheduler', '~> 4.0')
|
34
34
|
|
35
35
|
s.add_development_dependency('rake', '~> 10.3')
|
@@ -14,7 +14,6 @@ class MockFailureBackend < Resque::Failure::Base
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class MultipleFailureTest < Minitest::Test
|
17
|
-
|
18
17
|
def setup
|
19
18
|
Resque.redis.flushall
|
20
19
|
@worker = Resque::Worker.new(:testing)
|
@@ -27,8 +26,7 @@ class MultipleFailureTest < Minitest::Test
|
|
27
26
|
end
|
28
27
|
|
29
28
|
def failure_key_for(klass)
|
30
|
-
|
31
|
-
key = 'failure-' + klass.redis_retry_key(args)
|
29
|
+
'failure-' + klass.redis_retry_key([])
|
32
30
|
end
|
33
31
|
|
34
32
|
def test_failure_is_passed_on_when_job_class_not_found
|
@@ -41,7 +39,9 @@ class MultipleFailureTest < Minitest::Test
|
|
41
39
|
perform_next_job(@worker)
|
42
40
|
|
43
41
|
assert_equal 1, MockFailureBackend.errors.count, 'should have one error'
|
44
|
-
|
42
|
+
|
43
|
+
uninitialized_constant_pattern = /uninitialized constant.* LimitThreeJobTemp/
|
44
|
+
assert_match uninitialized_constant_pattern, MockFailureBackend.errors.first
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_last_failure_is_saved_in_redis_if_delay
|
data/test/resque_test.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
# make sure the worlds not fallen from beneith us.
|
4
3
|
class ResqueTest < Minitest::Test
|
5
4
|
def test_resque_version
|
6
|
-
major, minor,
|
7
|
-
|
8
|
-
|
5
|
+
major, minor, _ = Resque::Version.split('.')
|
6
|
+
assert [1, 2].include?(major.to_i), 'major version does not match'
|
7
|
+
|
8
|
+
if major.to_i == 1
|
9
|
+
assert_operator minor.to_i, :>=, 25, 'minor version is too low'
|
10
|
+
else
|
11
|
+
assert_operator minor.to_i, :>=, 0, 'minor version is too low'
|
12
|
+
end
|
9
13
|
end
|
10
14
|
|
11
15
|
def test_good_job
|
data/test/test_jobs.rb
CHANGED
@@ -364,8 +364,15 @@ class BaseJob < AsyncJob
|
|
364
364
|
|
365
365
|
def inherited(subclass)
|
366
366
|
super
|
367
|
-
%
|
368
|
-
|
367
|
+
%i[
|
368
|
+
@auto_retry_limit
|
369
|
+
@retry_delay
|
370
|
+
@retry_exceptions
|
371
|
+
@retry_limit
|
372
|
+
].each do |variable|
|
373
|
+
value = nil
|
374
|
+
value = BaseJob.instance_variable_get(variable) \
|
375
|
+
if BaseJob.instance_variable_defined?(variable)
|
369
376
|
value = value.dup rescue value
|
370
377
|
subclass.instance_variable_set(variable, value)
|
371
378
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-retry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Antins
|
@@ -10,22 +10,28 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-04-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: resque
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - "
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '1.25'
|
22
|
+
- - "<"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '3.0'
|
22
25
|
type: :runtime
|
23
26
|
prerelease: false
|
24
27
|
version_requirements: !ruby/object:Gem::Requirement
|
25
28
|
requirements:
|
26
|
-
- - "
|
29
|
+
- - ">="
|
27
30
|
- !ruby/object:Gem::Version
|
28
31
|
version: '1.25'
|
32
|
+
- - "<"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '3.0'
|
29
35
|
- !ruby/object:Gem::Dependency
|
30
36
|
name: resque-scheduler
|
31
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,8 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
223
|
- !ruby/object:Gem::Version
|
218
224
|
version: '0'
|
219
225
|
requirements: []
|
220
|
-
|
221
|
-
rubygems_version: 2.7.6
|
226
|
+
rubygems_version: 3.0.3
|
222
227
|
signing_key:
|
223
228
|
specification_version: 4
|
224
229
|
summary: A resque plugin; provides retry, delay and exponential backoff support for
|