mirror of
https://github.com/iv-org/invidious.git
synced 2025-04-25 08:06:28 +00:00
Pool: remove redundant properties
This commit is contained in:
parent
734c84c3f5
commit
4c44601b17
@ -164,7 +164,7 @@ class Config
|
||||
property idle_pool_size : Int32? = nil
|
||||
|
||||
# Amount of seconds to wait for a client to be free from the pool before rasing an error
|
||||
property pool_checkout_timeout : Int32 = 5
|
||||
property pool_checkout_timeout : Float64 = 5
|
||||
|
||||
# HTTP Proxy configuration
|
||||
property http_proxy : HTTPProxyConfig? = nil
|
||||
|
@ -3,31 +3,26 @@ module Invidious::ConnectionPool
|
||||
#
|
||||
# Uses `DB::Pool` for the pooling logic
|
||||
abstract struct BaseConnectionPool(PoolClient)
|
||||
# Returns the max size of the connection pool
|
||||
getter max_capacity : Int32
|
||||
|
||||
# Returns the configured checkout time out
|
||||
getter timeout : Float64
|
||||
|
||||
# Creates a connection pool with the provided options
|
||||
# Creates a connection pool with the provided options, and client factory block.
|
||||
def initialize(
|
||||
@max_capacity : Int32 = 5,
|
||||
@idle_capacity : Int32? = nil,
|
||||
@timeout : Float64 = 5.0,
|
||||
*,
|
||||
max_capacity : Int32 = 5,
|
||||
idle_capacity : Int32? = nil,
|
||||
timeout : Float64 = 5.0,
|
||||
&client_factory : -> PoolClient
|
||||
)
|
||||
@pool = build_pool()
|
||||
end
|
||||
|
||||
# Returns the idle capacity for the connection pool; if unset this is the same as `max_capacity`.
|
||||
#
|
||||
# This means that when idle capacity is unset the pool will keep all connections around forever, all the
|
||||
# way until it reaches max capacity.
|
||||
def idle_capacity : Int32
|
||||
if (idle = @idle_capacity).nil?
|
||||
return @max_capacity
|
||||
if idle_capacity.nil?
|
||||
idle_capacity = max_capacity
|
||||
end
|
||||
|
||||
return idle
|
||||
pool_options = DB::Pool::Options.new(
|
||||
initial_pool_size: 0,
|
||||
max_pool_size: max_capacity,
|
||||
max_idle_pool_size: idle_capacity,
|
||||
checkout_timeout: timeout
|
||||
)
|
||||
|
||||
@pool = DB::Pool(PoolClient).new(pool_options, &client_factory)
|
||||
end
|
||||
|
||||
# Returns the underlying `DB::Pool` object
|
||||
@ -85,43 +80,22 @@ module Invidious::ConnectionPool
|
||||
ensure
|
||||
pool.release(http_client) if http_client && client_exists_in_pool
|
||||
end
|
||||
|
||||
# Builds a connection pool
|
||||
private abstract def build_pool : DB::Pool(PoolClient)
|
||||
|
||||
# Creates a `DB::Pool::Options` used for constructing `DB::Pool`
|
||||
private def pool_options : DB::Pool::Options
|
||||
return DB::Pool::Options.new(
|
||||
initial_pool_size: 0,
|
||||
max_pool_size: max_capacity,
|
||||
max_idle_pool_size: idle_capacity,
|
||||
checkout_timeout: timeout
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# A basic connection pool where each client within is set to connect to a single resource
|
||||
struct Pool < BaseConnectionPool(HTTP::Client)
|
||||
# The url each client within the pool will connect to
|
||||
getter url : URI
|
||||
getter pool : DB::Pool(HTTP::Client)
|
||||
|
||||
# Creates a pool of clients that connects to the given url, with the provided options.
|
||||
def initialize(
|
||||
url : URI,
|
||||
*,
|
||||
@max_capacity : Int32 = 5,
|
||||
@idle_capacity : Int32? = nil,
|
||||
@timeout : Float64 = 5.0,
|
||||
max_capacity : Int32 = 5,
|
||||
idle_capacity : Int32? = nil,
|
||||
timeout : Float64 = 5.0,
|
||||
)
|
||||
@url = url
|
||||
@pool = build_pool()
|
||||
end
|
||||
|
||||
# :inherit:
|
||||
private def build_pool : DB::Pool(HTTP::Client)
|
||||
return DB::Pool(HTTP::Client).new(pool_options) do
|
||||
make_client(url, force_resolve: true)
|
||||
super(max_capacity: max_capacity, idle_capacity: idle_capacity, timeout: timeout) do
|
||||
next make_client(url, force_resolve: true)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -133,11 +107,16 @@ module Invidious::ConnectionPool
|
||||
struct CompanionPool < BaseConnectionPool(HTTP::Client)
|
||||
getter pool : DB::Pool(HTTP::Client)
|
||||
|
||||
# :inherit:
|
||||
private def build_pool : DB::Pool(HTTP::Client)
|
||||
return DB::Pool(HTTP::Client).new(pool_options) do
|
||||
# Creates a pool of clients with the provided options.
|
||||
def initialize(
|
||||
*,
|
||||
max_capacity : Int32 = 5,
|
||||
idle_capacity : Int32? = nil,
|
||||
timeout : Float64 = 5.0,
|
||||
)
|
||||
super(max_capacity: max_capacity, idle_capacity: idle_capacity, timeout: timeout) do
|
||||
companion = CONFIG.invidious_companion.sample
|
||||
make_client(companion.private_url, use_http_proxy: false)
|
||||
next make_client(companion.private_url, use_http_proxy: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user