Class: Stillwater::ConnectionPool
- Inherits:
-
Object
- Object
- Stillwater::ConnectionPool
- Defined in:
- lib/stillwater/connection_pool.rb
Instance Attribute Summary collapse
-
#reactivate_timeout ⇒ Object
Returns the value of attribute reactivate_timeout.
-
#retry_count ⇒ Object
Returns the value of attribute retry_count.
Instance Method Summary collapse
- #add(&builder) ⇒ Object
- #available_count ⇒ Object
- #checkin(conn) ⇒ Object
- #checkout ⇒ Object
- #deactivate(conn) ⇒ Object
- #in_use_count ⇒ Object
- #inactive_count ⇒ Object
-
#initialize ⇒ ConnectionPool
constructor
A new instance of ConnectionPool.
- #reactivate_all ⇒ Object
- #retry_connection_from(exception_class, &block) ⇒ Object
- #with_connection(&block) ⇒ Object
Constructor Details
#initialize ⇒ ConnectionPool
Returns a new instance of ConnectionPool.
7 8 9 10 11 12 |
# File 'lib/stillwater/connection_pool.rb', line 7 def initialize @pool = [] @reactivate_timeout = 5 * 60 # 5 minutes @retry_count = 3 @polling = false end |
Instance Attribute Details
#reactivate_timeout ⇒ Object
Returns the value of attribute reactivate_timeout.
5 6 7 |
# File 'lib/stillwater/connection_pool.rb', line 5 def reactivate_timeout @reactivate_timeout end |
#retry_count ⇒ Object
Returns the value of attribute retry_count.
5 6 7 |
# File 'lib/stillwater/connection_pool.rb', line 5 def retry_count @retry_count end |
Instance Method Details
#add(&builder) ⇒ Object
14 15 16 |
# File 'lib/stillwater/connection_pool.rb', line 14 def add(&builder) @pool << connection_info_from(builder) end |
#available_count ⇒ Object
80 81 82 |
# File 'lib/stillwater/connection_pool.rb', line 80 def available_count available.size end |
#checkin(conn) ⇒ Object
55 56 57 58 59 60 |
# File 'lib/stillwater/connection_pool.rb', line 55 def checkin(conn) connection_info = in_use.detect { |info| info[:connection] == conn } connection_info[:state] = :available unless connection_info.nil? true end |
#checkout ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/stillwater/connection_pool.rb', line 46 def checkout reactivate_all if poll_timeout_exceeded? connection_info = available.respond_to?(:sample) ? available.sample : available.choice raise ConnectionNotAvailable if connection_info.nil? connection_info[:state] = :in_use connection_info[:connection] end |
#deactivate(conn) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/stillwater/connection_pool.rb', line 62 def deactivate(conn) connection_info = @pool.detect { |info| info[:connection] == conn } connection_info[:connection] = nil connection_info[:state] = :inactive start_polling true end |
#in_use_count ⇒ Object
88 89 90 |
# File 'lib/stillwater/connection_pool.rb', line 88 def in_use_count in_use.size end |
#inactive_count ⇒ Object
84 85 86 |
# File 'lib/stillwater/connection_pool.rb', line 84 def inactive_count inactive.size end |
#reactivate_all ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/stillwater/connection_pool.rb', line 71 def reactivate_all inactive.each do |info| info[:connection] = info[:builder].call info[:state] = :available end true end |
#retry_connection_from(exception_class, &block) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/stillwater/connection_pool.rb', line 31 def retry_connection_from(exception_class, &block) count = 0 begin conn = checkout yield conn rescue exception_class raise if count >= @retry_count deactivate conn count += 1 retry ensure checkin conn end end |
#with_connection(&block) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/stillwater/connection_pool.rb', line 23 def with_connection(&block) conn = checkout result = yield conn checkin conn result end |