]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: cluster-level asok commands need to support multiple pools 9409/head
authorJason Dillaman <dillaman@redhat.com>
Fri, 27 May 2016 15:40:58 +0000 (11:40 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 31 May 2016 15:56:33 +0000 (11:56 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit f4339ee8cb64d5f1a164e017fea942600ffb0ea9)

qa/workunits/rbd/rbd_mirror.sh
src/tools/rbd_mirror/Replayer.cc
src/tools/rbd_mirror/Replayer.h

index 35b412dab1a8ae58335fc6a952e0d0a634652ead..d1ae0b5cf5f017f16355bab57dd213669ab55d8f 100755 (executable)
@@ -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}
 
index f3d4b03975fa7835753c3e741ff74dc705f8b769..dc6acf90be4e794133afee6909e37f4c56dec9ac 100644 (file)
@@ -242,8 +242,6 @@ Replayer::Replayer(Threads *threads, std::shared_ptr<ImageDeleter> image_deleter
   m_asok_hook(nullptr),
   m_replayer_thread(this)
 {
-  CephContext *cct = static_cast<CephContext *>(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<CephContext *>(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");
   };
index 44b49e763f756f66e2a14b8c3835b9151cfec89f..cd8efa8a4258a5a3e31dc205b7598701ca199251 100644 (file)
@@ -85,7 +85,9 @@ private:
   std::map<std::string, std::unique_ptr<ImageReplayer<> > > m_image_replayers;
   std::unique_ptr<MirrorStatusWatchCtx> m_status_watcher;
 
+  std::string m_asok_hook_name;
   ReplayerAdminSocketHook *m_asok_hook;
+
   struct InitImageInfo {
     std::string global_id;
     std::string id;