]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: fix UdevData initialisation from empty /run/udev/data/* file 65554/head
authorMatteo Paramatti <paramattimatteo@gmail.com>
Tue, 16 Sep 2025 23:53:55 +0000 (00:53 +0100)
committerMatteo Paramatti <paramattimatteo@gmail.com>
Wed, 17 Sep 2025 00:07:17 +0000 (01:07 +0100)
Fixes: https://tracker.ceph.com/issues/73061
Signed-off-by: Matteo Paramatti <paramattimatteo@gmail.com>
src/ceph-volume/ceph_volume/tests/util/test_disk.py
src/ceph-volume/ceph_volume/util/disk.py

index 1f359ba8b0c1352f64d57b27aa8e3264cd52c6f0..6a253890a1419abc7683f998e88e8114263c177b 100644 (file)
@@ -668,6 +668,7 @@ V:1"""
         self.fs.create_file(self.fake_device, st_mode=(stat.S_IFBLK | 0o600))
         self.fs.create_file('/run/udev/data/b999:0', create_missing_dirs=True, contents=udev_data_bare_device)
         self.fs.create_file('/run/udev/data/b998:1', create_missing_dirs=True, contents=udev_data_lv_device)
+        self.fs.create_file('/run/udev/data/b997:2', create_missing_dirs=True, contents="")
 
     def test_device_not_found(self) -> None:
         self.fs.remove(self.fake_device)
@@ -682,6 +683,13 @@ V:1"""
         with pytest.raises(RuntimeError):
             disk.UdevData(self.fake_device)
 
+    @patch('ceph_volume.util.disk.os.stat', MagicMock())
+    @patch('ceph_volume.util.disk.os.minor', Mock(return_value=2))
+    @patch('ceph_volume.util.disk.os.major', Mock(return_value=997))
+    def test_empty_data(self) -> None:
+        # no exception should be raised when a /run/udev/data/* file is empty
+        _ = disk.UdevData(self.fake_device)
+
     @patch('ceph_volume.util.disk.os.stat', MagicMock())
     @patch('ceph_volume.util.disk.os.minor', Mock(return_value=0))
     @patch('ceph_volume.util.disk.os.major', Mock(return_value=999))
index 51712f54be8a67a1c31680313577bbcfe261d810..5abf425ef82ecccac2c671752cadc754e9dc0cb5 100644 (file)
@@ -1372,7 +1372,7 @@ class UdevData:
 
         with open(self.udev_data_path, 'r') as f:
             content: str = f.read().strip()
-            self.raw_data: List[str] = content.split('\n')
+            self.raw_data: List[str] = content.split('\n') if content else []
 
         for line in self.raw_data:
             data_type, data = line.split(':', 1)