diff --git a/src/include/dbconnector/pool.hpp b/src/include/dbconnector/pool.hpp index 6614862..fa134c2 100644 --- a/src/include/dbconnector/pool.hpp +++ b/src/include/dbconnector/pool.hpp @@ -1,5 +1,6 @@ #pragma once +#include "pool/connection_pool_config.hpp" #include "pool/pooled_connection.hpp" #include "pool/thread_local_connection_cache.hpp" #include "pool/connection_pool.hpp" diff --git a/src/include/dbconnector/pool/connection_pool.hpp b/src/include/dbconnector/pool/connection_pool.hpp index b8f9214..e4c5c67 100644 --- a/src/include/dbconnector/pool/connection_pool.hpp +++ b/src/include/dbconnector/pool/connection_pool.hpp @@ -9,6 +9,7 @@ #include #include "dbconnector/pool/cached_connection.hpp" +#include "dbconnector/pool/connection_pool_config.hpp" #include "dbconnector/pool/pooled_connection.hpp" #include "dbconnector/pool/thread_local_connection_cache.hpp" @@ -18,16 +19,7 @@ namespace pool { template class ConnectionPool : public std::enable_shared_from_this> { public: - static constexpr uint64_t DEFAULT_POOL_SIZE = 4; - static constexpr uint64_t DEFAULT_POOL_TIMEOUT_MS = 30000; - - enum class ThreadLocalCacheState { - CACHE_ENABLED, - CACHE_DISABLED, - }; - - ConnectionPool(uint64_t max_connections = DEFAULT_POOL_SIZE, uint64_t wait_timeout_millis = DEFAULT_POOL_TIMEOUT_MS, - ThreadLocalCacheState tl_cache_state = ThreadLocalCacheState::CACHE_DISABLED); + ConnectionPool(ConnectionPoolConfig config = ConnectionPoolConfig()); virtual ~ConnectionPool(); PooledConnection WaitAcquire(); diff --git a/src/include/dbconnector/pool/connection_pool_config.hpp b/src/include/dbconnector/pool/connection_pool_config.hpp new file mode 100644 index 0000000..534c8c9 --- /dev/null +++ b/src/include/dbconnector/pool/connection_pool_config.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace dbconnector { +namespace pool { + +struct ConnectionPoolConfig { + uint64_t max_connections = 4; + uint64_t wait_timeout_millis = 30000; + bool tl_cache_enabled = true; + uint64_t max_lifetime_millis = 0; + uint64_t idle_timeout_millis = 0; + bool start_reaper_thread = false; +}; + +} // namespace pool +} // namespace dbconnector diff --git a/src/include/dbconnector/pool/connection_pool_impl.hpp b/src/include/dbconnector/pool/connection_pool_impl.hpp index ae31a81..c52d83e 100644 --- a/src/include/dbconnector/pool/connection_pool_impl.hpp +++ b/src/include/dbconnector/pool/connection_pool_impl.hpp @@ -7,16 +7,20 @@ #include "dbconnector/defer.hpp" #include "dbconnector/pool/connection_pool.hpp" +#include "dbconnector/pool/connection_pool_config.hpp" #include "dbconnector/pool/pool_exception.hpp" namespace dbconnector { namespace pool { template -ConnectionPool::ConnectionPool(uint64_t max_connections_p, uint64_t timeout_millis_p, - ThreadLocalCacheState tl_cache_state) - : max_connections(max_connections_p), wait_timeout_millis(timeout_millis_p), total_connections(0), - shutdown_flag(false), tl_cache_enabled(ThreadLocalCacheState::CACHE_ENABLED == tl_cache_state) { +ConnectionPool::ConnectionPool(ConnectionPoolConfig config) + : max_connections(config.max_connections), wait_timeout_millis(config.wait_timeout_millis), + max_lifetime_millis(config.max_lifetime_millis), idle_timeout_millis(config.idle_timeout_millis), + tl_cache_enabled(config.tl_cache_enabled) { + if (config.start_reaper_thread) { + EnsureReaperRunning(); + } } template diff --git a/test/test_pool.cpp b/test/test_pool.cpp index 7d2d6fa..5da8823 100644 --- a/test/test_pool.cpp +++ b/test/test_pool.cpp @@ -27,13 +27,9 @@ class TestConnection { class TestConnectionPool : public dbconnector::pool::ConnectionPool { public: - TestConnectionPool(size_t max_connections = DEFAULT_POOL_SIZE, size_t timeout_ms = DEFAULT_POOL_TIMEOUT_MS, - bool tl_cache_enabled = true) + TestConnectionPool(size_t max_connections = 4, size_t timeout_ms = 30000, bool tl_cache_enabled = true) : dbconnector::pool::ConnectionPool( - max_connections, timeout_ms, - tl_cache_enabled - ? dbconnector::pool::ConnectionPool::ThreadLocalCacheState::CACHE_ENABLED - : dbconnector::pool::ConnectionPool::ThreadLocalCacheState::CACHE_DISABLED) { + CreateConfig(max_connections, timeout_ms, tl_cache_enabled)) { } protected: @@ -48,6 +44,16 @@ class TestConnectionPool : public dbconnector::pool::ConnectionPool