Github   Telegram
Loading...
Searching...
No Matches
dist_locked_worker.hpp
1#pragma once
2
3#include <chrono>
4#include <functional>
5#include <memory>
6#include <optional>
7#include <string>
8
11#include <userver/dist_lock/statistics.hpp>
15
16USERVER_NAMESPACE_BEGIN
17
18namespace dist_lock {
19namespace impl {
20
21class Locker;
22
23} // namespace impl
24
28class DistLockedWorker final {
29 public:
30 using WorkerFunc = std::function<void()>;
31
43 DistLockedWorker(std::string name, WorkerFunc worker_func,
44 std::shared_ptr<DistLockStrategyBase> strategy,
45 const DistLockSettings& settings = {},
46 engine::TaskProcessor* task_processor = nullptr);
47
49
51 const std::string& Name() const;
52
55
58
62 void Start();
63
66 void Stop();
67
70 void RunOnce();
71
73 bool IsRunning() const;
74
77 std::optional<std::chrono::steady_clock::duration> GetLockedDuration() const;
78
80 const Statistics& GetStatistics() const;
81
84
85 private:
86 engine::TaskProcessor& GetTaskProcessor() const noexcept;
87
88 std::shared_ptr<impl::Locker> locker_ptr_;
89
90 mutable engine::Mutex locker_task_mutex_;
91 engine::TaskWithResult<void> locker_task_;
92
93 engine::TaskProcessor* const task_processor_;
94};
95
96} // namespace dist_lock
97
98USERVER_NAMESPACE_END