]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: fix "pool replayer status" for case when init failed 32483/head
authorMykola Golub <mgolub@suse.com>
Sat, 4 Jan 2020 18:58:16 +0000 (18:58 +0000)
committerMykola Golub <mgolub@suse.com>
Sun, 5 Jan 2020 09:12:21 +0000 (09:12 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/tools/rbd_mirror/PoolReplayer.cc

index 0447289797fe6d607f9256a1b840dbdf2557f137..08c1e5abb4fd1a22a844d74339acaa20ea8ff31c 100644 (file)
@@ -751,31 +751,39 @@ void PoolReplayer<I>::print_status(Formatter *f) {
     state = "stopped (manual)";
   } else if (m_stopping) {
     state = "stopped";
+  } else if (!is_running()) {
+    state = "error";
   }
   f->dump_string("state", state);
 
-  std::string leader_instance_id;
-  m_leader_watcher->get_leader_instance_id(&leader_instance_id);
-  f->dump_string("leader_instance_id", leader_instance_id);
-
-  bool leader = m_leader_watcher->is_leader();
-  f->dump_bool("leader", leader);
-  if (leader) {
-    std::vector<std::string> instance_ids;
-    m_leader_watcher->list_instances(&instance_ids);
-    f->open_array_section("instances");
-    for (auto instance_id : instance_ids) {
-      f->dump_string("instance_id", instance_id);
+  if (m_leader_watcher) {
+    std::string leader_instance_id;
+    m_leader_watcher->get_leader_instance_id(&leader_instance_id);
+    f->dump_string("leader_instance_id", leader_instance_id);
+
+    bool leader = m_leader_watcher->is_leader();
+    f->dump_bool("leader", leader);
+    if (leader) {
+      std::vector<std::string> instance_ids;
+      m_leader_watcher->list_instances(&instance_ids);
+      f->open_array_section("instances");
+      for (auto instance_id : instance_ids) {
+        f->dump_string("instance_id", instance_id);
+      }
+      f->close_section(); // instances
     }
-    f->close_section(); // instances
   }
 
-  f->dump_string("local_cluster_admin_socket",
-                 reinterpret_cast<CephContext *>(m_local_io_ctx.cct())->_conf.
-                     get_val<std::string>("admin_socket"));
-  f->dump_string("remote_cluster_admin_socket",
-                 reinterpret_cast<CephContext *>(m_remote_io_ctx.cct())->_conf.
-                     get_val<std::string>("admin_socket"));
+  if (m_local_rados) {
+    auto cct = reinterpret_cast<CephContext *>(m_local_rados->cct());
+    f->dump_string("local_cluster_admin_socket",
+                   cct->_conf.get_val<std::string>("admin_socket"));
+  }
+  if (m_remote_rados) {
+    auto cct = reinterpret_cast<CephContext *>(m_remote_rados->cct());
+    f->dump_string("remote_cluster_admin_socket",
+                   cct->_conf.get_val<std::string>("admin_socket"));
+  }
 
   if (m_image_sync_throttler) {
     f->open_object_section("sync_throttler");
@@ -789,7 +797,9 @@ void PoolReplayer<I>::print_status(Formatter *f) {
     f->close_section(); // deletion_throttler
   }
 
-  m_default_namespace_replayer->print_status(f);
+  if (m_default_namespace_replayer) {
+    m_default_namespace_replayer->print_status(f);
+  }
 
   f->open_array_section("namespaces");
   for (auto &it : m_namespace_replayers) {