redic-pool 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/CHANGELOG.md +8 -0
- data/README.md +1 -1
- data/lib/redic/pool.rb +18 -3
- data/test/ohm_test.rb +45 -0
- data/test/pool_test.rb +16 -69
- data/test/prelude.rb +27 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWY0MzFlY2M4MWFjZTBkNmMwYzVlMjY5ZjI1NTUzZmE0OWQzMzg2Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2Y1ZmM0NTQ0N2VlNjBlNDU3MmM2OWY0ZmVkYWNlZmI5OGEwN2M4NA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWUzZmEyNGNmYjIzNGYyNzA3M2VlM2ZlZWY4NWZhMGE2ZjM2ZjZiYWMwNDFh
|
10
|
+
MzZlMzMxMzZkYmUyZjA1ZTVkNzg5ZmNjOWNiYWJhMjQwNjE2ZWM3ZjdkM2Ew
|
11
|
+
NmM4ZDQzNDMzZWQ0Y2ZmODA5YTk0YzY1YTE0OWVjYWUyNDcwOTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjgxM2JjZGZlYjhlOGQzOGZhYTc1NTc0MWQzOTViNDg4OTFkOGM5YzRlZGYy
|
14
|
+
OGNmMmVlY2Q2NTExZWYxOTA0MmQxOTUwM2FiM2JjNzc1NDg4YWJhNjkwZmJk
|
15
|
+
NTAxYzM3OWU1ZGY4MWVjNmRlNzkyZDI3NWVkMDg4NmY2YjcxOWU=
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
1.0.0 - 2013-12-27
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Changed API to make a `Redic::Pool` object interchangeable with `Redic`. This
|
5
|
+
makes `Redic::Pool` compatible with Ohm out of the box, so you can do:
|
6
|
+
|
7
|
+
Ohm.redis = Redic::Pool.new(ENV["REDIS_URL"], size: 10)
|
8
|
+
|
1
9
|
0.1.0 - 2013-12-18
|
2
10
|
==================
|
3
11
|
|
data/README.md
CHANGED
data/lib/redic/pool.rb
CHANGED
@@ -2,12 +2,16 @@ require "connection_pool"
|
|
2
2
|
require "redic"
|
3
3
|
|
4
4
|
class Redic::Pool
|
5
|
-
VERSION = "
|
5
|
+
VERSION = "1.0.0"
|
6
6
|
|
7
|
+
attr :url
|
7
8
|
attr :pool
|
8
9
|
|
9
10
|
def initialize(url, options = {})
|
11
|
+
@url = url
|
10
12
|
@pool = ConnectionPool.new(size: options.fetch(:size, 10)) { Redic.new(url) }
|
13
|
+
|
14
|
+
@id = "redic-pool-#{object_id}"
|
11
15
|
end
|
12
16
|
|
13
17
|
def call(*args)
|
@@ -16,7 +20,18 @@ class Redic::Pool
|
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
|
-
def
|
20
|
-
@
|
23
|
+
def queue(*args)
|
24
|
+
Thread.current[@id] || (Thread.current[@id] = [])
|
25
|
+
Thread.current[@id] << args
|
26
|
+
end
|
27
|
+
|
28
|
+
def commit
|
29
|
+
@pool.with do |client|
|
30
|
+
Thread.current[@id].each do |args|
|
31
|
+
client.queue(*args)
|
32
|
+
end
|
33
|
+
|
34
|
+
client.commit
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
data/test/ohm_test.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative "prelude"
|
2
|
+
|
3
|
+
require "ohm"
|
4
|
+
|
5
|
+
class Post < Ohm::Model
|
6
|
+
attribute :title
|
7
|
+
end
|
8
|
+
|
9
|
+
setup do
|
10
|
+
Ohm.redis = Redic::Pool.new("redis://localhost:9999")
|
11
|
+
end
|
12
|
+
|
13
|
+
test "Pool - basic" do
|
14
|
+
threads = Array.new(10) do |i|
|
15
|
+
Thread.new(i) do |i|
|
16
|
+
10.times do |j|
|
17
|
+
Post.create(title: "Foo #{i} #{j}").id
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
threads.each(&:join)
|
23
|
+
|
24
|
+
clients = Parsers.info(Ohm.redis.call("INFO", "clients")).fetch("connected_clients")
|
25
|
+
|
26
|
+
assert_equal(clients, "10")
|
27
|
+
|
28
|
+
teardown(Ohm.redis)
|
29
|
+
|
30
|
+
Ohm.redis = Redic::Pool.new("redis://localhost:9999")
|
31
|
+
|
32
|
+
threads = Array.new(10) do |i|
|
33
|
+
Thread.new(i) do |i|
|
34
|
+
10.times do |j|
|
35
|
+
Post.all.to_a
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
threads.each(&:join)
|
41
|
+
|
42
|
+
clients = Parsers.info(Ohm.redis.call("INFO", "clients")).fetch("connected_clients")
|
43
|
+
|
44
|
+
assert_equal(clients, "10")
|
45
|
+
end
|
data/test/pool_test.rb
CHANGED
@@ -1,30 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
$VERBOSE = 1
|
4
|
-
|
5
|
-
module Parsers
|
6
|
-
def self.info(reply)
|
7
|
-
Hash[reply.lines.grep(/^[^#]/).map { |line| line.chomp.split(":", 2) }]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
require_relative "../lib/redic/pool"
|
12
|
-
|
13
|
-
at_exit do
|
14
|
-
if $redis
|
15
|
-
Process.kill(:TERM, $redis)
|
16
|
-
end
|
17
|
-
|
18
|
-
Process.waitpid
|
19
|
-
end
|
20
|
-
|
21
|
-
$redis = spawn("redis-server --dir /tmp --dbfilename '' --port 9999 --logfile /dev/null")
|
22
|
-
|
23
|
-
sleep(0.5)
|
24
|
-
|
25
|
-
def teardown(r)
|
26
|
-
r.pool.shutdown { |c| c.call("QUIT") }
|
27
|
-
end
|
1
|
+
require_relative "prelude"
|
28
2
|
|
29
3
|
setup do
|
30
4
|
Redic::Pool.new("redis://localhost:9999", size: 10)
|
@@ -51,15 +25,13 @@ end
|
|
51
25
|
test "MULTI return value with WATCH" do |r|
|
52
26
|
r.call("DEL", "foo")
|
53
27
|
|
54
|
-
r.
|
55
|
-
c.call("WATCH", "foo", "bar")
|
28
|
+
r.call("WATCH", "foo", "bar")
|
56
29
|
|
57
|
-
|
58
|
-
|
59
|
-
|
30
|
+
r.queue("MULTI")
|
31
|
+
r.queue("SET", "foo", "bar")
|
32
|
+
r.queue("EXEC")
|
60
33
|
|
61
|
-
|
62
|
-
end
|
34
|
+
assert_equal(r.commit.last, ["OK"])
|
63
35
|
|
64
36
|
assert_equal(r.call("GET", "foo"), "bar")
|
65
37
|
|
@@ -69,47 +41,20 @@ end
|
|
69
41
|
test "Pipelining" do |r|
|
70
42
|
r.call("DEL", "foo")
|
71
43
|
|
72
|
-
|
73
|
-
r.with do |c|
|
74
|
-
c.queue("SET", "foo", "bar")
|
75
|
-
throw(:out)
|
76
|
-
end
|
77
|
-
end
|
44
|
+
r.queue("SET", "foo", "bar")
|
78
45
|
|
79
46
|
assert_equal nil, r.call("GET", "foo")
|
80
47
|
|
81
48
|
teardown(r)
|
82
49
|
end
|
83
50
|
|
84
|
-
test "Pipelining with nesting" do |r|
|
85
|
-
r.call("DEL", "foo")
|
86
|
-
|
87
|
-
r.with do |c1|
|
88
|
-
c1.queue("DEL", "foo")
|
89
|
-
|
90
|
-
r.with do |c2|
|
91
|
-
c2.queue("SET", "foo", "bar")
|
92
|
-
end
|
93
|
-
|
94
|
-
c1.commit
|
95
|
-
end
|
96
|
-
|
97
|
-
assert_equal "bar", r.call("GET", "foo")
|
98
|
-
|
99
|
-
teardown(r)
|
100
|
-
end
|
101
|
-
|
102
51
|
test "Pipelining contention" do |r|
|
103
52
|
threads = Array.new(100) do
|
104
53
|
Thread.new do
|
105
54
|
10.times do
|
106
|
-
r.
|
107
|
-
c.call("SET", "foo", "bar")
|
55
|
+
r.call("SET", "foo", "bar")
|
108
56
|
|
109
|
-
|
110
|
-
c.call("DEL", "foo")
|
111
|
-
end
|
112
|
-
end
|
57
|
+
r.call("DEL", "foo")
|
113
58
|
end
|
114
59
|
end
|
115
60
|
end
|
@@ -117,11 +62,9 @@ test "Pipelining contention" do |r|
|
|
117
62
|
threads += Array.new(100) do
|
118
63
|
Thread.new do
|
119
64
|
10.times do
|
120
|
-
r.
|
121
|
-
|
122
|
-
|
123
|
-
c.commit
|
124
|
-
end
|
65
|
+
r.queue("SET", "foo", "bar")
|
66
|
+
r.queue("DEL", "foo")
|
67
|
+
r.commit
|
125
68
|
end
|
126
69
|
end
|
127
70
|
end
|
@@ -135,3 +78,7 @@ test "Pipelining contention" do |r|
|
|
135
78
|
|
136
79
|
teardown(r)
|
137
80
|
end
|
81
|
+
|
82
|
+
test "URL" do |r|
|
83
|
+
assert_equal("redis://localhost:9999", r.url)
|
84
|
+
end
|
data/test/prelude.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "cutest"
|
2
|
+
|
3
|
+
$VERBOSE = 1
|
4
|
+
|
5
|
+
module Parsers
|
6
|
+
def self.info(reply)
|
7
|
+
Hash[reply.lines.grep(/^[^#]/).map { |line| line.chomp.split(":", 2) }]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require_relative "../lib/redic/pool"
|
12
|
+
|
13
|
+
at_exit do
|
14
|
+
if $redis
|
15
|
+
Process.kill(:TERM, $redis)
|
16
|
+
end
|
17
|
+
|
18
|
+
Process.waitpid
|
19
|
+
end
|
20
|
+
|
21
|
+
$redis = spawn("redis-server --dir /tmp --dbfilename '' --port 9999 --logfile /dev/null")
|
22
|
+
|
23
|
+
sleep(0.5)
|
24
|
+
|
25
|
+
def teardown(r)
|
26
|
+
r.pool.shutdown { |c| c.call("QUIT") }
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redic-pool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damian Janowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: connection_pool
|
@@ -66,7 +66,9 @@ files:
|
|
66
66
|
- lib/redic/pool.rb
|
67
67
|
- rakefile
|
68
68
|
- redic-pool.gemspec
|
69
|
+
- test/ohm_test.rb
|
69
70
|
- test/pool_test.rb
|
71
|
+
- test/prelude.rb
|
70
72
|
homepage: https://github.com/djanowski/redic-pool
|
71
73
|
licenses:
|
72
74
|
- Unlicense
|
@@ -92,4 +94,6 @@ signing_key:
|
|
92
94
|
specification_version: 4
|
93
95
|
summary: A Redis connection pool using Redic.
|
94
96
|
test_files:
|
97
|
+
- test/ohm_test.rb
|
95
98
|
- test/pool_test.rb
|
99
|
+
- test/prelude.rb
|