]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: break recovery status onto separate lines 2586/head
authorSage Weil <sage@redhat.com>
Sun, 14 Sep 2014 05:00:24 +0000 (22:00 -0700)
committerSage Weil <sage@redhat.com>
Wed, 1 Oct 2014 20:05:57 +0000 (13:05 -0700)
This affects both the 'health' and 'pgmap' sections of 'ceph status'
output.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/OSDMonitor.cc
src/mon/PGMap.cc
src/mon/PGMap.h
src/mon/PGMonitor.cc

index 04902bbe9cc33af2b80f70fe6555c2a6dde310a4..b367fcd0bfe798bdaa8ef9394f8e084cbdcdc189 100644 (file)
@@ -2776,19 +2776,20 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
         f->open_object_section("recovery");
       }
 
-      stringstream rss, tss;
-      pg_map.pool_recovery_summary(f.get(), &rss, poolid);
-      if (!f && !rss.str().empty())
-        tss << "  " << rss.str() << "\n";
+      list<string> sl;
+      stringstream tss;
+      pg_map.pool_recovery_summary(f.get(), &sl, poolid);
+      if (!f && !sl.empty()) {
+       for (list<string>::iterator p = sl.begin(); p != sl.end(); ++p)
+         tss << "  " << *p << "\n";
+      }
 
       if (f) {
         f->close_section();
         f->open_object_section("recovery_rate");
       }
 
-      rss.clear();
-      rss.str("");
-
+      ostringstream rss;
       pg_map.pool_recovery_rate_summary(f.get(), &rss, poolid);
       if (!f && !rss.str().empty())
         tss << "  recovery io " << rss.str() << "\n";
index b7a0a4e9ef7705ff245b676106f7eefa97c68a13..375de76000feeb5eff070703eb36be1f482b5357 100644 (file)
@@ -882,10 +882,9 @@ void PGMap::print_osd_blocked_by_stats(std::ostream *ss) const
   (*ss) << tab;
 }
 
-void PGMap::recovery_summary(Formatter *f, ostream *out,
+void PGMap::recovery_summary(Formatter *f, list<string> *psl,
                              const pool_stat_t& delta_sum) const
 {
-  bool first = true;
   if (delta_sum.stats.sum.num_objects_degraded) {
     double pc = (double)delta_sum.stats.sum.num_objects_degraded /
       (double)delta_sum.stats.sum.num_object_copies * (double)100.0;
@@ -896,10 +895,11 @@ void PGMap::recovery_summary(Formatter *f, ostream *out,
       f->dump_unsigned("degraded_total", delta_sum.stats.sum.num_object_copies);
       f->dump_string("degraded_ratio", b);
     } else {
-      *out << delta_sum.stats.sum.num_objects_degraded
-          << "/" << delta_sum.stats.sum.num_object_copies << " objects degraded (" << b << "%)";
+      ostringstream ss;
+      ss << delta_sum.stats.sum.num_objects_degraded
+        << "/" << delta_sum.stats.sum.num_object_copies << " objects degraded (" << b << "%)";
+      psl->push_back(ss.str());
     }
-    first = false;
   }
   if (delta_sum.stats.sum.num_objects_misplaced) {
     double pc = (double)delta_sum.stats.sum.num_objects_misplaced /
@@ -911,12 +911,11 @@ void PGMap::recovery_summary(Formatter *f, ostream *out,
       f->dump_unsigned("misplaced_total", delta_sum.stats.sum.num_object_copies);
       f->dump_string("misplaced_ratio", b);
     } else {
-      if (!first)
-       *out << "; ";
-      *out << delta_sum.stats.sum.num_objects_misplaced
-          << "/" << delta_sum.stats.sum.num_object_copies << " objects misplaced (" << b << "%)";
+      ostringstream ss;
+      ss << delta_sum.stats.sum.num_objects_misplaced
+        << "/" << delta_sum.stats.sum.num_object_copies << " objects misplaced (" << b << "%)";
+      psl->push_back(ss.str());
     }
-    first = false;
   }
   if (delta_sum.stats.sum.num_objects_unfound) {
     double pc = (double)delta_sum.stats.sum.num_objects_unfound /
@@ -928,10 +927,10 @@ void PGMap::recovery_summary(Formatter *f, ostream *out,
       f->dump_unsigned("unfound_total", delta_sum.stats.sum.num_objects);
       f->dump_string("unfound_ratio", b);
     } else {
-      if (!first)
-       *out << "; ";
-      *out << delta_sum.stats.sum.num_objects_unfound
-          << "/" << delta_sum.stats.sum.num_objects << " unfound (" << b << "%)";
+      ostringstream ss;
+      ss << delta_sum.stats.sum.num_objects_unfound
+        << "/" << delta_sum.stats.sum.num_objects << " unfound (" << b << "%)";
+      psl->push_back(ss.str());
     }
   }
 }
@@ -969,9 +968,9 @@ void PGMap::overall_recovery_rate_summary(Formatter *f, ostream *out) const
   recovery_rate_summary(f, out, pg_sum_delta, stamp_delta);
 }
 
