1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_RBD_MIRROR_H
5 #define CEPH_RBD_MIRROR_H
7 #include "common/ceph_context.h"
8 #include "common/ceph_mutex.h"
9 #include "include/rados/librados.hpp"
10 #include "include/utime.h"
11 #include "ClusterWatcher.h"
12 #include "PoolReplayer.h"
13 #include "tools/rbd_mirror/Types.h"
20 namespace journal
{ class CacheManagerHandler
; }
22 namespace librbd
{ struct ImageCtx
; }
27 template <typename
> struct ServiceDaemon
;
28 template <typename
> struct Threads
;
29 class CacheManagerHandler
;
30 class MirrorAdminSocketHook
;
34 * Contains the main loop and overall state for rbd-mirror.
36 * Sets up mirroring, and coordinates between noticing config
37 * changes and applying them.
41 Mirror(CephContext
*cct
, const std::vector
<const char*> &args
);
42 Mirror(const Mirror
&) = delete;
43 Mirror
& operator=(const Mirror
&) = delete;
48 void handle_signal(int signum
);
50 void print_status(Formatter
*f
);
55 void release_leader();
58 typedef ClusterWatcher::PoolPeers PoolPeers
;
59 typedef std::pair
<int64_t, PeerSpec
> PoolPeer
;
61 void update_pool_replayers(const PoolPeers
&pool_peers
,
62 const std::string
& site_name
);
64 void create_cache_manager();
65 void run_cache_manager(utime_t
*next_run_interval
);
68 std::vector
<const char*> m_args
;
69 Threads
<librbd::ImageCtx
> *m_threads
= nullptr;
70 ceph::mutex m_lock
= ceph::make_mutex("rbd::mirror::Mirror");
71 ceph::condition_variable m_cond
;
73 std::unique_ptr
<ServiceDaemon
<librbd::ImageCtx
>> m_service_daemon
;
75 // monitor local cluster for config changes in peers
76 std::unique_ptr
<ClusterWatcher
> m_local_cluster_watcher
;
77 std::unique_ptr
<CacheManagerHandler
> m_cache_manager_handler
;
78 std::unique_ptr
<PoolMetaCache
> m_pool_meta_cache
;
79 std::map
<PoolPeer
, std::unique_ptr
<PoolReplayer
<>>> m_pool_replayers
;
80 std::atomic
<bool> m_stopping
= { false };
81 bool m_manual_stop
= false;
82 MirrorAdminSocketHook
*m_asok_hook
;
83 std::string m_site_name
;
89 #endif // CEPH_RBD_MIRROR_H