resource_pool 0.1.3 → 0.2.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.
- data/VERSION +1 -1
- data/lib/resource_pool.rb +13 -9
- data/resource_pool.gemspec +1 -1
- data/spec/resource_pool_spec.rb +16 -6
- metadata +10 -10
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/resource_pool.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
class ResourcePool
|
2
2
|
class ResourcePoolError < RuntimeError; end
|
3
3
|
class ResourceNotAvailable < ResourcePoolError; end
|
4
|
-
class BadResource < ResourcePoolError; end
|
5
4
|
class InvalidCreateProc < ResourcePoolError; end
|
6
5
|
|
7
6
|
attr_reader :max_size, :pool, :allocated
|
@@ -33,8 +32,8 @@ class ResourcePool
|
|
33
32
|
t = Thread.current
|
34
33
|
if res = owned_resource(t)
|
35
34
|
return yield(res)
|
36
|
-
|
37
35
|
end
|
36
|
+
|
38
37
|
begin
|
39
38
|
unless res = acquire(t)
|
40
39
|
raise ResourceNotAvailable if @timeout == 0
|
@@ -48,17 +47,22 @@ class ResourcePool
|
|
48
47
|
end
|
49
48
|
end
|
50
49
|
yield res
|
51
|
-
rescue BadResource
|
52
|
-
old_res = res
|
53
|
-
res = nil
|
54
|
-
@delete_proc.call(old_res) if @delete_proc && old_res
|
55
|
-
@allocated.delete(t)
|
56
|
-
raise
|
57
50
|
ensure
|
58
|
-
sync{release(t)} if
|
51
|
+
sync{release(t)} if owned_resource(t)
|
59
52
|
end
|
60
53
|
end
|
61
54
|
|
55
|
+
# please only call this inside hold block
|
56
|
+
def trash_current!
|
57
|
+
t = Thread.current
|
58
|
+
conn = owned_resource(t)
|
59
|
+
return unless conn
|
60
|
+
|
61
|
+
@delete_proc.call conn if @delete_proc
|
62
|
+
sync { @allocated.delete(t) }
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
62
66
|
private
|
63
67
|
|
64
68
|
def owned_resource(thread)
|
data/resource_pool.gemspec
CHANGED
data/spec/resource_pool_spec.rb
CHANGED
@@ -244,9 +244,14 @@ describe "ResourcePool" do
|
|
244
244
|
end
|
245
245
|
|
246
246
|
it "should aquire and release resource" do
|
247
|
+
@pool.should_receive(:owned_resource).
|
248
|
+
with(Thread.current).
|
249
|
+
and_return(nil, @res)
|
250
|
+
|
247
251
|
@pool.should_receive(:acquire).
|
248
252
|
with(Thread.current).
|
249
253
|
and_return(@res)
|
254
|
+
|
250
255
|
@pool.should_receive(:release).
|
251
256
|
with(Thread.current)
|
252
257
|
|
@@ -286,19 +291,26 @@ describe "ResourcePool" do
|
|
286
291
|
end
|
287
292
|
|
288
293
|
it "should delete bad resource" do
|
294
|
+
@pool.should_receive(:owned_resource).
|
295
|
+
with(Thread.current).
|
296
|
+
and_return(nil, @res, nil)
|
297
|
+
|
289
298
|
@pool.should_receive(:acquire).
|
290
299
|
and_return(@res)
|
291
300
|
@pool.should_not_receive(:release)
|
292
301
|
@pool.allocated.should_receive(:delete).
|
293
302
|
with(Thread.current)
|
294
303
|
|
295
|
-
|
296
|
-
@pool.hold{ |res| raise ResourcePool::BadResource }
|
297
|
-
}.should raise_error(ResourcePool::BadResource)
|
304
|
+
@pool.hold{ |res| @pool.trash_current! }
|
298
305
|
end
|
299
306
|
|
300
307
|
it "should call delete_proc if avaiable" do
|
301
308
|
delete_proc_called = false
|
309
|
+
|
310
|
+
@pool.should_receive(:owned_resource).
|
311
|
+
with(Thread.current).
|
312
|
+
and_return(nil, @res, nil)
|
313
|
+
|
302
314
|
@pool.should_receive(:acquire).
|
303
315
|
and_return(@res)
|
304
316
|
@pool.should_not_receive(:release)
|
@@ -310,9 +322,7 @@ describe "ResourcePool" do
|
|
310
322
|
delete_proc_called = true
|
311
323
|
})
|
312
324
|
|
313
|
-
|
314
|
-
@pool.hold{ |res| raise ResourcePool::BadResource }
|
315
|
-
}.should raise_error(ResourcePool::BadResource)
|
325
|
+
@pool.hold{ |res| @pool.trash_current! }
|
316
326
|
|
317
327
|
delete_proc_called.should be_true
|
318
328
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resource_pool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-01-11 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &12906080 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.3.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *12906080
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &12897540 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *12897540
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jeweler
|
38
|
-
requirement: &
|
38
|
+
requirement: &12896880 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.6.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *12896880
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rcov
|
49
|
-
requirement: &
|
49
|
+
requirement: &12895920 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *12895920
|
58
58
|
description: A gem for generic connection pooling / resource pooling. The code is
|
59
59
|
mostly taken from Sequel gem's ThreadedConnectionPool class, and adapted for more
|
60
60
|
general use.
|
@@ -91,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
91
|
version: '0'
|
92
92
|
segments:
|
93
93
|
- 0
|
94
|
-
hash: -
|
94
|
+
hash: -3324076291152974813
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|