redis-reconnect_with_readonly 0.1.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15ff6c001cad1dccfdde9ba2c50f13b9993e432c
4
- data.tar.gz: 8b631aa7157e62ff540abdb75c2f4972e617879b
3
+ metadata.gz: cbdb865f95527d8a9e8ab4fc749d30f7b9cf6947
4
+ data.tar.gz: b6a976fc9d8e32d30bf1c146b28d407564850659
5
5
  SHA512:
6
- metadata.gz: 923f28e0401979e5a86a68a628a516cc3fd56f7347f0125635fcb6e7bde0a9b0fa2be07147211c90c7d3301582ad78ad59a89bd184a6b7ba61a6c28eba98c110
7
- data.tar.gz: 39729e0ea98fbc89a64e1e56111a08823bf3e2c291899760fdbc0d8df22dd074e44e4b4ab851ee456f5fb2fa9dca30540492a549e0d5547e862b1b2b15ead996
6
+ metadata.gz: f9cb7e568d9578ea7ac101957433cd70b433f8d2779516790f7a7749e00133e752623d11fb6b6250636024181f5e9337d7b554b12f4108172f3e0d1f56d91f3d
7
+ data.tar.gz: 0c221329b3f884417b1e8b5123024bf374832947aba838120885898038bf713cb7877efbfb788647a1eea23fe4deb0b9825f1739b6f4e720e7daf8a81a1d04ad
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ # 0.9.0 (2016-08-25)
2
+
3
+ Enhancements:
4
+
5
+ * Add `initial_retry_wait`
6
+
7
+ Changes:
8
+
9
+ * Rename `max_retry_interval` to `max_retry_wait`
10
+ * Change wait formula from `initial_retry_wait ^ number of retries` to `initial_retry_wait * number of retries`
11
+
1
12
  # 0.1.1 (2016-08-24)
2
13
 
3
14
  * Make configurable `reconnect_attempts` and `max_retry_interval`
@@ -5,4 +16,3 @@
5
16
  # 0.1.0 (2016-08-24)
6
17
 
7
18
  First version
8
-
data/README.md CHANGED
@@ -29,12 +29,13 @@ require 'redis/reconnect_with_readonly'
29
29
  ## Configuration
30
30
 
31
31
  This gem tries reconnection `reconnect_attempts` times.
32
- It will wait `2 ^ num of retries` second interval on each retry.
33
- The waiting interval can be suppressed up to `max_retry_interval`.
32
+ It will wait `initial_retry_wait * number of retries` second wait on each retry.
33
+ The waiting wait can be suppressed up to `max_retry_wait`.
34
34
 
35
35
  ```
36
- Redis::ReconnectWithReadonly.reconnect_attempts = 1
37
- Redis::ReconnectWithReadonly.max_retry_interval = 3600
36
+ Redis::ReconnectWithReadonly.reconnect_attempts = 10 # default: 3 (times)
37
+ Redis::ReconnectWithReadonly.initial_retry_wait = 1.0 # default: 0.5 (sec)
38
+ Redis::ReconnectWithReadonly.max_retry_wait = 5.0 # default: nil which means no max (sec)
38
39
  ```
39
40
 
40
41
  ## Implementation
@@ -61,9 +62,12 @@ $ bin/console
61
62
 
62
63
  ## Contributing
63
64
 
64
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/redis-reconnect_with_readonly. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
65
+ Bug reports and pull requests are welcome on GitHub at https://github.com/sonots/redis-reconnect_with_readonly. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
65
66
 
66
67
  ## License
67
68
 
68
69
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
69
70
 
71
+ ## ChangeLog
72
+
73
+ [CHANGELOG.md](./CHANGELOG.md)
data/bin/try CHANGED
@@ -5,7 +5,8 @@ require "redis/reconnect_with_readonly"
5
5
  require 'logger'
6
6
 
7
7
  Redis::ReconnectWithReadonly.reconnect_attempts = 5
8
- Redis::ReconnectWithReadonly.max_retry_interval = 3
8
+ Redis::ReconnectWithReadonly.initial_retry_wait = 1
9
+ Redis::ReconnectWithReadonly.max_retry_wait = 3
9
10
 
10
11
  logger = Logger.new(STDOUT)
11
12
  redis = Redis.new(host: 'localhost', port: '6380', logger: logger)
@@ -5,18 +5,17 @@ require 'redis/errors'
5
5
 
6
6
  class Redis
7
7
  class ReconnectWithReadonly
8
- @reconnect_attempts = 1
9
- @max_retry_interval = 3600 # sec
8
+ @reconnect_attempts = 3
9
+ @initial_retry_wait = 0.5
10
+ @max_retry_wait = nil
10
11
 
11
12
  class << self
12
- attr_accessor :reconnect_attempts, :max_retry_interval
13
+ attr_accessor :reconnect_attempts, :initial_retry_wait, :max_retry_wait
13
14
  end
14
15
  end
15
16
  end
16
17
 
17
18
  class Redis
18
- class ReadonlyConnectionError < ConnectionError; end
19
-
20
19
  class Client
21
20
  def reconnect_with_readonly(&block)
22
21
  retries = 0
@@ -25,12 +24,13 @@ class Redis
25
24
  rescue CommandError => e
26
25
  if e.message =~ /READONLY/
27
26
  if retries < (max_retries = ReconnectWithReadonly.reconnect_attempts)
28
- interval = [2**retries, ReconnectWithReadonly.max_retry_interval].min
27
+ wait = ReconnectWithReadonly.initial_retry_wait * retries
28
+ wait = [wait, ReconnectWithReadonly.max_retry_wait].min if ReconnectWithReadonly.max_retry_wait
29
29
  logger.info {
30
30
  "Reconnect with readonly: #{e.message} " \
31
- "(retries: #{retries}/#{max_retries}) (wait: #{interval}sec)"
31
+ "(retries: #{retries}/#{max_retries}) (wait: #{wait}sec)"
32
32
  } if logger
33
- sleep interval
33
+ sleep wait
34
34
  retries += 1
35
35
  retry
36
36
  else
@@ -1,5 +1,5 @@
1
1
  class Redis
2
2
  class ReconnectWithReadonly
3
- VERSION = "0.1.1"
3
+ VERSION = "0.9.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-reconnect_with_readonly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-24 00:00:00.000000000 Z
11
+ date: 2016-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis