]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: add a column 'RAW USED' for ceph df detail
authorRuifeng Yang <yangruifeng.09209@h3c.com>
Tue, 12 Jan 2016 14:08:41 +0000 (22:08 +0800)
committerDavid Zafman <dzafman@redhat.com>
Mon, 16 May 2016 05:38:59 +0000 (22:38 -0700)
Signed-off-by: Ruifeng Yang <yangruifeng.09209@h3c.com>
(cherry picked from commit 2b597ae6d4d53974f28a2da090232577daf09979)

Conflicts:
qa/workunits/cephtool/test.sh (trivial)
src/mon/PGMonitor.cc (trivial)
src/mon/PGMonitor.h (trivial)

qa/workunits/cephtool/test.sh
src/mon/PGMonitor.cc
src/mon/PGMonitor.h

index 08d4b04d73b667c773f257c3129a6df1a99190cc..9a7ef95f2b10d02e8af7afb52e70d90e337f1aad 100755 (executable)
@@ -1519,6 +1519,30 @@ EOF
   ceph osd setcrushmap -i $map
 }
 
+function test_mon_cephdf_commands()
+{
+  # ceph df detail:
+  # pool section:
+  # RAW USED The near raw used per pool in raw total
+
+  ceph osd pool create cephdf_for_test 32 32 replicated
+  ceph osd pool set cephdf_for_test size 2
+
+  dd if=/dev/zero of=./cephdf_for_test bs=4k count=1
+  rados put cephdf_for_test cephdf_for_test -p cephdf_for_test
+
+  #wait for update
+  sleep 10
+
+  cal_raw_used_size=`ceph df detail | grep cephdf_for_test | awk -F ' ' '{printf "%d\n", 2 * $4}'`
+  raw_used_size=`ceph df detail | grep cephdf_for_test | awk -F ' '  '{print $11}'`
+
+  ceph osd pool delete cephdf_for_test cephdf_for_test --yes-i-really-really-mean-it
+  rm ./cephdf_for_test
+
+  expect_false test $cal_raw_used_size != $raw_used_size
+}
+
 #
 # New tests should be added to the TESTS array below
 #
@@ -1560,6 +1584,7 @@ OSD_TESTS+=" tiering_agent"
 
 MDS_TESTS+=" mds_tell"
 MDS_TESTS+=" mon_mds"
+MDS_TESTS+=" mon_cephdf_commands"
 
 TESTS+=$MON_TESTS
 TESTS+=$OSD_TESTS
index 3c2b756af1a008c21f8d0010579448b6b3879427..b7779bf9ecf012e0b9a31517be3dda7249401cbe 100644 (file)
@@ -1252,8 +1252,12 @@ inline string percentify(const float& a) {
 //void PGMonitor::dump_object_stat_sum(stringstream& ss, Formatter *f,
 void PGMonitor::dump_object_stat_sum(TextTable &tbl, Formatter *f,
                                     object_stat_sum_t &sum, uint64_t avail,
-                                    bool verbose)
+                                    float raw_used_rate, bool verbose)
 {
+  float curr_object_copies_rate = 0.0;
+  if (sum.num_object_copies > 0)
+    curr_object_copies_rate = (float)(sum.num_object_copies - sum.num_objects_degraded) / sum.num_object_copies;
+
   if (f) {
     f->dump_int("kb_used", SHIFT_ROUND_UP(sum.num_bytes, 10));
     f->dump_int("bytes_used", sum.num_bytes);
@@ -1265,6 +1269,7 @@ void PGMonitor::dump_object_stat_sum(TextTable &tbl, Formatter *f,
       f->dump_int("rd_bytes", sum.num_rd_kb * 1024ull);
       f->dump_int("wr", sum.num_wr);
       f->dump_int("wr_bytes", sum.num_wr_kb * 1024ull);
+      f->dump_int("raw_bytes_used", sum.num_bytes * raw_used_rate * curr_object_copies_rate);
     }
   } else {
     tbl << stringify(si_t(sum.num_bytes));
@@ -1277,8 +1282,9 @@ void PGMonitor::dump_object_stat_sum(TextTable &tbl, Formatter *f,
     tbl << sum.num_objects;
     if (verbose) {
       tbl << stringify(si_t(sum.num_objects_dirty))
-         << stringify(si_t(sum.num_rd))
-          << stringify(si_t(sum.num_wr));
+          << stringify(si_t(sum.num_rd))
+          << stringify(si_t(sum.num_wr))
+          << stringify(si_t(sum.num_bytes * raw_used_rate * curr_object_copies_rate));
     }
   }
 }
@@ -1333,6 +1339,7 @@ void PGMonitor::dump_pool_stats(stringstream &ss, Formatter *f, bool verbose)
       tbl.define_column("DIRTY", TextTable::LEFT, TextTable::RIGHT);
       tbl.define_column("READ", TextTable::LEFT, TextTable::RIGHT);
       tbl.define_column("WRITE", TextTable::LEFT, TextTable::RIGHT);
+      tbl.define_column("RAW USED", TextTable::LEFT, TextTable::RIGHT);
     }
   }
 
