retriable 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/CHANGELOG.md +21 -5
- data/README.md +19 -5
- data/lib/retriable.rb +11 -12
- data/lib/retriable/core_ext/kernel.rb +1 -1
- data/lib/retriable/exponential_backoff.rb +6 -13
- data/lib/retriable/version.rb +1 -1
- data/retriable.gemspec +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d49b14baf33d9680297e0deeffaa6f4151eee60
|
4
|
+
data.tar.gz: 16c3c0a85a0ecf4ba880d9a24d51469940a21e1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f5f5189eeddd4b00048a49a706e1ac76d3c9e3487d565bbaed482b45264b1a9d9d24ff3688d7d2939fd4996657836d476b6298238a21d1f485b29c9767395e7
|
7
|
+
data.tar.gz: ca03e49b50e5f33eb0954de07fb0af1358abe3e595936684e91cd394c6397bd08f290ea6c7abd08c76e69564c0e6eba6dd524b2b295ed365724f203c61ef527f
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,13 +1,28 @@
|
|
1
1
|
## HEAD
|
2
2
|
|
3
|
-
|
3
|
+
## 2.0.1
|
4
|
+
|
5
|
+
* Add support for ruby 1.9.3.
|
6
|
+
|
7
|
+
## 2.0.0
|
8
|
+
|
9
|
+
* Require ruby 2.0+.
|
10
|
+
* Time intervals default to randomized exponential backoff instead of fixed time intervals. The delay between retries grows with every attempt and there's a randomization factor added to each attempt.
|
11
|
+
* `base_interval`, `max_interval`, `rand_factor`, and `multiplier` are new arguments that are used to generate randomized exponential back off time intervals.
|
12
|
+
* `interval` argument removed.
|
13
|
+
* Accept `intervals` array argument to provide your own custom intervals.
|
14
|
+
* Allow configurable defaults via `Retriable#configure` block.
|
15
|
+
* Add ability for `:on` argument to accept a `Hash` where the keys are exception types and the values are a single or array of `Regexp` pattern(s) to match against exception messages for retrial.
|
16
|
+
* Raise, not return, on max elapsed time.
|
17
|
+
* Check for elapsed time after next interval is calculated and it goes over the max elapsed time.
|
18
|
+
* Support early termination via `max_elapsed_time` argument.
|
4
19
|
|
5
20
|
## 2.0.0.beta5
|
6
21
|
* Change `:max_tries` back to `:tries`.
|
7
22
|
|
8
23
|
## 2.0.0.beta4
|
9
24
|
* Change #retry back to #retriable. Didn't like the idea of defining a method that is also a reserved word.
|
10
|
-
* Add ability for `:on` argument to accept a `Hash` where the keys are exception types and the values are a single or
|
25
|
+
* Add ability for `:on` argument to accept a `Hash` where the keys are exception types and the values are a single or array of `Regexp` pattern(s) to match against exception messages for retrial.
|
11
26
|
|
12
27
|
## 2.0.0.beta3
|
13
28
|
* Accept `intervals` array argument to provide your own custom intervals.
|
@@ -15,15 +30,16 @@
|
|
15
30
|
* Add specs for exponential backoff, randomization, and config.
|
16
31
|
|
17
32
|
## 2.0.0.beta2
|
18
|
-
* Raise not return on max elapsed time
|
33
|
+
* Raise, not return, on max elapsed time.
|
34
|
+
* Check for elapsed time after next interval is calculated and it goes over the max elapsed time.
|
19
35
|
* Add specs for `max_elapsed_time` and `max_interval`.
|
20
36
|
|
21
37
|
## 2.0.0.beta1
|
22
38
|
* Require ruby 2.0+.
|
23
39
|
* Default to random exponential backoff, removes the `interval` option. Exponential backoff is configurable via arguments.
|
24
|
-
* Allow configurable defaults via
|
40
|
+
* Allow configurable defaults via `Retriable#configure` block.
|
25
41
|
* Change `Retriable.retriable` to `Retriable.retry`.
|
26
|
-
* Support `max_elapsed_time`
|
42
|
+
* Support early termination via `max_elapsed_time` argument.
|
27
43
|
|
28
44
|
## 1.4.1
|
29
45
|
* Fixes non kernel mode bug. Remove DSL class, move `#retriable` into Retriable module. Thanks @mkrogemann.
|
data/README.md
CHANGED
@@ -8,9 +8,11 @@ Retriable is an simple DSL to retry failed code blocks with randomized [exponent
|
|
8
8
|
|
9
9
|
## Requirements
|
10
10
|
|
11
|
-
Ruby
|
11
|
+
Ruby 1.9.3+
|
12
12
|
|
13
|
-
If you need 1.
|
13
|
+
If you need ruby 1.8.x to 1.9.2 support, use the [1.x branch](https://github.com/kamui/retriable/tree/1.x).
|
14
|
+
|
15
|
+
There's a [1.x to 2.x migration wiki entry](https://github.com/kamui/retriable/wiki/Migrating-to-2.x) available.
|
14
16
|
|
15
17
|
WARNING: 2.x isn't API compatible with 1.x.
|
16
18
|
|
@@ -161,10 +163,22 @@ end
|
|
161
163
|
|
162
164
|
### Turn off Exponential Backoff
|
163
165
|
|
164
|
-
Exponential backoff is enabled by default, if you want to simply
|
166
|
+
Exponential backoff is enabled by default, if you want to simply retry code every second, 5 times maximum, you can do this:
|
165
167
|
|
166
168
|
```ruby
|
167
|
-
Retriable.retriable base_interval: 1.0, multiplier: 1.0, rand_factor: 0.0 do
|
169
|
+
Retriable.retriable tries: 5, base_interval: 1.0, multiplier: 1.0, rand_factor: 0.0 do
|
170
|
+
# code here...
|
171
|
+
end
|
172
|
+
```
|
173
|
+
|
174
|
+
This works by starting at a 1 second interval (`base_interval`), setting the `multipler` to 1.0 means each subsequent try will increase 1x, which is still `1.0` seconds, and then a `rand_factor` of 0.0 means that there's no randomization of that interval. By default, it would randomize 0.25 seconds, which would mean normally the intervals would randomize between 0.75 and 1.25 seconds, but in this case `rand_factor` is basically being disabled.
|
175
|
+
|
176
|
+
Another way to accomplish this would be to create an array with a fixed interval. In this example, `Array.new(5, 1)` creates an array with 5 elements, all with the value 1. The code block will retry up to 5 times, and wait 1 second between each attempt.
|
177
|
+
|
178
|
+
```ruby
|
179
|
+
# Array.new(5, 1) # => [1, 1, 1, 1, 1]
|
180
|
+
|
181
|
+
Retriable.retriable intervals: Array.new(5, 1) do
|
168
182
|
# code here...
|
169
183
|
end
|
170
184
|
```
|
@@ -236,4 +250,4 @@ end
|
|
236
250
|
|
237
251
|
## Credits
|
238
252
|
|
239
|
-
|
253
|
+
The randomized exponetial backoff implementation was inspired by the one used in Google's [google-http-java-client](https://code.google.com/p/google-http-java-client/wiki/ExponentialBackoff) project.
|
data/lib/retriable.rb
CHANGED
@@ -16,18 +16,17 @@ module Retriable
|
|
16
16
|
@config ||= Config.new
|
17
17
|
end
|
18
18
|
|
19
|
-
def retriable(
|
20
|
-
|
21
|
-
|
22
|
-
max_interval
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
)
|
19
|
+
def retriable(opts = {})
|
20
|
+
tries = opts[:tries] || config.tries
|
21
|
+
base_interval = opts[:base_interval] || config.base_interval
|
22
|
+
max_interval = opts[:max_interval] || config.max_interval
|
23
|
+
rand_factor = opts[:rand_factor] || config.rand_factor
|
24
|
+
multiplier = opts[:multiplier] || config.multiplier
|
25
|
+
max_elapsed_time = opts[:max_elapsed_time] || config.max_elapsed_time
|
26
|
+
intervals = opts[:intervals] || config.intervals
|
27
|
+
timeout = opts[:timeout] || config.timeout
|
28
|
+
on = opts[:on] || config.on
|
29
|
+
on_retry = opts[:on_retry] || config.on_retry
|
31
30
|
|
32
31
|
start_time = Time.now
|
33
32
|
elapsed_time = -> { Time.now - start_time }
|
@@ -6,19 +6,12 @@ module Retriable
|
|
6
6
|
attr_accessor :max_interval
|
7
7
|
attr_accessor :rand_factor
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
)
|
16
|
-
|
17
|
-
@tries = tries
|
18
|
-
@base_interval = base_interval
|
19
|
-
@multiplier = multiplier
|
20
|
-
@max_interval = max_interval
|
21
|
-
@rand_factor = rand_factor
|
9
|
+
def initialize(opts = {})
|
10
|
+
@tries = opts[:tries] || Retriable.config.tries
|
11
|
+
@base_interval = opts[:base_interval] || Retriable.config.base_interval
|
12
|
+
@max_interval = opts[:max_interval] || Retriable.config.max_interval
|
13
|
+
@rand_factor = opts[:rand_factor] || Retriable.config.rand_factor
|
14
|
+
@multiplier = opts[:multiplier] || Retriable.config.multiplier
|
22
15
|
end
|
23
16
|
|
24
17
|
def intervals
|
data/lib/retriable/version.rb
CHANGED
data/retriable.gemspec
CHANGED
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.required_ruby_version = '>= 2.0.0'
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.7"
|
25
|
-
spec.add_development_dependency "rake", "~> 10.
|
25
|
+
spec.add_development_dependency "rake", "~> 10.4"
|
26
26
|
|
27
|
-
spec.add_development_dependency "minitest", "~> 5.
|
27
|
+
spec.add_development_dependency "minitest", "~> 5.5"
|
28
28
|
spec.add_development_dependency "guard"
|
29
29
|
spec.add_development_dependency "guard-minitest"
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: retriable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Chu
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '10.
|
33
|
+
version: '10.4'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '10.
|
40
|
+
version: '10.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '5.
|
47
|
+
version: '5.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '5.
|
54
|
+
version: '5.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|