class TestLeaderWatcher : public ::rbd::mirror::TestFixture {
public:
- class Listener : public rbd::mirror::LeaderWatcher<>::Listener {
+ class Listener : public rbd::mirror::leader_watcher::Listener {
public:
Listener()
: m_test_lock(unique_lock_name("LeaderWatcher::m_test_lock", this)) {
using librbd::MockManagedLock;
-struct MockListener : public LeaderWatcher<librbd::MockTestImageCtx>::Listener {
+struct MockListener : public leader_watcher::Listener {
static MockListener* s_instance;
MockListener() {
template <typename I>
LeaderWatcher<I>::LeaderWatcher(Threads<I> *threads, librados::IoCtx &io_ctx,
- Listener *listener)
+ leader_watcher::Listener *listener)
: Watcher(io_ctx, threads->work_queue, RBD_MIRROR_LEADER),
m_threads(threads), m_listener(listener),
m_lock("rbd::mirror::LeaderWatcher " + io_ctx.get_pool_name()),
class LeaderWatcher : protected librbd::Watcher {
using librbd::Watcher::unregister_watch; // Silence overloaded virtual warning
public:
- struct Listener {
- virtual ~Listener() {
- }
-
- virtual void post_acquire_handler(Context *on_finish) = 0;
- virtual void pre_release_handler(Context *on_finish) = 0;
-
- virtual void update_leader_handler(
- const std::string &leader_instance_id) = 0;
- };
-
LeaderWatcher(Threads<ImageCtxT> *threads, librados::IoCtx &io_ctx,
- Listener *listener);
+ leader_watcher::Listener *listener);
~LeaderWatcher() override;
int init();
};
Threads<ImageCtxT> *m_threads;
- Listener *m_listener;
+ leader_watcher::Listener *m_listener;
mutable Mutex m_lock;
uint64_t m_notifier_id;
#include "PoolWatcher.h"
#include "ImageDeleter.h"
#include "types.h"
+#include "tools/rbd_mirror/leader_watcher/Types.h"
#include "tools/rbd_mirror/pool_watcher/Types.h"
#include "tools/rbd_mirror/service_daemon/Types.h"
}
} m_pool_replayer_thread;
- class LeaderListener : public LeaderWatcher<>::Listener {
+ class LeaderListener : public leader_watcher::Listener {
public:
LeaderListener(PoolReplayer *pool_replayer)
: m_pool_replayer(pool_replayer) {
#include "include/int_types.h"
#include "include/buffer_fwd.h"
#include "include/encoding.h"
+#include <string>
#include <boost/variant.hpp>
+struct Context;
+
namespace ceph { class Formatter; }
namespace rbd {
namespace mirror {
namespace leader_watcher {
+struct Listener {
+ virtual ~Listener() {
+ }
+
+ virtual void post_acquire_handler(Context *on_finish) = 0;
+ virtual void pre_release_handler(Context *on_finish) = 0;
+
+ virtual void update_leader_handler(
+ const std::string &leader_instance_id) = 0;
+};
+
enum NotifyOp {
NOTIFY_OP_HEARTBEAT = 0,
NOTIFY_OP_LOCK_ACQUIRED = 1,