properly throw lock LockClientError

This commit is contained in:
Nick Elser
2015-04-12 20:47:35 -07:00
parent 8166c6b51d
commit 1aacc0c1a1
5 changed files with 13 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
module Suo module Suo
module Client module Client
class Base class Base
DEFAULT_OPTIONS = { DEFAULT_OPTIONS = {
retry_timeout: 0.1, retry_timeout: 0.1,
retry_delay: 0.01, retry_delay: 0.01,
@@ -111,7 +112,7 @@ module Suo
break unless acquisition_lock break unless acquisition_lock
break if set(key, serialize_locks(locks), cas, options) break if set(key, serialize_locks(locks), cas, options)
end end
rescue FailedToAcquireLock => _ # rubocop:disable Lint/HandleExceptions rescue LockClientError => _ # rubocop:disable Lint/HandleExceptions
# ignore - assume success due to optimistic locking # ignore - assume success due to optimistic locking
end end
@@ -163,7 +164,7 @@ module Suo
sleep(rand(options[:retry_delay] * 1000).to_f / 1000) sleep(rand(options[:retry_delay] * 1000).to_f / 1000)
end end
rescue => _ rescue => _
raise FailedToAcquireLock raise LockClientError
end end
def serialize_locks(locks) def serialize_locks(locks)

View File

@@ -1,7 +0,0 @@
module Suo
module Client
module Errors
class FailedToAcquireLock < StandardError; end
end
end
end

View File

@@ -8,7 +8,7 @@ require "redis"
require "msgpack" require "msgpack"
require "suo/client/errors" require "suo/errors"
require "suo/client/base" require "suo/client/base"
require "suo/client/memcached" require "suo/client/memcached"
require "suo/client/redis" require "suo/client/redis"

3
lib/suo/errors.rb Normal file
View File

@@ -0,0 +1,3 @@
module Suo
class LockClientError < StandardError; end
end

View File

@@ -11,6 +11,12 @@ module ClientTests
assert_equal "Client required", exception.message assert_equal "Client required", exception.message
end end
def test_throws_failed_error_on_bad_client
assert_raises(Suo::LockClientError) do
@klass.lock(TEST_KEY, 1, client: {})
end
end
def test_class_single_resource_locking def test_class_single_resource_locking
lock1 = @klass.lock(TEST_KEY, 1, client: @klass_client) lock1 = @klass.lock(TEST_KEY, 1, client: @klass_client)
refute_nil lock1 refute_nil lock1