From 109a036fd46bef9ddd7fdff801911e07390ebd8c Mon Sep 17 00:00:00 2001 From: Matteo Paramatti Date: Wed, 17 Sep 2025 00:53:55 +0100 Subject: [PATCH] ceph-volume: fix UdevData initialisation from empty /run/udev/data/* file Fixes: https://tracker.ceph.com/issues/73061 Signed-off-by: Matteo Paramatti (cherry picked from commit a4010a0f272e7e7b8e19cc3b2de2d355b8a809b2) (cherry picked from commit 8ac65948b9d167fd9cfc3548c63d1e405c593813) --- src/ceph-volume/ceph_volume/tests/util/test_disk.py | 8 ++++++++ src/ceph-volume/ceph_volume/util/disk.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) 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 09c4f5d7360..6abe8571b4e 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_disk.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_disk.py @@ -696,6 +696,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) @@ -710,6 +711,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 3b2d2df359e..31b35bb566d 100644 --- a/src/ceph-volume/ceph_volume/util/disk.py +++ b/src/ceph-volume/ceph_volume/util/disk.py @@ -1374,7 +1374,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) -- 2.39.5