]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/devicehealth: ensure we don't store empty objects 31735/head
authorSage Weil <sage@redhat.com>
Thu, 7 Nov 2019 22:35:19 +0000 (16:35 -0600)
committerNathan Cutler <ncutler@suse.com>
Tue, 19 Nov 2019 12:38:20 +0000 (13:38 +0100)
I'm not sure why devid would end up empty, but it is possible if we get
wonky data, and users seem to have seen empty objects in their pools,
so add a check!

Maybe-fixes: https://tracker.ceph.com/issues/41383
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 82414b3a42258b09defe2a88bc937a096439534f)

src/pybind/mgr/devicehealth/module.py

index 092aa906388d45587e06a115bcf375877823b234..d187d0e6f7bce65fcc3c9752c649df27197bbcbd 100644 (file)
@@ -318,7 +318,8 @@ class Module(MgrModule):
         if raw_smart_data:
             for device, raw_data in raw_smart_data.items():
                 data = self.extract_smart_features(raw_data)
-                self.put_device_metrics(ioctx, device, data)
+                if device and data:
+                    self.put_device_metrics(ioctx, device, data)
         ioctx.close()
         return 0, "", ""
 
@@ -340,7 +341,8 @@ class Module(MgrModule):
                     continue
                 did_device[device] = 1
                 data = self.extract_smart_features(raw_data)
-                self.put_device_metrics(ioctx, device, data)
+                if device and data:
+                    self.put_device_metrics(ioctx, device, data)
         ioctx.close()
         return 0, "", ""
 
@@ -359,7 +361,8 @@ class Module(MgrModule):
         if raw_smart_data:
             for device, raw_data in raw_smart_data.items():
                 data = self.extract_smart_features(raw_data)
-                self.put_device_metrics(ioctx, device, data)
+                if device and data:
+                    self.put_device_metrics(ioctx, device, data)
         ioctx.close()
         return 0, "", ""
 
@@ -384,6 +387,7 @@ class Module(MgrModule):
                     daemon_type, daemon_id, outb))
 
     def put_device_metrics(self, ioctx, devid, data):
+        assert devid
         old_key = datetime.utcnow() - timedelta(
             seconds=int(self.retention_period))
         prune = old_key.strftime(TIME_FORMAT)