Skip to content

Commit 7c18db5

Browse files
authored
Merge pull request ceph#65745 from guits/cv-drop-subprocess-call-get-devices
ceph-volume: use udev data instead of LVM subprocess in get_devices()
2 parents 5b38d5d + ea7aa27 commit 7c18db5

File tree

2 files changed

+40
-10
lines changed

2 files changed

+40
-10
lines changed

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

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,11 @@ def test_no_devices_are_found(self, tmpdir, patched_get_block_devs_sysfs):
256256
def test_sda_block_is_found(self, patched_get_block_devs_sysfs, fake_filesystem):
257257
sda_path = '/dev/sda'
258258
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
259-
result = disk.get_devices()
259+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
260+
mock_instance = MagicMock()
261+
mock_instance.is_lvm = False
262+
MockUdevData.return_value = mock_instance
263+
result = disk.get_devices()
260264
assert len(result.keys()) == 1
261265
assert result[sda_path]['human_readable_size'] == '0.00 B'
262266
assert result[sda_path]['model'] == ''
@@ -266,7 +270,11 @@ def test_sda_size(self, patched_get_block_devs_sysfs, fake_filesystem):
266270
sda_path = '/dev/sda'
267271
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
268272
fake_filesystem.create_file('/sys/block/sda/size', contents = '1024')
269-
result = disk.get_devices()
273+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
274+
mock_instance = MagicMock()
275+
mock_instance.is_lvm = False
276+
MockUdevData.return_value = mock_instance
277+
result = disk.get_devices()
270278
assert list(result.keys()) == [sda_path]
271279
assert result[sda_path]['human_readable_size'] == '512.00 KB'
272280

@@ -275,30 +283,46 @@ def test_sda_sectorsize_fallsback(self, patched_get_block_devs_sysfs, fake_files
275283
sda_path = '/dev/sda'
276284
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
277285
fake_filesystem.create_file('/sys/block/sda/queue/hw_sector_size', contents = '1024')
278-
result = disk.get_devices()
286+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
287+
mock_instance = MagicMock()
288+
mock_instance.is_lvm = False
289+
MockUdevData.return_value = mock_instance
290+
result = disk.get_devices()
279291
assert list(result.keys()) == [sda_path]
280292
assert result[sda_path]['sectorsize'] == '1024'
281293

282294
def test_sda_sectorsize_from_logical_block(self, patched_get_block_devs_sysfs, fake_filesystem):
283295
sda_path = '/dev/sda'
284296
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
285297
fake_filesystem.create_file('/sys/block/sda/queue/logical_block_size', contents = '99')
286-
result = disk.get_devices()
298+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
299+
mock_instance = MagicMock()
300+
mock_instance.is_lvm = False
301+
MockUdevData.return_value = mock_instance
302+
result = disk.get_devices()
287303
assert result[sda_path]['sectorsize'] == '99'
288304

289305
def test_sda_sectorsize_does_not_fallback(self, patched_get_block_devs_sysfs, fake_filesystem):
290306
sda_path = '/dev/sda'
291307
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
292308
fake_filesystem.create_file('/sys/block/sda/queue/logical_block_size', contents = '99')
293309
fake_filesystem.create_file('/sys/block/sda/queue/hw_sector_size', contents = '1024')
294-
result = disk.get_devices()
310+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
311+
mock_instance = MagicMock()
312+
mock_instance.is_lvm = False
313+
MockUdevData.return_value = mock_instance
314+
result = disk.get_devices()
295315
assert result[sda_path]['sectorsize'] == '99'
296316

297317
def test_is_rotational(self, patched_get_block_devs_sysfs, fake_filesystem):
298318
sda_path = '/dev/sda'
299319
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
300320
fake_filesystem.create_file('/sys/block/sda/queue/rotational', contents = '1')
301-
result = disk.get_devices()
321+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
322+
mock_instance = MagicMock()
323+
mock_instance.is_lvm = False
324+
MockUdevData.return_value = mock_instance
325+
result = disk.get_devices()
302326
assert result[sda_path]['rotational'] == '1'
303327

304328
def test_is_ceph_rbd(self, patched_get_block_devs_sysfs, fake_filesystem):
@@ -313,7 +337,11 @@ def test_actuator_device(self, patched_get_block_devs_sysfs, fake_filesystem):
313337
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk', sda_path]]
314338
for actuator in range(0, fake_actuator_nb):
315339
fake_filesystem.create_dir(f'/sys/block/sda/queue/independent_access_ranges/{actuator}')
316-
result = disk.get_devices()
340+
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
341+
mock_instance = MagicMock()
342+
mock_instance.is_lvm = False
343+
MockUdevData.return_value = mock_instance
344+
result = disk.get_devices()
317345
assert result[sda_path]['actuators'] == fake_actuator_nb
318346

319347

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import time
66
import json
77
from ceph_volume import process, allow_loop_devices
8-
from ceph_volume.api import lvm
98
from ceph_volume.util.system import get_file_contents
109
from typing import Dict, List, Any, Union, Optional
1110

@@ -802,9 +801,12 @@ def get_devices(_sys_block_path='/sys/block', device=''):
802801
continue
803802

804803
# If the mapper device is a logical volume it gets excluded
805-
if is_mapper_device(diskname):
806-
if lvm.get_device_lvs(diskname):
804+
try:
805+
if UdevData(diskname).is_lvm:
807806
continue
807+
except RuntimeError:
808+
logger.debug("get_devices(): device {} couldn't be found.".format(diskname))
809+
continue
808810

809811
# all facts that have no defaults
810812
# (<name>, <path relative to _sys_block_path>)

0 commit comments

Comments
 (0)