1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef RBD_MIRROR_IMAGE_SYNC_THROTTLER_H
5 #define RBD_MIRROR_IMAGE_SYNC_THROTTLER_H
13 #include "common/Mutex.h"
14 #include "common/config_obs.h"
18 namespace ceph { class Formatter; }
19 namespace librbd { class ImageCtx; }
24 template <typename ImageCtxT = librbd::ImageCtx>
25 class ImageSyncThrottler : public md_config_obs_t {
27 static ImageSyncThrottler *create() {
28 return new ImageSyncThrottler();
35 ~ImageSyncThrottler() override;
37 void set_max_concurrent_syncs(uint32_t max);
38 void start_op(const std::string &id, Context *on_start);
39 bool cancel_op(const std::string &id);
40 void finish_op(const std::string &id);
43 void print_status(Formatter *f, std::stringstream *ss);
47 uint32_t m_max_concurrent_syncs;
48 std::list<std::pair<std::string, Context *>> m_queue;
49 std::set<std::string> m_inflight_ops;
51 const char **get_tracked_conf_keys() const override;
52 void handle_conf_change(const struct md_config_t *conf,
53 const std::set<std::string> &changed) override;
59 extern template class rbd::mirror::ImageSyncThrottler<librbd::ImageCtx>;
61 #endif // RBD_MIRROR_IMAGE_SYNC_THROTTLER_H