Class: Mongoid::Sessions::SessionPool
- Inherits:
-
Object
- Object
- Mongoid::Sessions::SessionPool
show all
- Includes:
- MonitorMixin
- Defined in:
- lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb
Defined Under Namespace
Classes: ConnectionTimeoutError, Queue, Reaper
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(opts = {}) ⇒ SessionPool
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 95
def initialize(opts={})
super()
opts[:name] ||= :default
@reaper = Reaper.new(opts[:reap_frequency] || 10, self)
@reaper.run
@checkout_timeout = opts[:checkout_timeout] || 5
@size = opts[:size] || 5
@name = opts[:name] || :default
@sessions = []
@reserved_sessions = ThreadSafe::Cache.new(:initial_capacity => @size)
@available = Queue.new self
end
|
Instance Attribute Details
#available ⇒ Object
Returns the value of attribute available.
94
95
96
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 94
def available
@available
end
|
#reaper ⇒ Object
Returns the value of attribute reaper.
94
95
96
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 94
def reaper
@reaper
end
|
#reserved_sessions ⇒ Object
Returns the value of attribute reserved_sessions.
94
95
96
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 94
def reserved_sessions
@reserved_sessions
end
|
#sessions ⇒ Object
Returns the value of attribute sessions.
94
95
96
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 94
def sessions
@sessions
end
|
#size ⇒ Object
Returns the value of attribute size.
94
95
96
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 94
def size
@size
end
|
Instance Method Details
#checkin(session) ⇒ Object
Returns a session back to the available pool
122
123
124
125
126
127
128
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 122
def checkin(session)
synchronize do
@available.add session
release(session)
end
true
end
|
#checkin_from_thread(thread) ⇒ Object
156
157
158
159
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 156
def checkin_from_thread(thread)
checkin @reserved_sessions[thread]
true
end
|
#checkout ⇒ Object
111
112
113
114
115
116
117
118
119
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 111
def checkout
unless (session = session_for_thread(Thread.current))
synchronize do
session = get_session
reserve(session)
end
end
session
end
|
#clear(thread = nil) ⇒ Object
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 130
def clear(thread=nil)
if thread
disconnect(thread)
@reserved_sessions.delete(thread) if session_for(thread)
@sessions.pop
else
@reserved_sessions = {}
@sessions = []
@available = Queue.new self
end
@reserved_sessions
end
|
#count ⇒ Object
161
162
163
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 161
def count
@available.count
end
|
#disconnect(thread = Thread.current) ⇒ Object
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 143
def disconnect(thread=Thread.current)
synchronize do
@session_pool.try(:each) do |name, pool|
if thread
pool.session_for(thread).try(:disconnect)
else
pool.sessions.try(:each) { |session| session.disconnect }
end
end
end
true
end
|
#reap ⇒ Object
165
166
167
168
169
170
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 165
def reap
@reserved_sessions.keys.each do |thread|
session = @reserved_sessions[thread]
checkin(session) if thread.stop?
end
end
|
#session_for(thread) ⇒ Object
176
177
178
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 176
def session_for(thread)
@reserved_sessions[thread]
end
|
#session_for_thread(thread) ⇒ Object
172
173
174
|
# File 'lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb', line 172
def session_for_thread(thread)
@reserved_sessions[thread]
end
|