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