Class: Net::HTTP::Persistent::Pool

Inherits:
ConnectionPool
  • Object
show all
Defined in:
lib/net/http/persistent/pool.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, &block) ⇒ Pool

Returns a new instance of Pool.



6
7
8
9
10
11
# File 'lib/net/http/persistent/pool.rb', line 6

def initialize(options = {}, &block)
  super

  @available = Net::HTTP::Persistent::TimedStackMulti.new(@size, &block)
  @key = :"current-#{@available.object_id}"
end

Instance Attribute Details

#availableObject (readonly)

:nodoc:



3
4
5
# File 'lib/net/http/persistent/pool.rb', line 3

def available
  @available
end

#keyObject (readonly)

:nodoc:



4
5
6
# File 'lib/net/http/persistent/pool.rb', line 4

def key
  @key
end

Instance Method Details

#checkin(net_http_args) ⇒ Object

Raises:

  • (ConnectionPool::Error)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/net/http/persistent/pool.rb', line 13

def checkin net_http_args
  stack = Thread.current[@key][net_http_args]

  raise ConnectionPool::Error, 'no connections are checked out' if
    stack.empty?

  conn = stack.pop

  if stack.empty?
    @available.push conn, connection_args: net_http_args
  end

  nil
end

#checkout(net_http_args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/net/http/persistent/pool.rb', line 28

def checkout net_http_args
  stacks = Thread.current[@key] ||= Hash.new { |h, k| h[k] = [] }
  stack  = stacks[net_http_args]

  if stack.empty? then
    conn = @available.pop connection_args: net_http_args
  else
    conn = stack.last
  end

  stack.push conn

  conn
end