void update_leader_handler(const std::string &leader_instance_id) override {
}
+ void handle_instances_added(const InstanceIds& instance_ids) override {
+ }
+ void handle_instances_removed(const InstanceIds& instance_ids) override {
+ }
+
private:
mutable Mutex m_test_lock;
int m_acquire_count = 0;
MOCK_METHOD1(pre_release_handler, void(Context *));
MOCK_METHOD1(update_leader_handler, void(const std::string &));
+ MOCK_METHOD1(handle_instances_added, void(const InstanceIds&));
+ MOCK_METHOD1(handle_instances_removed, void(const InstanceIds&));
};
MockListener *MockListener::s_instance = nullptr;
}
void handle_added(const InstanceIds& instance_ids) override {
- // TODO
+ leader_watcher->m_listener->handle_instances_added(instance_ids);
}
void handle_removed(const InstanceIds& instance_ids) override {
- // TODO
+ leader_watcher->m_listener->handle_instances_removed(instance_ids);
}
};
namespace rbd {
namespace mirror {
+using ::operator<<;
+
namespace {
const std::string SERVICE_DAEMON_LEADER_KEY("leader");
// TODO
}
+template <typename I>
+void PoolReplayer<I>::handle_instances_added(const InstanceIds &instance_ids) {
+ dout(5) << "instance_ids=" << instance_ids << dendl;
+
+ // TODO only register ourselves for now
+ auto instance_id = m_instance_watcher->get_instance_id();
+ m_image_map->update_instances_added({instance_id});
+}
+
+template <typename I>
+void PoolReplayer<I>::handle_instances_removed(
+ const InstanceIds &instance_ids) {
+ dout(5) << "instance_ids=" << instance_ids << dendl;
+ // TODO
+}
+
} // namespace mirror
} // namespace rbd
#include <memory>
#include <atomic>
#include <string>
+#include <vector>
class AdminSocketHook;
* @endverbatim
*/
+ typedef std::vector<std::string> InstanceIds;
+
struct PoolWatcherListener : public pool_watcher::Listener {
PoolReplayer *pool_replayer;
bool local;
const std::string &instance_id,
Context* on_finish);
+ void handle_instances_added(const InstanceIds &instance_ids);
+ void handle_instances_removed(const InstanceIds &instance_ids);
+
Threads<ImageCtxT> *m_threads;
ServiceDaemon<ImageCtxT>* m_service_daemon;
int64_t m_local_pool_id = -1;
m_pool_replayer->handle_update_leader(leader_instance_id);
}
+ void handle_instances_added(const InstanceIds& instance_ids) override {
+ m_pool_replayer->handle_instances_added(instance_ids);
+ }
+
+ void handle_instances_removed(const InstanceIds& instance_ids) override {
+ m_pool_replayer->handle_instances_removed(instance_ids);
+ }
+
private:
PoolReplayer *m_pool_replayer;
} m_leader_listener;
#include "include/buffer_fwd.h"
#include "include/encoding.h"
#include <string>
+#include <vector>
#include <boost/variant.hpp>
struct Context;
namespace leader_watcher {
struct Listener {
+ typedef std::vector<std::string> InstanceIds;
+
virtual ~Listener() {
}
virtual void update_leader_handler(
const std::string &leader_instance_id) = 0;
+
+ virtual void handle_instances_added(const InstanceIds& instance_ids) = 0;
+ virtual void handle_instances_removed(const InstanceIds& instance_ids) = 0;
};
enum NotifyOp {