pools 0.1.3 → 0.1.4
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/lib/pools/connection_pool.rb +18 -19
- metadata +29 -57
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
require 'thread'
|
|
6
6
|
require 'monitor'
|
|
7
7
|
require 'set'
|
|
8
|
-
require 'active_support/core_ext/module/synchronization'
|
|
9
8
|
|
|
10
9
|
module Pools
|
|
11
10
|
# Raised when a connection could not be obtained within the connection
|
|
@@ -60,6 +59,7 @@ module Pools
|
|
|
60
59
|
# * +wait_timeout+: number of seconds to block and wait for a connection
|
|
61
60
|
# before giving up and raising a timeout error (default 5 seconds).
|
|
62
61
|
class ConnectionPool
|
|
62
|
+
include MonitorMixin
|
|
63
63
|
attr_reader :options, :connections
|
|
64
64
|
|
|
65
65
|
# Creates a new ConnectionPool object. +spec+ is a ConnectionSpecification
|
|
@@ -69,6 +69,7 @@ module Pools
|
|
|
69
69
|
#
|
|
70
70
|
# The default ConnectionPool maximum size is 5.
|
|
71
71
|
def initialize(pooled, options)
|
|
72
|
+
super()
|
|
72
73
|
@pooled = pooled
|
|
73
74
|
@options = options
|
|
74
75
|
|
|
@@ -76,8 +77,7 @@ module Pools
|
|
|
76
77
|
@reserved_connections = {}
|
|
77
78
|
|
|
78
79
|
# The mutex used to synchronize pool access
|
|
79
|
-
@
|
|
80
|
-
@queue = @connection_mutex.new_cond
|
|
80
|
+
@queue = self.new_cond
|
|
81
81
|
|
|
82
82
|
# default 5 second timeout unless on ruby 1.9
|
|
83
83
|
@timeout = options[:wait_timeout] || 5
|
|
@@ -119,27 +119,29 @@ module Pools
|
|
|
119
119
|
|
|
120
120
|
# Returns true if a connection has already been opened.
|
|
121
121
|
def connected?
|
|
122
|
-
!@connections.empty?
|
|
122
|
+
synchronize { !@connections.empty? }
|
|
123
123
|
end
|
|
124
124
|
|
|
125
125
|
# Disconnects all connections in the pool, and clears the pool.
|
|
126
126
|
def disconnect!
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
synchronize do
|
|
128
|
+
@reserved_connections = {}
|
|
129
|
+
@connections.each do |conn|
|
|
130
|
+
checkin conn
|
|
131
|
+
@pooled.__disconnect(conn)
|
|
132
|
+
end
|
|
133
|
+
@connections = []
|
|
133
134
|
end
|
|
134
|
-
@connections = []
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
# Verify active connections and remove and disconnect connections
|
|
138
138
|
# associated with stale threads.
|
|
139
139
|
def verify_active_connections! #:nodoc:
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
@
|
|
140
|
+
synchronize do
|
|
141
|
+
clear_stale_cached_connections!
|
|
142
|
+
@connections.each do |connection|
|
|
143
|
+
@pooled.__disconnect(connection)
|
|
144
|
+
end
|
|
143
145
|
end
|
|
144
146
|
end
|
|
145
147
|
|
|
@@ -173,7 +175,7 @@ module Pools
|
|
|
173
175
|
# within the timeout period.
|
|
174
176
|
def checkout
|
|
175
177
|
# Checkout an available connection
|
|
176
|
-
|
|
178
|
+
synchronize do
|
|
177
179
|
loop do
|
|
178
180
|
conn = if @checked_out.size < @connections.size
|
|
179
181
|
checkout_existing_connection
|
|
@@ -203,15 +205,12 @@ module Pools
|
|
|
203
205
|
# +conn+: an AbstractAdapter object, which was obtained by earlier by
|
|
204
206
|
# calling +checkout+ on this pool.
|
|
205
207
|
def checkin(conn)
|
|
206
|
-
|
|
208
|
+
synchronize do
|
|
207
209
|
@checked_out.delete conn
|
|
208
210
|
@queue.signal
|
|
209
211
|
end
|
|
210
212
|
end
|
|
211
213
|
|
|
212
|
-
synchronize :verify_active_connections!, :connected?, :disconnect!,
|
|
213
|
-
:with => :@connection_mutex
|
|
214
|
-
|
|
215
214
|
private
|
|
216
215
|
def current_connection_id #:nodoc:
|
|
217
216
|
Thread.current.object_id
|
metadata
CHANGED
|
@@ -1,56 +1,38 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pools
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
prerelease:
|
|
6
|
-
segments:
|
|
7
|
-
- 0
|
|
8
|
-
- 1
|
|
9
|
-
- 3
|
|
10
|
-
version: 0.1.3
|
|
11
6
|
platform: ruby
|
|
12
|
-
authors:
|
|
7
|
+
authors:
|
|
13
8
|
- Michael Rykov
|
|
14
9
|
autorequire:
|
|
15
10
|
bindir: bin
|
|
16
11
|
cert_chain: []
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- !ruby/object:Gem::Dependency
|
|
12
|
+
date: 2012-02-20 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
21
15
|
name: activesupport
|
|
22
|
-
|
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
16
|
+
requirement: &70307295130540 !ruby/object:Gem::Requirement
|
|
24
17
|
none: false
|
|
25
|
-
requirements:
|
|
26
|
-
- -
|
|
27
|
-
- !ruby/object:Gem::Version
|
|
28
|
-
hash: 7
|
|
29
|
-
segments:
|
|
30
|
-
- 3
|
|
31
|
-
- 0
|
|
32
|
-
- 0
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
33
21
|
version: 3.0.0
|
|
34
22
|
- - <
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
|
|
37
|
-
segments:
|
|
38
|
-
- 3
|
|
39
|
-
- 2
|
|
40
|
-
version: "3.2"
|
|
23
|
+
- !ruby/object:Gem::Version
|
|
24
|
+
version: '4.0'
|
|
41
25
|
type: :runtime
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
26
|
+
prerelease: false
|
|
27
|
+
version_requirements: *70307295130540
|
|
28
|
+
description: ! 'Generalized connection pooling
|
|
45
29
|
|
|
30
|
+
'
|
|
46
31
|
email: mrykov@gmail
|
|
47
32
|
executables: []
|
|
48
|
-
|
|
49
33
|
extensions: []
|
|
50
|
-
|
|
51
34
|
extra_rdoc_files: []
|
|
52
|
-
|
|
53
|
-
files:
|
|
35
|
+
files:
|
|
54
36
|
- README.md
|
|
55
37
|
- Rakefile
|
|
56
38
|
- LICENSE
|
|
@@ -65,36 +47,26 @@ files:
|
|
|
65
47
|
- lib/redis/pooled_store.rb
|
|
66
48
|
homepage: http://github.com/rykov/pools
|
|
67
49
|
licenses: []
|
|
68
|
-
|
|
69
50
|
post_install_message:
|
|
70
51
|
rdoc_options: []
|
|
71
|
-
|
|
72
|
-
require_paths:
|
|
52
|
+
require_paths:
|
|
73
53
|
- lib
|
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
55
|
none: false
|
|
76
|
-
requirements:
|
|
77
|
-
- -
|
|
78
|
-
- !ruby/object:Gem::Version
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- 0
|
|
82
|
-
version: "0"
|
|
83
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ! '>='
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '0'
|
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
61
|
none: false
|
|
85
|
-
requirements:
|
|
86
|
-
- -
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
|
|
89
|
-
segments:
|
|
90
|
-
- 0
|
|
91
|
-
version: "0"
|
|
62
|
+
requirements:
|
|
63
|
+
- - ! '>='
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '0'
|
|
92
66
|
requirements: []
|
|
93
|
-
|
|
94
67
|
rubyforge_project:
|
|
95
68
|
rubygems_version: 1.8.11
|
|
96
69
|
signing_key:
|
|
97
70
|
specification_version: 3
|
|
98
71
|
summary: Generalized connection pooling
|
|
99
72
|
test_files: []
|
|
100
|
-
|