[PATCH 02/13] Keep lvm and md metadata separate from udev info.
David Lehman
dlehman at redhat.com
Wed May 27 18:16:03 UTC 2015
We can't inject data into pyudev.Device instances like we could when
the udev db entries were plain dicts.
(cherry picked from commit fd6d5ebf3f12d4cb2e82f848e6ce7d1c9a840efa)
---
blivet/devicetree.py | 41 +++++++++++++++++++++--------------------
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/blivet/devicetree.py b/blivet/devicetree.py
index 4ba4640..38b729a 100644
--- a/blivet/devicetree.py
+++ b/blivet/devicetree.py
@@ -1505,11 +1505,13 @@ class DeviceTree(object):
lv_dev.logSize, lv_dev.vgSpaceUsed)
def handleUdevLVMPVFormat(self, info, device):
+ # pylint: disable=unused-argument
log_method_call(self, name=device.name, type=device.format.type)
+ pv_info = self.pvInfo.get(device.path, {})
# lookup/create the VG and LVs
try:
- vg_name = udev.device_get_vg_name(info)
- vg_uuid = udev.device_get_vg_uuid(info)
+ vg_name = udev.device_get_vg_name(pv_info)
+ vg_uuid = udev.device_get_vg_uuid(pv_info)
except KeyError:
# no vg name means no vg -- we're done with this pv
return
@@ -1523,12 +1525,12 @@ class DeviceTree(object):
vg_device.parents.append(device)
else:
try:
- vg_size = udev.device_get_vg_size(info)
- vg_free = udev.device_get_vg_free(info)
- pe_size = udev.device_get_vg_extent_size(info)
- pe_count = udev.device_get_vg_extent_count(info)
- pe_free = udev.device_get_vg_free_extents(info)
- pv_count = udev.device_get_vg_pv_count(info)
+ vg_size = udev.device_get_vg_size(pv_info)
+ vg_free = udev.device_get_vg_free(pv_info)
+ pe_size = udev.device_get_vg_extent_size(pv_info)
+ pe_count = udev.device_get_vg_extent_count(pv_info)
+ pe_free = udev.device_get_vg_free_extents(pv_info)
+ pv_count = udev.device_get_vg_pv_count(pv_info)
except (KeyError, ValueError) as e:
log.warning("invalid data for %s: %s", device.name, e)
return
@@ -1548,8 +1550,9 @@ class DeviceTree(object):
self.handleVgLvs(vg_device)
def handleUdevMDMemberFormat(self, info, device):
+ # pylint: disable=unused-argument
log_method_call(self, name=device.name, type=device.format.type)
-
+ md_info = mdraid.mdexamine(device.path)
md_array = self.getDeviceByUuid(device.format.mdUuid, incomplete=True)
if device.format.mdUuid and md_array:
md_array.parents.append(device)
@@ -1557,9 +1560,9 @@ class DeviceTree(object):
# create the array with just this one member
try:
# level is reported as, eg: "raid1"
- md_level = udev.device_get_md_level(info)
- md_devices = udev.device_get_md_devices(info)
- md_uuid = udev.device_get_md_uuid(info)
+ md_level = udev.device_get_md_level(md_info)
+ md_devices = udev.device_get_md_devices(md_info)
+ md_uuid = udev.device_get_md_uuid(md_info)
except (KeyError, ValueError) as e:
log.warning("invalid data for %s: %s", device.name, e)
return
@@ -1602,10 +1605,10 @@ class DeviceTree(object):
# mdexamine yields MD_METADATA only for metadata version > 0.90
# if MD_METADATA is missing, assume metadata version is 0.90
- md_metadata = md_metadata or udev.device_get_md_metadata(info) or "0.90"
+ md_metadata = md_metadata or udev.device_get_md_metadata(md_info) or "0.90"
if not md_name:
- md_path = info.get("DEVICE", "")
+ md_path = md_info.get("DEVICE", "")
if md_path:
md_name = devicePathToName(md_path)
if re.match(r'md\d+$', md_name):
@@ -1808,8 +1811,6 @@ class DeviceTree(object):
# luks/dmcrypt
kwargs["name"] = "luks-%s" % uuid
elif format_type in formats.mdraid.MDRaidMember._udevTypes:
- info.update(mdraid.mdexamine(device.path))
-
# mdraid
try:
kwargs["mdUuid"] = udev.device_get_md_uuid(info)
@@ -1823,18 +1824,18 @@ class DeviceTree(object):
kwargs["biosraid"] = udev.device_is_biosraid_member(info)
elif format_type == "LVM2_member":
# lvm
- info.update(self.pvInfo.get(device.path, {}))
+ pv_info = self.pvInfo.get(device.path, {})
try:
- kwargs["vgName"] = udev.device_get_vg_name(info)
+ kwargs["vgName"] = udev.device_get_vg_name(pv_info)
except KeyError:
log.warning("PV %s has no vg_name", name)
try:
- kwargs["vgUuid"] = udev.device_get_vg_uuid(info)
+ kwargs["vgUuid"] = udev.device_get_vg_uuid(pv_info)
except KeyError:
log.warning("PV %s has no vg_uuid", name)
try:
- kwargs["peStart"] = udev.device_get_pv_pe_start(info)
+ kwargs["peStart"] = udev.device_get_pv_pe_start(pv_info)
except KeyError:
log.warning("PV %s has no pe_start", name)
elif format_type == "vfat":
--
2.1.0
More information about the anaconda-patches
mailing list