From: Matteo Paramatti Date: Tue, 16 Sep 2025 23:53:55 +0000 (+0100) Subject: ceph-volume: fix UdevData initialisation from empty /run/udev/data/* file X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a4010a0f272e7e7b8e19cc3b2de2d355b8a809b2;p=ceph.git ceph-volume: fix UdevData initialisation from empty /run/udev/data/* file Fixes: https://tracker.ceph.com/issues/73061 Signed-off-by: Matteo Paramatti --- diff --git a/src/ceph-volume/ceph_volume/tests/util/test_disk.py b/src/ceph-volume/ceph_volume/tests/util/test_disk.py index 1f359ba8b0c1..6a253890a141 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_disk.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_disk.py @@ -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)) diff --git a/src/ceph-volume/ceph_volume/util/disk.py b/src/ceph-volume/ceph_volume/util/disk.py index 51712f54be8a..5abf425ef82e 100644 --- a/src/ceph-volume/ceph_volume/util/disk.py +++ b/src/ceph-volume/ceph_volume/util/disk.py @@ -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)