activejob-retry 0.4.1 → 0.4.2
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/Gemfile.lock +1 -1
- data/README.md +43 -0
- data/Rakefile +1 -1
- data/lib/active_job/retry.rb +0 -1
- data/lib/active_job/retry/version.rb +1 -1
- data/test/helper.rb +11 -0
- data/test/integration/queuing_test.rb +1 -2
- data/test/support/integration/adapters/sidekiq.rb +11 -0
- data/test/support/integration/dummy_app_template.rb +9 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5143405bed9e31a9105b3dc8d245f6e6d6b3f772
|
|
4
|
+
data.tar.gz: 029ae74c9cce202706f109991d67b07404cef2fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a34362c6832bf49579a692d5219d808a46ccc2a89c9ebe6b02e8a53f8158091a20ce9e546697f3b78bc7c3a9294e84ec9cf0f8fb096f4d7c444e0f54f08f22d2
|
|
7
|
+
data.tar.gz: 5b3457112e0080fd42c0e9f288b89c8fd15cf473b6ce815a801be010949ed21a8555425503dd9b5b6cf08294384ee7383039e3c12fa31231ba3774395ac985c6
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -62,6 +62,49 @@ if the exception is not going to be retried, or has failed the final retry.
|
|
|
62
62
|
| `retryable_exceptions` | `nil` | Same as for [constant_retry](#constant_retry-options).
|
|
63
63
|
| `fatal_exceptions` | `[]` | Same as for [constant_retry](#constant_retry-options).
|
|
64
64
|
|
|
65
|
+
## Supported backends
|
|
66
|
+
|
|
67
|
+
Any queue adapter which supports delayed enqueuing (i.e. the `enqueue_at`
|
|
68
|
+
method) will work with ActiveJob::Retry, however some queue backends have
|
|
69
|
+
automatic retry logic, which should be disabled. The cleanest way to do this is
|
|
70
|
+
to use a `rescue_from` in the jobs for which you're using ActiveJob::Retry, so
|
|
71
|
+
the queue backend never perceives the job as having failed. E.g.:
|
|
72
|
+
|
|
73
|
+
```ruby
|
|
74
|
+
class MyJob < ActiveJob::Base
|
|
75
|
+
include ActiveJob::Retry
|
|
76
|
+
|
|
77
|
+
queue_as :some_job
|
|
78
|
+
|
|
79
|
+
constant_retry limit: 3, delay: 5, retryable_exceptions: [TimeoutError, NetworkError]
|
|
80
|
+
|
|
81
|
+
rescue_from(StandardError) { |error| MyErrorService.record(error) }
|
|
82
|
+
|
|
83
|
+
def perform
|
|
84
|
+
raise "Weird!"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Since `rescue_from`s are only executed once all retries have been attempted,
|
|
90
|
+
this will send the recurring error to your error service (e.g. Airbrake,
|
|
91
|
+
Sentry), but will make it appear to the queue backend (e.g. Que, Sidekiq) as if
|
|
92
|
+
the job has succeeded.
|
|
93
|
+
|
|
94
|
+
An alternative is to alter the appropriate `JobWrapper` to alter the
|
|
95
|
+
configuration of the backend to disable retries globally. For Sidekiq this
|
|
96
|
+
would be:
|
|
97
|
+
|
|
98
|
+
```ruby
|
|
99
|
+
# config/initializers/disable_sidekiq_retries.rb
|
|
100
|
+
ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper.sidekiq_options(retry: false)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
This has the advantages of moving failed jobs to the Dead Job Queue instead of
|
|
104
|
+
just executing the logic in the `rescue_from`, which makes manual re-enqueueing
|
|
105
|
+
easier. On the other hand it does disable Sidekiq's automatic retrying for all
|
|
106
|
+
ActiveJob jobs.
|
|
107
|
+
|
|
65
108
|
Contributing
|
|
66
109
|
------------
|
|
67
110
|
|
data/Rakefile
CHANGED
data/lib/active_job/retry.rb
CHANGED
|
@@ -16,7 +16,6 @@ module ActiveJob
|
|
|
16
16
|
'ActiveJob::QueueAdapters::InlineAdapter',
|
|
17
17
|
'ActiveJob::QueueAdapters::QuAdapter',
|
|
18
18
|
'ActiveJob::QueueAdapters::QueueClassicAdapter',
|
|
19
|
-
'ActiveJob::QueueAdapters::SidekiqAdapter',
|
|
20
19
|
'ActiveJob::QueueAdapters::SneakersAdapter',
|
|
21
20
|
'ActiveJob::QueueAdapters::SuckerPunchAdapter'
|
|
22
21
|
].freeze
|
data/test/helper.rb
CHANGED
|
@@ -8,6 +8,17 @@ GlobalID.app = 'aj'
|
|
|
8
8
|
|
|
9
9
|
@adapter = ENV['AJADAPTER'] || 'resque'
|
|
10
10
|
|
|
11
|
+
def sidekiq?
|
|
12
|
+
@adapter == 'sidekiq'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def ruby_193?
|
|
16
|
+
RUBY_VERSION == '1.9.3' && RUBY_ENGINE != 'java'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Sidekiq doesn't work with MRI 1.9.3
|
|
20
|
+
exit if sidekiq? && ruby_193?
|
|
21
|
+
|
|
11
22
|
if ENV['AJ_INTEGRATION_TESTS']
|
|
12
23
|
require 'support/integration/helper'
|
|
13
24
|
else
|
|
@@ -45,8 +45,7 @@ class QueuingTest < ActiveSupport::TestCase
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
test 'should call rescue_from only when retries have run out' do
|
|
48
|
-
TestJob.
|
|
49
|
-
TestJob.perform_later(@id, false, true)
|
|
48
|
+
TestJob.perform_later(@id, false, true, true)
|
|
50
49
|
|
|
51
50
|
wait_for_jobs_to_finish_for(2.seconds)
|
|
52
51
|
assert_not job_executed
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
require 'sidekiq/cli'
|
|
2
2
|
require 'sidekiq/api'
|
|
3
3
|
|
|
4
|
+
module Sidekiq
|
|
5
|
+
class CLI
|
|
6
|
+
def boot_system_with_rescue
|
|
7
|
+
boot_system_without_rescue
|
|
8
|
+
rescue => e
|
|
9
|
+
raise unless /Application has been already initialized./ =~ e.message
|
|
10
|
+
end
|
|
11
|
+
alias_method_chain :boot_system, :rescue
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
4
15
|
module SidekiqJobsManager
|
|
5
16
|
|
|
6
17
|
def setup
|
|
@@ -17,7 +17,15 @@ class TestJob < ActiveJob::Base
|
|
|
17
17
|
queue_as :integration_tests
|
|
18
18
|
constant_retry limit: 2, delay: 3
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
rescue_from(RuntimeError) do |e|
|
|
21
|
+
if arguments[3]
|
|
22
|
+
write_to_rescue_file
|
|
23
|
+
else
|
|
24
|
+
raise e
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def perform(x, fail_first = false, fail_always = false, rescue_file = false)
|
|
21
29
|
raise "Failing first" if fail_first && retry_attempt == 1
|
|
22
30
|
raise "Failing always" if fail_always
|
|
23
31
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activejob-retry
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Isaac Seymour
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-03-
|
|
11
|
+
date: 2015-03-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activejob
|