]> git-server-git.apps.pok.os.sepia.ceph.com Git - cephmetrics.git/commitdiff
common/osd: fixes to support intelcas and nvme OSD/journals 58/head
authorPaul Cuzner <pcuzner@redhat.com>
Tue, 11 Jul 2017 01:17:52 +0000 (13:17 +1200)
committerZack Cerza <zack@redhat.com>
Tue, 11 Jul 2017 22:39:04 +0000 (16:39 -0600)
collectors/common.py
collectors/osd.py

index 24b1af04e7e1c0fa7da4842fc9c65dc956f6a7fa..c9c4432e32775856cc46f346551e091c88678f8b 100644 (file)
@@ -192,6 +192,7 @@ class Disk(object):
 
         self._name = device_name
         self._path_name = path_name
+        self._base_dev = Disk.get_base_dev(device_name)
         self.osd_id = osd_id
 
         self.rotational = self._get_rota()
@@ -204,10 +205,10 @@ class Disk(object):
         self.refresh()
 
     def _get_size(self):
-        return int(fread("/sys/block/{}/size".format(self._name))) * 512
+        return int(fread("/sys/block/{}/size".format(self._base_dev))) * 512
 
     def _get_rota(self):
-        return int(fread("/sys/block/{}/queue/rotational".format(self._name)))
+        return int(fread("/sys/block/{}/queue/rotational".format(self._base_dev)))
 
     def _get_fssize(self):
         s = statvfs("{}/whoami".format(self._path_name))
@@ -222,14 +223,20 @@ class Disk(object):
             self.fs_size, self.fs_used, self.fs_percent_used = self._get_fssize()
 
     @staticmethod
-    def get_real_dev(dev_name):
-        # for nvme and intelcas devices, just use the device name as is, but
-        # for sdX type devices, strip of the partition id
-        if dev_name.startswith(('nvme', 'intelcas')):
+    def get_base_dev(dev_name):
+
+        # for intelcas devices, just use the device name as is
+        if dev_name.startswith('intelcas'):
             device = dev_name
+        elif dev_name.startswith('nvme'):
+            if 'p' in dev_name:
+                device = dev_name[:(dev_name.index('p'))]
+            else:
+                device = dev_name
         else:
             # default strip any numeric ie. sdaa1 -> sdaa
             device = filter(lambda ch: ch.isalpha(), dev_name)
+
         return device
 
 
index c835304a36c6aff39dcc3f6c9134368742e7e5b7..829f2de0599d57c4c6b61d5bdc76369c3b7a6bba 100644 (file)
@@ -135,12 +135,12 @@ class OSDs(BaseCollector):
                 if dirs.issuperset(osd_indicators):
                     osd_id = path_name.split('-')[-1]
 
-                    osd_device = Disk.get_real_dev(dev_path.split('/')[-1])
+                    osd_device = dev_path.split('/')[-1]
 
                     if osd_device not in self.osd:
                         self.osd[osd_device] = Disk(osd_device,
-                                                    path_name,
-                                                    osd_id)
+                                                    path_name=path_name,
+                                                    osd_id=osd_id)
                         self.dev_lookup[osd_device] = 'osd'
 
                     if osd_id not in self.osd:
@@ -151,10 +151,12 @@ class OSDs(BaseCollector):
                     if os.path.exists(journal_link):
                         # this is a filestore based OSD
                         jrnl_path = os.path.realpath(journal_link)
-                        jrnl_dev = Disk.get_real_dev(jrnl_path.split('/')[-1])
+                        jrnl_dev = jrnl_path.split('/')[-1]
 
                         if jrnl_dev not in self.osd:
-                            self.jrnl[jrnl_dev] = Disk(jrnl_dev, osd_id=osd_id)
+                            self.jrnl[jrnl_dev] = Disk(jrnl_dev,
+                                                       osd_id=osd_id)
+
                             self.dev_lookup[jrnl_dev] = 'jrnl'
 
                     else: