mirror of
https://github.com/dkam/suo.git
synced 2025-01-29 07:42:43 +00:00
simplify defaults logic and fix retry timeouts
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user