mirror of
https://github.com/dkam/suo.git
synced 2025-01-29 07:42:43 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
857fc63378 | ||
|
|
bb6762bbc6 | ||
|
|
f0977c89f2 | ||
|
|
4d5c96309f | ||
|
|
8d6061b137 |
@@ -1,3 +1,7 @@
|
||||
## 0.2.1
|
||||
|
||||
- Fix bug when dealing with real-world Redis error conditions.
|
||||
|
||||
## 0.2.0
|
||||
|
||||
- Refactor class methods into instance methods to simplify implementation.
|
||||
|
||||
16
lib/suo.rb
16
lib/suo.rb
@@ -1,2 +1,16 @@
|
||||
require "securerandom"
|
||||
require "monitor"
|
||||
|
||||
require "dalli"
|
||||
require "dalli/cas/client"
|
||||
|
||||
require "redis"
|
||||
|
||||
require "msgpack"
|
||||
|
||||
require "suo/version"
|
||||
require "suo/clients"
|
||||
|
||||
require "suo/errors"
|
||||
require "suo/client/base"
|
||||
require "suo/client/memcached"
|
||||
require "suo/client/redis"
|
||||
|
||||
@@ -49,7 +49,7 @@ module Suo
|
||||
val, cas = get(key)
|
||||
|
||||
if val.nil?
|
||||
set_initial(key)
|
||||
initial_set(key)
|
||||
next
|
||||
end
|
||||
|
||||
@@ -94,7 +94,7 @@ module Suo
|
||||
val, cas = get(key)
|
||||
|
||||
if val.nil?
|
||||
set_initial(key)
|
||||
initial_set(key)
|
||||
next
|
||||
end
|
||||
|
||||
@@ -123,7 +123,7 @@ module Suo
|
||||
fail NotImplementedError
|
||||
end
|
||||
|
||||
def set_initial(key) # rubocop:disable Lint/UnusedMethodArgument
|
||||
def initial_set(key) # rubocop:disable Lint/UnusedMethodArgument
|
||||
fail NotImplementedError
|
||||
end
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ module Suo
|
||||
@client.set_cas(key, newval, cas)
|
||||
end
|
||||
|
||||
def set_initial(key)
|
||||
def initial_set(key)
|
||||
@client.set(key, "")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,7 +21,7 @@ module Suo
|
||||
multi.set(key, newval)
|
||||
end
|
||||
|
||||
ret[0] == "OK"
|
||||
ret && ret[0] == "OK"
|
||||
end
|
||||
|
||||
def synchronize(key)
|
||||
@@ -32,7 +32,7 @@ module Suo
|
||||
@client.unwatch
|
||||
end
|
||||
|
||||
def set_initial(key)
|
||||
def initial_set(key)
|
||||
@client.set(key, "")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
require "securerandom"
|
||||
require "monitor"
|
||||
|
||||
require "dalli"
|
||||
require "dalli/cas/client"
|
||||
|
||||
require "redis"
|
||||
|
||||
require "msgpack"
|
||||
|
||||
require "suo/errors"
|
||||
require "suo/client/base"
|
||||
require "suo/client/memcached"
|
||||
require "suo/client/redis"
|
||||
@@ -1,3 +1,3 @@
|
||||
module Suo
|
||||
VERSION = "0.2.0"
|
||||
VERSION = "0.2.1"
|
||||
end
|
||||
|
||||
@@ -10,7 +10,7 @@ module ClientTests
|
||||
end
|
||||
end
|
||||
|
||||
def test_class_single_resource_locking
|
||||
def test_single_resource_locking
|
||||
lock1 = @client.lock(TEST_KEY, 1)
|
||||
refute_nil lock1
|
||||
|
||||
@@ -27,7 +27,7 @@ module ClientTests
|
||||
assert_equal false, locked
|
||||
end
|
||||
|
||||
def test_class_multiple_resource_locking
|
||||
def test_multiple_resource_locking
|
||||
lock1 = @client.lock(TEST_KEY, 2)
|
||||
refute_nil lock1
|
||||
|
||||
@@ -72,8 +72,9 @@ module ClientTests
|
||||
output = Queue.new
|
||||
threads = []
|
||||
|
||||
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "One"; sleep 2 } }
|
||||
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "Two"; sleep 2 } }
|
||||
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "One"; sleep 0.5 } }
|
||||
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "Two"; sleep 0.5 } }
|
||||
sleep 0.1
|
||||
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "Three" } }
|
||||
|
||||
threads.map(&:join)
|
||||
@@ -86,10 +87,10 @@ module ClientTests
|
||||
ret.sort!
|
||||
|
||||
assert_equal 0, output.size
|
||||
assert_equal ["One", "Two"], ret
|
||||
assert_equal %w(One Two), ret
|
||||
end
|
||||
|
||||
def test_instance_multiple_resource_locking
|
||||
def test_block_multiple_resource_locking
|
||||
success_counter = Queue.new
|
||||
failure_counter = Queue.new
|
||||
|
||||
@@ -97,7 +98,7 @@ module ClientTests
|
||||
|
||||
100.times.map do |i|
|
||||
Thread.new do
|
||||
success = @client.lock(TEST_KEY, 50) do
|
||||
success = client.lock(TEST_KEY, 50) do
|
||||
sleep(3)
|
||||
success_counter << i
|
||||
end
|
||||
@@ -110,7 +111,7 @@ module ClientTests
|
||||
assert_equal 50, failure_counter.size
|
||||
end
|
||||
|
||||
def test_instance_multiple_resource_locking_longer_timeout
|
||||
def test_block_multiple_resource_locking_longer_timeout
|
||||
success_counter = Queue.new
|
||||
failure_counter = Queue.new
|
||||
|
||||
|
||||
@@ -6,4 +6,3 @@ require "minitest/autorun"
|
||||
require "minitest/benchmark"
|
||||
|
||||
ENV["SUO_TEST"] = "true"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user