]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/osdmonitor: fix incorrect output of "osd df" due to osd out 10759/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Mon, 18 Jul 2016 05:57:08 +0000 (13:57 +0800)
committerLoic Dachary <ldachary@redhat.com>
Wed, 17 Aug 2016 15:46:32 +0000 (17:46 +0200)
If an osd is automatically marked as out, the output of "osd df"
is not right, as follow:

-5 10.00999        -  5586G  2989G  2596G     0    0     host ceph192-9-9-8
11  0.90999  1.00000   931G   542G   388G 58.25 0.99         osd.11
14  0.90999  1.00000   931G   530G   400G 56.97 0.97         osd.14
20  0.90999  1.00000   931G   716G   214G 76.99 1.31         osd.20
22  0.90999  1.00000   931G   477G   453G 51.29 0.87         osd.22
26  0.90999        0      0      0      0     0    0         osd.26
28  0.90999  1.00000   931G   587G   343G 63.09 1.07         osd.28
30  0.90999  1.00000   931G   602G   328G 64.75 1.10         osd.30
16  0.90999  1.00000   931G   589G   341G 63.34 1.08         osd.16
18  0.90999  1.00000   931G   530G   400G 56.93 0.97         osd.18
24  0.90999  1.00000   931G   202G   728G 21.77 0.37         osd.24
32  0.90999  1.00000   931G   477G   454G 51.23 0.87         osd.32

Two problems are identified from the above output:

1. the total capacity(total, total used, total avial)
only includes osd.32, osd.24, osd.18, osd.16, osd.30, osd.28, and other
healthy osds such as osd.11, osd.14 etc. are excluded.

2. the average utilization/deviation are forced resetted.

Fixes: http://tracker.ceph.com/issues/16706
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
(cherry picked from commit 1e4735440ca329f4b95d9bd6f58d9efab7d28d20)

src/mon/OSDMonitor.cc

index 39291ed2d0488cddc3a47fb5f0ded8de91ebc4b7..13b4fea1cdf14004b632e5f2feca502c7f085a03 100644 (file)
@@ -790,8 +790,15 @@ protected:
 
   bool get_bucket_utilization(int id, int64_t* kb, int64_t* kb_used,
                              int64_t* kb_avail) const {
-    if (id >= 0)
+    if (id >= 0) {
+      if (osdmap->is_out(id)) {
+        *kb = 0;
+        *kb_used = 0;
+        *kb_avail = 0;
+        return true;
+      }
       return get_osd_utilization(id, kb, kb_used, kb_avail);
+    }
 
     *kb = 0;
     *kb_used = 0;