userver: userver/storages/sqlite/infra/pool.hpp Source File
Loading...
Searching...
No Matches
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> Create(
24 const settings::SQLiteSettings& settings,
25 engine::TaskProcessor& blocking_task_processor
26 );
27 ~Pool();
28
29 ConnectionPtr Acquire();
30 void Release(ConnectionUniquePtr connection);
31
32 Pool(const settings::SQLiteSettings& settings, engine::TaskProcessor& blocking_task_processor);
33
34 statistics::PoolStatistics& GetStatistics();
35
36private:
37 friend class drivers::impl::ConnectionPoolBase<impl::Connection, Pool>;
38
39 ConnectionUniquePtr DoCreateConnection(engine::Deadline deadline);
40
41 void AccountConnectionAcquired();
42 void AccountConnectionReleased();
43 void AccountConnectionCreated();
44 void AccountConnectionDestroyed() noexcept;
45 void AccountOverload();
46
47 engine::TaskProcessor& blocking_task_processor_;
48
49 const settings::SQLiteSettings settings_;
50
51 statistics::PoolStatistics stats_{};
52};
53
54} // namespace storages::sqlite::infra
55
56USERVER_NAMESPACE_END