class Async::Sequel::ConnectionPool::Fibered
Attributes
resources[R]
Public Class Methods
new(database, limit: nil, **options)
click to toggle source
Calls superclass method
# File lib/async/sequel/connection_pool/fibered.rb, line 31 def initialize(database, limit: nil, **options) super(database, **options) @database = database @options = options @resources = [] @available = Async::Notification.new @limit = limit @active = 0 end
Public Instance Methods
acquire() { |resource| ... }
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 70 def acquire resource = wait_for_resource return resource unless block_given? begin yield resource ensure release(resource) end end
close()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 92 def close @resources.each(&:close) @resources.clear @active = 0 end
disconnect(server = nil)
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 50 def disconnect(server = nil) self.close end
empty?()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 66 def empty? @resources.empty? end
hold(server = nil, &block)
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 46 def hold(server = nil, &block) acquire(&block) end
max_size()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 62 def max_size @limit end
release(resource)
click to toggle source
Make the resource resources and let waiting tasks know that there is something resources.
# File lib/async/sequel/connection_pool/fibered.rb, line 83 def release(resource) # A resource that is not good should also not be reusable. # unless resource.closed? reuse(resource) # else # retire(resource) # end end
servers()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 54 def servers [:default] end
size()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 58 def size @active end
to_s()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 99 def to_s "\#<#{self.class} resources=#{resources.size} limit=#{@limit}>" end
Protected Instance Methods
available_resource()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 134 def available_resource while resource = @resources.pop # if resource.connected? return resource # else # retire(resource) # end end if @limit.nil? or @active < @limit Async.logger.debug(self) {"No resources resources, allocating new one..."} @active += 1 return make_new(:default) end return nil end
retire(resource)
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 113 def retire(resource) Async.logger.debug(self) {"Retire #{resource}"} @active -= 1 resource.close @available.signal end
reuse(resource)
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 105 def reuse(resource) Async.logger.debug(self) {"Reuse #{resource}"} @resources << resource @available.signal end
wait_for_resource()
click to toggle source
# File lib/async/sequel/connection_pool/fibered.rb, line 123 def wait_for_resource # If we fail to create a resource (below), we will end up waiting for one to become resources. until resource = available_resource @available.wait end Async.logger.debug(self) {"Wait for resource #{resource}"} return resource end