Skip to content

Commit 48e6327

Browse files
committed
Merge branch 'reconnect-attempts'
Resolves #347
2 parents d15b396 + 977f58f commit 48e6327

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

lib/redis/client.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Client
1717
:driver => nil,
1818
:id => nil,
1919
:tcp_keepalive => 0,
20+
:reconnect_attempts => 1,
2021
:inherit_socket => false
2122
}
2223

@@ -309,7 +310,7 @@ def establish_connection
309310
end
310311

311312
def ensure_connected
312-
tries = 0
313+
attempts = 0
313314

314315
begin
315316
tries += 1
@@ -325,11 +326,16 @@ def ensure_connected
325326
connect
326327
end
327328

329+
<<<<<<< HEAD
330+
=======
331+
attempts += 1
332+
333+
>>>>>>> make number of retries in ensure_connected configurable
328334
yield
329335
rescue ConnectionError, InheritedError
330336
disconnect
331337

332-
if tries < 2 && @reconnect
338+
if attempts <= @options[:reconnect_attempts] && @reconnect
333339
retry
334340
else
335341
raise

test/internals_test.rb

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def test_connection_timeout
157157
end
158158
end
159159

160-
def close_on_ping(seq)
160+
def close_on_ping(seq, options = {})
161161
$request = 0
162162

163163
command = lambda do
@@ -169,7 +169,7 @@ def close_on_ping(seq)
169169
rv
170170
end
171171

172-
redis_mock(:ping => command, :timeout => 0.1) do |redis|
172+
redis_mock({:ping => command}, {:timeout => 0.1}.merge(options)) do |redis|
173173
yield(redis)
174174
end
175175
end
@@ -218,6 +218,22 @@ def test_retry_only_once_when_read_raises_econnreset
218218
end
219219
end
220220

221+
def test_retry_with_custom_reconnect_attempts
222+
close_on_ping([0, 1], :reconnect_attempts => 2) do |redis|
223+
assert_equal "2", redis.ping
224+
end
225+
end
226+
227+
def test_retry_with_custom_reconnect_attempts_can_still_fail
228+
close_on_ping([0, 1, 2], :reconnect_attempts => 2) do |redis|
229+
assert_raise Redis::ConnectionError do
230+
redis.ping
231+
end
232+
233+
assert !redis.client.connected?
234+
end
235+
end
236+
221237
def test_don_t_retry_when_second_read_in_pipeline_raises_econnreset
222238
close_on_ping([1]) do |redis|
223239
assert_raise Redis::ConnectionError do

0 commit comments

Comments
 (0)