From 0bcc295363d9ca20d43fd313084370158513bc62 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 27 May 2016 11:40:58 -0400 Subject: [PATCH] rbd-mirror: cluster-level asok commands need to support multiple pools Signed-off-by: Jason Dillaman (cherry picked from commit f4339ee8cb64d5f1a164e017fea942600ffb0ea9) --- qa/workunits/rbd/rbd_mirror.sh | 6 +++--- src/tools/rbd_mirror/Replayer.cc | 14 ++++++++++++-- src/tools/rbd_mirror/Replayer.h | 2 ++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/qa/workunits/rbd/rbd_mirror.sh b/qa/workunits/rbd/rbd_mirror.sh index 35b412dab1a8..d1ae0b5cf5f0 100755 --- a/qa/workunits/rbd/rbd_mirror.sh +++ b/qa/workunits/rbd/rbd_mirror.sh @@ -599,7 +599,7 @@ admin_daemon ${CLUSTER1} rbd mirror restart wait_for_image_replay_started ${CLUSTER1} ${image} wait_for_image_replay_started ${CLUSTER1} ${image1} -admin_daemon ${CLUSTER1} rbd mirror stop ${CLUSTER2} +admin_daemon ${CLUSTER1} rbd mirror stop ${POOL} ${CLUSTER2} wait_for_image_replay_stopped ${CLUSTER1} ${image} wait_for_image_replay_stopped ${CLUSTER1} ${image1} @@ -609,12 +609,12 @@ wait_for_image_replay_started ${CLUSTER1} ${image} admin_daemon ${CLUSTER1} rbd mirror start wait_for_image_replay_started ${CLUSTER1} ${image1} -admin_daemon ${CLUSTER1} rbd mirror start ${CLUSTER2} +admin_daemon ${CLUSTER1} rbd mirror start ${POOL} ${CLUSTER2} admin_daemon ${CLUSTER1} rbd mirror restart ${POOL}/${image} wait_for_image_replay_started ${CLUSTER1} ${image} -admin_daemon ${CLUSTER1} rbd mirror restart ${CLUSTER2} +admin_daemon ${CLUSTER1} rbd mirror restart ${POOL} ${CLUSTER2} wait_for_image_replay_started ${CLUSTER1} ${image} wait_for_image_replay_started ${CLUSTER1} ${image1} diff --git a/src/tools/rbd_mirror/Replayer.cc b/src/tools/rbd_mirror/Replayer.cc index f3d4b03975fa..dc6acf90be4e 100644 --- a/src/tools/rbd_mirror/Replayer.cc +++ b/src/tools/rbd_mirror/Replayer.cc @@ -242,8 +242,6 @@ Replayer::Replayer(Threads *threads, std::shared_ptr image_deleter m_asok_hook(nullptr), m_replayer_thread(this) { - CephContext *cct = static_cast(m_local->cct()); - m_asok_hook = new ReplayerAdminSocketHook(cct, m_peer.cluster_name, this); } Replayer::~Replayer() @@ -408,6 +406,17 @@ void Replayer::run() dout(20) << "enter" << dendl; while (!m_stopping.read()) { + + std::string asok_hook_name = m_local_io_ctx.get_pool_name() + " " + + m_peer.cluster_name; + if (m_asok_hook_name != asok_hook_name || m_asok_hook == nullptr) { + m_asok_hook_name = asok_hook_name; + delete m_asok_hook; + + CephContext *cct = static_cast(m_local->cct()); + m_asok_hook = new ReplayerAdminSocketHook(cct, m_asok_hook_name, this); + } + Mutex::Locker l(m_lock); if (!m_manual_stop) { set_sources(m_pool_watcher->get_images()); @@ -436,6 +445,7 @@ void Replayer::print_status(Formatter *f, stringstream *ss) if (f) { f->open_object_section("replayer_status"); + f->dump_string("pool", m_local_io_ctx.get_pool_name()); f->dump_stream("peer") << m_peer; f->open_array_section("image_replayers"); }; diff --git a/src/tools/rbd_mirror/Replayer.h b/src/tools/rbd_mirror/Replayer.h index 44b49e763f75..cd8efa8a4258 100644 --- a/src/tools/rbd_mirror/Replayer.h +++ b/src/tools/rbd_mirror/Replayer.h @@ -85,7 +85,9 @@ private: std::map > > m_image_replayers; std::unique_ptr m_status_watcher; + std::string m_asok_hook_name; ReplayerAdminSocketHook *m_asok_hook; + struct InitImageInfo { std::string global_id; std::string id; -- 2.47.3