Sha256: e82a215bc81d603ff5a28dadc7f1dca174220255b014c2a856167792047aaa65

Contents?: true

Size: 1.36 KB

Versions: 7

Compression:

Stored size: 1.36 KB

Contents

class Net::HTTP::Persistent::TimedStackMulti < ConnectionPool::TimedStack # :nodoc:

  def initialize(size = 0, &block)
    super

    @enqueued = 0
    @ques = Hash.new { |h, k| h[k] = [] }
    @lru = {}
    @key = :"connection_args-#{object_id}"
  end

  def empty?
    (@created - @enqueued) >= @max
  end

  def length
    @max - @created + @enqueued
  end

  private

  def connection_stored? options = {} # :nodoc:
    !@ques[options[:connection_args]].empty?
  end

  def fetch_connection options = {} # :nodoc:
    connection_args = options[:connection_args]

    @enqueued -= 1
    lru_update connection_args
    @ques[connection_args].pop
  end

  def lru_update connection_args # :nodoc:
    @lru.delete connection_args
    @lru[connection_args] = true
  end

  def shutdown_connections # :nodoc:
    @ques.each_key do |key|
      super connection_args: key
    end
  end

  def store_connection obj, options = {} # :nodoc:
    @ques[options[:connection_args]].push obj
    @enqueued += 1
  end

  def try_create options = {} # :nodoc:
    connection_args = options[:connection_args]

    if @created >= @max && @enqueued >= 1
      oldest, = @lru.first
      @lru.delete oldest
      @ques[oldest].pop

      @created -= 1
    end

    if @created < @max
      @created += 1
      lru_update connection_args
      return @create_block.call(connection_args)
    end
  end

end

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
logstash-output-scalyr-0.1.5 vendor/bundle/jruby/2.5.0/gems/net-http-persistent-3.0.1/lib/net/http/persistent/timed_stack_multi.rb
logstash-output-scalyr-0.1.4 vendor/bundle/jruby/2.5.0/gems/net-http-persistent-3.0.1/lib/net/http/persistent/timed_stack_multi.rb
logstash-output-scalyr-0.1.3 vendor/bundle/jruby/2.5.0/gems/net-http-persistent-3.0.1/lib/net/http/persistent/timed_stack_multi.rb
logstash-output-scalyr-0.1.2 vendor/bundle/jruby/2.5.0/gems/net-http-persistent-3.0.1/lib/net/http/persistent/timed_stack_multi.rb
net-http-persistent-retry-3.0.1 lib/net/http/persistent/timed_stack_multi.rb
net-http-persistent-3.0.1 lib/net/http/persistent/timed_stack_multi.rb
net-http-persistent-3.0.0 lib/net/http/persistent/timed_stack_multi.rb