Use retry instead of while loop for rescuing connection failure (quasor)

This commit is contained in:
Kyle Banker 2010-12-29 13:13:54 -05:00
parent b77b3fe1e6
commit 01c38eabdd
2 changed files with 17 additions and 23 deletions

View File

@ -38,18 +38,14 @@ every half second and time out after thirty seconds.
# Ensure retry upon failure # Ensure retry upon failure
def rescue_connection_failure(max_retries=60) def rescue_connection_failure(max_retries=60)
success = false retries = 0
retries = 0 begin
while !success yield
begin rescue Mongo::ConnectionFailure => ex
yield retries += 1
success = true raise ex if retries > max_retries
rescue Mongo::ConnectionFailure => ex sleep(0.5)
retries += 1 retry
raise ex if retries >= max_retries
sleep(0.5)
end
end
end end
end end

View File

@ -12,17 +12,15 @@ class Test::Unit::TestCase
# Generic code for rescuing connection failures and retrying operations. # Generic code for rescuing connection failures and retrying operations.
# This could be combined with some timeout functionality. # This could be combined with some timeout functionality.
def rescue_connection_failure(max_retries=60) def rescue_connection_failure(max_retries=60)
success = false retries = 0
tries = 0 begin
while !success && tries < max_retries yield
begin rescue Mongo::ConnectionFailure => ex
yield puts "Rescue attempt #{retries}"
success = true retries += 1
rescue Mongo::ConnectionFailure raise ex if retries > max_retries
puts "Rescue attempt #{tries}\n" sleep(1)
tries += 1 retry
sleep(1)
end
end end
end end