[node-patches] Change in ovirt-node[master]: Move multipath device checking to ovirt.node.utils.storage
fabiand at redhat.com
fabiand at redhat.com
Tue Apr 28 14:28:43 UTC 2015
Fabian Deutsch has posted comments on this change.
Change subject: Move multipath device checking to ovirt.node.utils.storage
......................................................................
Patch Set 15: Code-Review-1
(7 comments)
https://gerrit.ovirt.org/#/c/19951/15/src/ovirt/node/utils/storage.py
File src/ovirt/node/utils/storage.py:
Line 120: # FIXME explain ...
Line 121: name = "/dev/%s" % name.rstrip('0123456789')
Line 122: self._cached_live_disk_name = name
Line 123: return name
Line 124:
If this function get's moved here - and I am in favor of this - then we should also update the logic a bit to make it modern and improve it's readability.
Line 125: def translate_device_name(self, _dev):
Line 126: """Discover whether a device can be mapped to a devicemapper name so
Line 127: we can match arbitrary /dev/sd? names, such as flash drives
Line 128: """
Line 121: name = "/dev/%s" % name.rstrip('0123456789')
Line 122: self._cached_live_disk_name = name
Line 123: return name
Line 124:
Line 125: def translate_device_name(self, _dev):
Let's add a doctext.
I#d also consider to rename it to canonical_path()
Also, we do not need _dev if it's a member function of class Device
Line 126: """Discover whether a device can be mapped to a devicemapper name so
Line 127: we can match arbitrary /dev/sd? names, such as flash drives
Line 128: """
Line 129: self.logger.debug("Translating %s")
Line 126: """Discover whether a device can be mapped to a devicemapper name so
Line 127: we can match arbitrary /dev/sd? names, such as flash drives
Line 128: """
Line 129: self.logger.debug("Translating %s")
Line 130: if _dev is None:
In case of problems we should raise errors.
Line 131: return False
Line 132: if "/dev/cciss" in _dev:
Line 133: _dev = "/dev/mapper/%s" % process.check_output(["cciss_id", _dev])
Line 134: if not "/dev/mapper" in _dev:
Line 129: self.logger.debug("Translating %s")
Line 130: if _dev is None:
Line 131: return False
Line 132: if "/dev/cciss" in _dev:
Line 133: _dev = "/dev/mapper/%s" % process.check_output(["cciss_id", _dev])
I'd not like to work with cciss_id here, if possible I'd rather like to query udev or sysfs.
Line 134: if not "/dev/mapper" in _dev:
Line 135: if not _dev.startswith("/dev/"):
Line 136: _dev = "/dev/%s" % _dev
Line 137: try:
Line 130: if _dev is None:
Line 131: return False
Line 132: if "/dev/cciss" in _dev:
Line 133: _dev = "/dev/mapper/%s" % process.check_output(["cciss_id", _dev])
Line 134: if not "/dev/mapper" in _dev:
The next three lines should be simpliefied, possibly in general:
if "/dev/cciss" in devpath:
…
elif "/dev/mapper" in devpath:
…
else:
…
Line 135: if not _dev.startswith("/dev/"):
Line 136: _dev = "/dev/%s" % _dev
Line 137: try:
Line 138: output = [x for x in process.check_output(["multipath", "-ll",
Line 134: if not "/dev/mapper" in _dev:
Line 135: if not _dev.startswith("/dev/"):
Line 136: _dev = "/dev/%s" % _dev
Line 137: try:
Line 138: output = [x for x in process.check_output(["multipath", "-ll",
This function is complex enough to get it's own python function, to make it more clear what's happening here.
Line 139: _dev]).split('\n') if re.match(r'.*?dm-[0-9]+',
Line 140: x)][0].strip()
Line 141: _dev = "/dev/mapper/%s" % output.split()[0]
Line 142: except process.CalledProcessError as e:
Line 147: # multipath returned fine, but we didn't match a known dm name
Line 148: self.logger.exception("Translated %s, but didn't find the dm"
Line 149: "path" % _dev)
Line 150:
Line 151: if not hasattr(self, 'disk_dict'):
We do not have self.disk_dict in this class
Line 152: # Haven't populated yet, do that first
Line 153: self.disk_dict = self._storage.get_udev_devices()
Line 154: info = self.disk_dict[_dev].split(",", 5)
Line 155: device = Device(_dev, *info)
--
To view, visit https://gerrit.ovirt.org/19951
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I203d16f75fd9ed3b983cc240d8c9c34fd8189499
Gerrit-PatchSet: 15
Gerrit-Project: ovirt-node
Gerrit-Branch: master
Gerrit-Owner: Ryan Barry <rbarry at redhat.com>
Gerrit-Reviewer: Fabian Deutsch <fabiand at redhat.com>
Gerrit-Reviewer: automation at ovirt.org
Gerrit-Reviewer: oVirt Jenkins CI Server
Gerrit-HasComments: Yes
More information about the node-patches
mailing list