-void PGMap::overall_recovery_summary(Formatter *f, ostream *out) const
+void PGMap::overall_recovery_summary(Formatter *f, list<string> *psl) const
 {
-  recovery_summary(f, out, pg_sum);
+  recovery_summary(f, psl, pg_sum);
 }
 
 void PGMap::pool_recovery_rate_summary(Formatter *f, ostream *out,
@@ -987,14 +986,14 @@ void PGMap::pool_recovery_rate_summary(Formatter *f, ostream *out,
   recovery_rate_summary(f, out, p->second.first, ts->second);
 }
 
-void PGMap::pool_recovery_summary(Formatter *f, ostream *out,
+void PGMap::pool_recovery_summary(Formatter *f, list<string> *psl,
                                   uint64_t poolid) const
 {
   ceph::unordered_map<uint64_t,pair<pool_stat_t,utime_t> >::const_iterator p =
     per_pool_sum_delta.find(poolid);
   if (p == per_pool_sum_delta.end())
     return;
-  recovery_summary(f, out, p->second.first);
+  recovery_summary(f, psl, p->second.first);
 }
 
 void PGMap::client_io_rate_summary(Formatter *f, ostream *out,
@@ -1203,16 +1202,18 @@ void PGMap::print_summary(Formatter *f, ostream *out) const
         << kb_t(osd_sum.kb) << " avail\n";
   }
 
-  std::stringstream ssr;
-  overall_recovery_summary(f, &ssr);
-  if (!f && ssr.str().length())
-    *out << "            " << ssr.str() << "\n";
-  ssr.clear();
-  ssr.str("");
+  list<string> sl;
+  overall_recovery_summary(f, &sl);
+  if (!f && !sl.empty()) {
+    for (list<string>::iterator p = sl.begin(); p != sl.end(); ++p)
+      *out << "            " << *p << "\n";
+  }
+  sl.clear();
 
   if (!f)
     *out << ss.str();   // pgs by state
 
+  ostringstream ssr;
   overall_recovery_rate_summary(f, &ssr);
   if (!f && ssr.str().length())
     *out << "recovery io " << ssr.str() << "\n";
@@ -1223,8 +1224,6 @@ void PGMap::print_summary(Formatter *f, ostream *out) const
   overall_client_io_rate_summary(f, &ssr);
   if (!f && ssr.str().length())
     *out << "  client io " << ssr.str() << "\n";
-
-
 }
 
 void PGMap::print_oneline_summary(ostream *out) const
@@ -1268,12 +1267,11 @@ void PGMap::print_oneline_summary(ostream *out) const
     *out << pretty_si_t(iops) << "op/s";
   }
 
+  list<string> sl;
+  overall_recovery_summary(NULL, &sl);
+  for (list<string>::iterator p = sl.begin(); p != sl.end(); ++p)
+    *out << "; " << *p;
   std::stringstream ssr;
-  overall_recovery_summary(NULL, &ssr);
-  if (ssr.str().length())
-    *out << "; " << ssr.str();
-  ssr.clear();
-  ssr.str("");
   overall_recovery_rate_summary(NULL, &ssr);
   if (ssr.str().length())
     *out << "; " << ssr.str() << " recovering";
index 7b4eb6ed66695b0bed618c022588fe84ba995f1b..c5a6a91a58250b03ad7f054315243bbb2d961037 100644 (file)
@@ -283,10 +283,10 @@ public:
   void dump_osd_blocked_by_stats(Formatter *f) const;
   void print_osd_blocked_by_stats(std::ostream *ss) const;
 
-  void recovery_summary(Formatter *f, ostream *out,
+  void recovery_summary(Formatter *f, list<string> *psl,
                         const pool_stat_t& delta_sum) const;
-  void overall_recovery_summary(Formatter *f, ostream *out) const;
-  void pool_recovery_summary(Formatter *f, ostream *out,
+  void overall_recovery_summary(Formatter *f, list<string> *psl) const;
+  void pool_recovery_summary(Formatter *f, list<string> *psl,
                              uint64_t poolid) const;
   void recovery_rate_summary(Formatter *f, ostream *out,
                              const pool_stat_t& delta_sum,
index d4fc5781c04d762d6c125ef5b8be31274bcf3c2d..9cd1051dc87b46b1c11b4976d05628cb39e43280 100644 (file)
@@ -1990,12 +1990,12 @@ void PGMonitor::get_health(list<pair<health_status_t,string> >& summary,
   }
 
   // recovery
-  stringstream rss;
-  pg_map.overall_recovery_summary(NULL, &rss);
-  if (!rss.str().empty()) {
-    summary.push_back(make_pair(HEALTH_WARN, "recovery " + rss.str()));
+  list<string> sl;
+  pg_map.overall_recovery_summary(NULL, &sl);
+  for (list<string>::iterator p = sl.begin(); p != sl.end(); ++p) {
+    summary.push_back(make_pair(HEALTH_WARN, "recovery " + *p));
     if (detail)
-      detail->push_back(make_pair(HEALTH_WARN, "recovery " + rss.str()));
+      detail->push_back(make_pair(HEALTH_WARN, "recovery " + *p));
   }
   
   // full/nearfull