1#ifndef LINTEL_CONNECTIONPOOL_H
2#define LINTEL_CONNECTIONPOOL_H
5#include <condition_variable>
11#include <source_location>
68 using Connector = std::function<std::unique_ptr<Connection>()>;
118 std::unique_ptr<Connection> m_connection;
119 std::thread::id m_owner;
168 void release(std::unique_ptr<Connection> connection, std::thread::id
owner);
176 [[
nodiscard]] std::string describeOutstanding(std::thread::id
waiting)
const;
180 [[
nodiscard]]
static std::string describeLocation(
const std::source_location &
location);
183 struct OutstandingLease
186 std::thread::id m_owner;
188 std::source_location m_location;
190 std::chrono::steady_clock::time_point m_acquired;
193 std::shared_ptr<DatabaseConnectionEntry> m_connectionEntry;
197 mutable std::mutex m_mutex;
198 std::condition_variable m_condition;
199 std::vector<std::unique_ptr<Connection>> m_idle;
200 std::map<std::thread::id, OutstandingLease> m_outstanding;
201 std::size_t m_created = 0;
Definition ConnectionPool.h:82
Lease(Lease &&other) noexcept
bool valid() const
Definition ConnectionPool.h:101
Lease(const Lease &)=delete
Connection & connection() const
Lease & operator=(Lease &&other) noexcept
Lease & operator=(const Lease &)=delete
Definition ConnectionPool.h:65
const std::string & name() const
ConnectionPool(const ConnectionPool &)=delete
std::size_t maxConnections() const
Definition ConnectionPool.h:152
ConnectionPool(std::shared_ptr< DatabaseConnectionEntry > connectionEntry, PoolSettings settings, HealthCheck healthCheck={}, Connector connector={})
ConnectionPool & operator=(const ConnectionPool &)=delete
std::function< std::unique_ptr< Connection >()> Connector
Definition ConnectionPool.h:68
std::function< bool(const Connection &)> HealthCheck
Definition ConnectionPool.h:70
std::size_t available() const
std::size_t outstanding() const
Lease acquire(std::source_location location=std::source_location::current())
Definition Connection.h:25
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9
Definition ConnectionPool.h:32
std::size_t maxConnections
Definition ConnectionPool.h:34
std::chrono::milliseconds acquireTimeout
Definition ConnectionPool.h:36