Skip to content

Commit a4010a0

Browse files
committed
ceph-volume: fix UdevData initialisation from empty /run/udev/data/* file
Fixes: https://tracker.ceph.com/issues/73061 Signed-off-by: Matteo Paramatti <[email protected]>
1 parent 297f7e5 commit a4010a0

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/ceph-volume/ceph_volume/tests/util/test_disk.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,7 @@ def setUp(self) -> None:
668668
self.fs.create_file(self.fake_device, st_mode=(stat.S_IFBLK | 0o600))
669669
self.fs.create_file('/run/udev/data/b999:0', create_missing_dirs=True, contents=udev_data_bare_device)
670670
self.fs.create_file('/run/udev/data/b998:1', create_missing_dirs=True, contents=udev_data_lv_device)
671+
self.fs.create_file('/run/udev/data/b997:2', create_missing_dirs=True, contents="")
671672

672673
def test_device_not_found(self) -> None:
673674
self.fs.remove(self.fake_device)
@@ -682,6 +683,13 @@ def test_no_data(self) -> None:
682683
with pytest.raises(RuntimeError):
683684
disk.UdevData(self.fake_device)
684685

686+
@patch('ceph_volume.util.disk.os.stat', MagicMock())
687+
@patch('ceph_volume.util.disk.os.minor', Mock(return_value=2))
688+
@patch('ceph_volume.util.disk.os.major', Mock(return_value=997))
689+
def test_empty_data(self) -> None:
690+
# no exception should be raised when a /run/udev/data/* file is empty
691+
_ = disk.UdevData(self.fake_device)
692+
685693
@patch('ceph_volume.util.disk.os.stat', MagicMock())
686694
@patch('ceph_volume.util.disk.os.minor', Mock(return_value=0))
687695
@patch('ceph_volume.util.disk.os.major', Mock(return_value=999))

src/ceph-volume/ceph_volume/util/disk.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1372,7 +1372,7 @@ def __init__(self, path: str) -> None:
13721372

13731373
with open(self.udev_data_path, 'r') as f:
13741374
content: str = f.read().strip()
1375-
self.raw_data: List[str] = content.split('\n')
1375+
self.raw_data: List[str] = content.split('\n') if content else []
13761376

13771377
for line in self.raw_data:
13781378
data_type, data = line.split(':', 1)

0 commit comments

Comments
 (0)