]>
git.proxmox.com Git - ceph.git/blob - ceph/src/tools/rbd_mirror/ImageSyncThrottler.h
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"
19 namespace ceph
{ class Formatter
; }
20 namespace librbd
{ class ImageCtx
; }
25 template <typename ImageCtxT
= librbd::ImageCtx
>
26 class ImageSyncThrottler
: public md_config_obs_t
{
28 static ImageSyncThrottler
*create(CephContext
*cct
) {
29 return new ImageSyncThrottler(cct
);
35 ImageSyncThrottler(CephContext
*cct
);
36 ~ImageSyncThrottler() override
;
38 void set_max_concurrent_syncs(uint32_t max
);
39 void start_op(const std::string
&id
, Context
*on_start
);
40 bool cancel_op(const std::string
&id
);
41 void finish_op(const std::string
&id
);
44 void print_status(Formatter
*f
, std::stringstream
*ss
);
49 uint32_t m_max_concurrent_syncs
;
50 std::list
<std::pair
<std::string
, Context
*>> m_queue
;
51 std::set
<std::string
> m_inflight_ops
;
53 const char **get_tracked_conf_keys() const override
;
54 void handle_conf_change(const ConfigProxy
& conf
,
55 const std::set
<std::string
> &changed
) override
;
61 extern template class rbd::mirror::ImageSyncThrottler
<librbd::ImageCtx
>;
63 #endif // RBD_MIRROR_IMAGE_SYNC_THROTTLER_H