sidekiq-retries 0.2.0 → 0.3.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 +7 -0
- data/Gemfile +1 -0
- data/HISTORY.md +4 -0
- data/README.md +16 -8
- data/Rakefile +2 -0
- data/lib/sidekiq/retries/server/middleware.rb +1 -47
- data/lib/sidekiq/retries/version.rb +1 -1
- data/sidekiq-retries.gemspec +1 -1
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f60b5afa37dea410255c1b748aa0274ed065f5b
|
4
|
+
data.tar.gz: e4658e58fa25eda6e6483907a2804cc789fc42f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ead691bdce28f57974d1f10eacd84eaac9158ac4e6c0dc5dcb81ea62a8224ab4158166e7d10945247898ad46def81d5eb4c1d1aced48767b2ccc19f7ba8a427f
|
7
|
+
data.tar.gz: e818436af75490f09ed2215da50b27bba1a6ed351a9758ce44bdeb106db963dd0d4f8e75f30eed58639486bb401416f09d9e498ff86537570e0fd05eec901f9d
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.3.0
|
4
|
+
* stop cutting + pasting Sidekiq retry logic, which is now extracted into a method (https://github.com/mperham/sidekiq/pull/1928)
|
5
|
+
* require sidekiq 3.2.4
|
6
|
+
|
3
7
|
## 0.2.0
|
4
8
|
* simplify retry/fail logic
|
5
9
|
* fix retry: 0, which was going straight to the dead queue
|
data/README.md
CHANGED
@@ -1,7 +1,17 @@
|
|
1
1
|
# Sidekiq::Retries
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
[](https://travis-ci.org/govdelivery/sidekiq-retries)
|
4
|
+
|
5
|
+
This subclasses the stock Sidekiq retries middleware so that you can
|
6
|
+
|
7
|
+
* retry a job that has retries disabled (retry: 0 or retry: false)
|
8
|
+
* abort (don't retry) a job that will otherwise retry by default
|
9
|
+
|
10
|
+
but still have the job raise an exception so that you can observe that the job failed (by checking the logs,
|
11
|
+
using sidekiq-failures, etc.).
|
12
|
+
|
13
|
+
Don't use this as a replacement for making your jobs idempotent!
|
14
|
+
|
5
15
|
|
6
16
|
## Installation
|
7
17
|
|
@@ -9,6 +19,8 @@ Add this line to your application's Gemfile:
|
|
9
19
|
|
10
20
|
gem 'sidekiq-retries'
|
11
21
|
|
22
|
+
|
23
|
+
|
12
24
|
## Usage
|
13
25
|
|
14
26
|
class NoRetryJob
|
@@ -16,7 +28,7 @@ Add this line to your application's Gemfile:
|
|
16
28
|
sidekiq_options retry: false # or retry: 0
|
17
29
|
|
18
30
|
def perform
|
19
|
-
#
|
31
|
+
# retry this job when it otherwise would not
|
20
32
|
raise Sidekiq::Retries::Retry.new(RuntimeError.new('whatever happened'))
|
21
33
|
end
|
22
34
|
end
|
@@ -26,14 +38,10 @@ Add this line to your application's Gemfile:
|
|
26
38
|
sidekiq_options retry: 25
|
27
39
|
|
28
40
|
def perform
|
29
|
-
#
|
41
|
+
# don't retry this particular job
|
30
42
|
raise Sidekiq::Retries::Fail.new(RuntimeError.new('whatever happened'))
|
31
43
|
end
|
32
44
|
end
|
33
|
-
|
34
|
-
## Caveats
|
35
|
-
|
36
|
-
* Jobs with retry: 0 don't ever appear to show up in the Sidekiq 3 Dead queue
|
37
45
|
|
38
46
|
## Contributing
|
39
47
|
|
data/Rakefile
CHANGED
@@ -20,56 +20,10 @@ module Sidekiq
|
|
20
20
|
# seriously, don't retry this
|
21
21
|
raise e.cause
|
22
22
|
rescue Exception => e
|
23
|
-
attempt_retry(worker, msg, queue, e) if msg['retry']
|
24
|
-
raise e
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
# This is the default Sidekiq 3.2.2 retry logic
|
30
|
-
def attempt_retry(worker, msg, queue, e)
|
31
23
|
# ignore, will be pushed back onto queue during hard_shutdown
|
32
24
|
raise Sidekiq::Shutdown if exception_caused_by_shutdown?(e)
|
33
|
-
|
34
25
|
raise e unless msg['retry']
|
35
|
-
|
36
|
-
|
37
|
-
msg['queue'] = if msg['retry_queue']
|
38
|
-
msg['retry_queue']
|
39
|
-
else
|
40
|
-
queue
|
41
|
-
end
|
42
|
-
msg['error_message'] = e.message[0..10_000]
|
43
|
-
msg['error_class'] = e.class.name
|
44
|
-
count = if msg['retry_count']
|
45
|
-
msg['retried_at'] = Time.now.to_f
|
46
|
-
msg['retry_count'] += 1
|
47
|
-
else
|
48
|
-
msg['failed_at'] = Time.now.to_f
|
49
|
-
msg['retry_count'] = 0
|
50
|
-
end
|
51
|
-
|
52
|
-
if msg['backtrace'] == true
|
53
|
-
msg['error_backtrace'] = e.backtrace
|
54
|
-
elsif msg['backtrace'] == false
|
55
|
-
# do nothing
|
56
|
-
elsif msg['backtrace'].to_i != 0
|
57
|
-
msg['error_backtrace'] = e.backtrace[0..msg['backtrace'].to_i]
|
58
|
-
end
|
59
|
-
|
60
|
-
if count < max_retry_attempts
|
61
|
-
delay = delay_for(worker, count)
|
62
|
-
logger.debug { "Failure! Retry #{count} in #{delay} seconds" }
|
63
|
-
retry_at = Time.now.to_f + delay
|
64
|
-
payload = Sidekiq.dump_json(msg)
|
65
|
-
Sidekiq.redis do |conn|
|
66
|
-
conn.zadd('retry', retry_at.to_s, payload)
|
67
|
-
end
|
68
|
-
else
|
69
|
-
# Goodbye dear message, you (re)tried your best I'm sure.
|
70
|
-
retries_exhausted(worker, msg)
|
71
|
-
end
|
72
|
-
|
26
|
+
attempt_retry(worker, msg, queue, e)
|
73
27
|
raise e
|
74
28
|
end
|
75
29
|
|
data/sidekiq-retries.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency
|
21
|
+
spec.add_dependency 'sidekiq', '>= 3.2.4', '~>3.2'
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
23
|
spec.add_development_dependency 'rake'
|
24
24
|
spec.add_development_dependency 'rspec'
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-retries
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Ortega
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.4
|
17
20
|
- - "~>"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
22
|
+
version: '3.2'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.4
|
24
30
|
- - "~>"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3.
|
32
|
+
version: '3.2'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: bundler
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +136,7 @@ extensions: []
|
|
130
136
|
extra_rdoc_files: []
|
131
137
|
files:
|
132
138
|
- ".gitignore"
|
139
|
+
- ".travis.yml"
|
133
140
|
- Gemfile
|
134
141
|
- HISTORY.md
|
135
142
|
- LICENSE.txt
|