userver: userver/storages/sqlite/infra/pool.hpp Source File
Loading...
Searching...
No Matches
pool.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/storages/sqlite/infra/pool.hpp
4/// @brief @copybrief storages::sqlite::infra::Pool
5
6#include <memory>
7
8#include <userver/clients/dns/resolver_fwd.hpp>
9#include <userver/drivers/impl/connection_pool_base.hpp>
10#include <userver/engine/deadline.hpp>
11#include <userver/utils/datetime/wall_coarse_clock.hpp>
12#include <userver/utils/periodic_task.hpp>
13
14#include <userver/storages/sqlite/impl/connection.hpp>
15#include <userver/storages/sqlite/infra/connection_ptr.hpp>
16#include <userver/storages/sqlite/infra/statistics/statistics.hpp>
17#include <userver/storages/sqlite/options.hpp>
18#include <userver/storages/sqlite/sqlite_fwd.hpp>
19
20USERVER_NAMESPACE_BEGIN
21
22namespace storages::sqlite::infra {
23
24/// @brief SQLite connection pool
25class Pool final : public drivers::impl::ConnectionPoolBase<impl::Connection, Pool> {
26public:
27 static std::shared_ptr<Pool> Create(
28 const settings::SQLiteSettings& settings,
29 engine::TaskProcessor& blocking_task_processor
30 );
31 ~Pool();
32
33 ConnectionPtr Acquire();
34 void Release(ConnectionUniquePtr connection);
35
36 Pool(const settings::SQLiteSettings& settings, engine::TaskProcessor& blocking_task_processor);
37
38 statistics::PoolStatistics& GetStatistics();
39
40private:
41 friend class drivers::impl::ConnectionPoolBase<impl::Connection, Pool>;
42
43 ConnectionUniquePtr DoCreateConnection(engine::Deadline deadline);
44
45 void AccountConnectionAcquired();
46 void AccountConnectionReleased();
47 void AccountConnectionCreated();
48 void AccountConnectionDestroyed() noexcept;
49 void AccountOverload();
50
51 engine::TaskProcessor& blocking_task_processor_;
52
53 const settings::SQLiteSettings settings_;
54
55 statistics::PoolStatistics stats_{};
56};
57
58} // namespace storages::sqlite::infra
59
60USERVER_NAMESPACE_END