connection_pool 0.9.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
data/Changes.md
CHANGED
data/lib/connection_pool.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require_relative 'connection_pool/version'
|
2
|
-
require_relative 'timed_queue'
|
3
2
|
|
4
3
|
# Generic connection pool class for e.g. sharing a limited number of network connections
|
5
4
|
# among many threads. Note: Connections are eager created.
|
@@ -39,7 +38,7 @@ class ConnectionPool
|
|
39
38
|
@size = options.fetch(:size)
|
40
39
|
@timeout = options.fetch(:timeout)
|
41
40
|
|
42
|
-
@available =
|
41
|
+
@available = TimedStack.new(@size, &block)
|
43
42
|
@key = :"current-#{@available.object_id}"
|
44
43
|
end
|
45
44
|
|
@@ -52,16 +51,11 @@ class ConnectionPool
|
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
55
|
-
def with_connection(&block)
|
56
|
-
warn("ConnectionPool#with_connection is deprecated and will be removed in version 1.0. Upgrade your code to use ConnectionPool#with instead. (in #{caller[0]})")
|
57
|
-
with(&block)
|
58
|
-
end
|
59
|
-
|
60
54
|
def checkout
|
61
55
|
stack = ::Thread.current[@key] ||= []
|
62
56
|
|
63
57
|
if stack.empty?
|
64
|
-
conn = @available.
|
58
|
+
conn = @available.pop(@timeout)
|
65
59
|
else
|
66
60
|
conn = stack.last
|
67
61
|
end
|
@@ -92,11 +86,6 @@ class ConnectionPool
|
|
92
86
|
@pool.checkin
|
93
87
|
end
|
94
88
|
|
95
|
-
def with_connection(&block)
|
96
|
-
warn("ConnectionPool::Wrapper#with_connection is deprecated and will be removed in version 1.0. Upgrade your code to use ConnectionPool::Wrapper#with instead. (in #{caller[0]})")
|
97
|
-
with(&block)
|
98
|
-
end
|
99
|
-
|
100
89
|
def respond_to?(id, *args)
|
101
90
|
METHODS.include?(id) || @pool.with { |c| c.respond_to?(id, *args) }
|
102
91
|
end
|
@@ -108,3 +97,5 @@ class ConnectionPool
|
|
108
97
|
end
|
109
98
|
end
|
110
99
|
end
|
100
|
+
|
101
|
+
require_relative 'connection_pool/timed_stack'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'thread'
|
2
2
|
require 'timeout'
|
3
3
|
|
4
|
-
class
|
4
|
+
class ConnectionPool::TimedStack
|
5
5
|
def initialize(size = 0)
|
6
6
|
@que = Array.new(size) { yield }
|
7
7
|
@mutex = Mutex.new
|
@@ -16,7 +16,7 @@ class TimedQueue
|
|
16
16
|
end
|
17
17
|
alias_method :<<, :push
|
18
18
|
|
19
|
-
def
|
19
|
+
def pop(timeout=0.5)
|
20
20
|
deadline = Time.now + timeout
|
21
21
|
@mutex.synchronize do
|
22
22
|
loop do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: connection_pool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -26,8 +26,8 @@ files:
|
|
26
26
|
- Rakefile
|
27
27
|
- connection_pool.gemspec
|
28
28
|
- lib/connection_pool.rb
|
29
|
+
- lib/connection_pool/timed_stack.rb
|
29
30
|
- lib/connection_pool/version.rb
|
30
|
-
- lib/timed_queue.rb
|
31
31
|
- test/helper.rb
|
32
32
|
- test/test_connection_pool.rb
|
33
33
|
homepage: https://github.com/mperham/connection_pool
|