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

View File

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