simplify defaults logic and fix retry timeouts

This commit is contained in:
Nick Elser
2015-04-12 19:42:59 -07:00
parent 0828cd546b
commit a54b795e20
2 changed files with 7 additions and 11 deletions

View File

@@ -2,13 +2,13 @@ module Suo
module Client
class Base
DEFAULT_OPTIONS = {
retry_count: 3,
retry_timeout: 0.1,
retry_delay: 0.01,
stale_lock_expiration: 3600
}.freeze
def initialize(options = {})
@options = self.class.merge_defaults(options).merge(_initialized: true)
@options = self.class.merge_defaults(options)
end
def lock(key, resources = 1, options = {})
@@ -120,15 +120,11 @@ module Suo
end
def merge_defaults(options = {})
unless options[:_initialized]
options = self::DEFAULT_OPTIONS.merge(options)
fail "Client required" unless options[:client]
end
if options[:retry_timeout]
options[:retry_count] = (options[:retry_timeout] / options[:retry_delay].to_f).floor
end
options[:retry_count] = (options[:retry_timeout] / options[:retry_delay].to_f).ceil
options
end

View File

@@ -76,7 +76,7 @@ module ClientTests
100.times.map do |i|
Thread.new do
success = @client.lock(TEST_KEY, 50, retry_timeout: 0.9) do
sleep(1.1)
sleep(1)
success_counter << i
end
@@ -95,7 +95,7 @@ module ClientTests
100.times.map do |i|
Thread.new do
success = @client.lock(TEST_KEY, 50, retry_timeout: 2) do
sleep(1)
sleep(0.5)
success_counter << i
end