@@ -1351,6 +1358,7 @@ void PGMonitor::dump_pool_stats(stringstream &ss, Formatter *f, bool verbose)
                                         pool->get_type(),
                                         pool->get_size());
     int64_t avail;
+    float raw_used_rate;
     if (avail_by_rule.count(ruleno) == 0) {
       avail = get_rule_avail(osdmap, ruleno);
       if (avail < 0)
@@ -1362,20 +1370,24 @@ void PGMonitor::dump_pool_stats(stringstream &ss, Formatter *f, bool verbose)
     switch (pool->get_type()) {
     case pg_pool_t::TYPE_REPLICATED:
       avail /= pool->get_size();
+      raw_used_rate = pool->get_size();
       break;
     case pg_pool_t::TYPE_ERASURE:
-      {
-       const map<string,string>& ecp =
-         osdmap.get_erasure_code_profile(pool->erasure_code_profile);
-       map<string,string>::const_iterator pm = ecp.find("m");
-       map<string,string>::const_iterator pk = ecp.find("k");
-       if (pm != ecp.end() && pk != ecp.end()) {
-         int k = atoi(pk->second.c_str());
-         int m = atoi(pm->second.c_str());
-         avail = avail * k / (m + k);
-       }
+    {
+      const map<string,string>& ecp =
+        osdmap.get_erasure_code_profile(pool->erasure_code_profile);
+      map<string,string>::const_iterator pm = ecp.find("m");
+      map<string,string>::const_iterator pk = ecp.find("k");
+      if (pm != ecp.end() && pk != ecp.end()) {
+       int k = atoi(pk->second.c_str());
+       int m = atoi(pm->second.c_str());
+       avail = avail * k / (m + k);
+       raw_used_rate = (float)(m + k) / k;
+      } else {
+       raw_used_rate = 0.0;
       }
       break;
+    }
     default:
       assert(0 == "unrecognized pool type");
     }
@@ -1391,7 +1403,7 @@ void PGMonitor::dump_pool_stats(stringstream &ss, Formatter *f, bool verbose)
       if (verbose)
         tbl << "-";
     }
-    dump_object_stat_sum(tbl, f, stat.stats.sum, avail, verbose);
+    dump_object_stat_sum(tbl, f, stat.stats.sum, avail, raw_used_rate, verbose);
     if (f)
       f->close_section(); // stats
     else
index 97a9ac1194b953471c936d512a416cbb1068bd42..4161a029fc9e074ebf687ab160166770ba038604 100644 (file)
@@ -146,8 +146,9 @@ private:
                          vector<string>& args) const;
 
   void dump_object_stat_sum(TextTable &tbl, Formatter *f,
-                            object_stat_sum_t &sum,
+                           object_stat_sum_t &sum,
                            uint64_t avail,
+                           float raw_used_rate,
                            bool verbose);
 
   int64_t get_rule_avail(OSDMap& osdmap, int ruleno);