userver: userver/storages/sqlite/infra/pool.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
pool.hpp
1#pragma once
2
3#include <memory>
4
5#include <userver/clients/dns/resolver_fwd.hpp>
6#include <userver/drivers/impl/connection_pool_base.hpp>
7#include <userver/engine/deadline.hpp>
8#include <userver/utils/datetime/wall_coarse_clock.hpp>
9#include <userver/utils/periodic_task.hpp>
10
11#include <userver/storages/sqlite/impl/connection.hpp>
12#include <userver/storages/sqlite/infra/connection_ptr.hpp>
13#include <userver/storages/sqlite/infra/statistics/statistics.hpp>
14#include <userver/storages/sqlite/options.hpp>
15#include <userver/storages/sqlite/sqlite_fwd.hpp>
16
17USERVER_NAMESPACE_BEGIN
18
19namespace storages::sqlite::infra {
20
21class Pool final : public drivers::impl::ConnectionPoolBase<impl::Connection, Pool> {
22public:
23 static std::shared_ptr<Pool>
24 Create(const settings::SQLiteSettings& settings, engine::TaskProcessor& blocking_task_processor);
25 ~Pool();
26
27 ConnectionPtr Acquire();
28 void Release(ConnectionUniquePtr connection);
29
30 Pool(const settings::SQLiteSettings& settings, engine::TaskProcessor& blocking_task_processor);
31
32 statistics::PoolStatistics& GetStatistics();
33
34private:
35 friend class drivers::impl::ConnectionPoolBase<impl::Connection, Pool>;
36
37 ConnectionUniquePtr DoCreateConnection(engine::Deadline deadline);
38
39 void AccountConnectionAcquired();
40 void AccountConnectionReleased();
41 void AccountConnectionCreated();
42 void AccountConnectionDestroyed() noexcept;
43 void AccountOverload();
44
45 engine::TaskProcessor& blocking_task_processor_;
46
47 const settings::SQLiteSettings settings_;
48
49 statistics::PoolStatistics stats_{};
50};
51
52} // namespace storages::sqlite::infra
53
54USERVER_NAMESPACE_END