New patch submitted by Eduardo Warszawski (ewarszaw(a)redhat.com)
You can review this change at:
http://gerrit.usersys.redhat.com/764
commit 5e42dbbeb6d1a5b040d9e4fd7254f66ae98569ea
Author: Eduardo Warszawski <ewarszaw(a)redhat.com>
Date: Thu Jul 28 11:26:42 2011 +0300
Related to BZ#704131 - Reduce the number of lvm ops during image mgmt.
Change-Id: I90d7d1277eac207dd59376c95810b8325a52031e
diff --git a/vdsm/storage/blockVolume.py b/vdsm/storage/blockVolume.py
index 6b04047..1b4988f 100644
--- a/vdsm/storage/blockVolume.py
+++ b/vdsm/storage/blockVolume.py
@@ -427,23 +427,23 @@ class BlockVolume(volume.Volume):
Find the image(s) UUID by one of its volume UUID.
Templated and shared disks volumes may result more then one image.
"""
- vollist = lvm.lvsByTag(self.sdUUID, "%s%s" % (TAG_PREFIX_PARENT,
self.volUUID))
- vollist.append(self.volUUID)
- imglist = []
- for vol in vollist:
- for tag in lvm.getLV(self.sdUUID, vol).tags:
+ volumes = lvm.lvsByTag(self.sdUUID, "%s%s" % (TAG_PREFIX_PARENT,
self.volUUID))
+ volumes.append(lvm.getLV(self.volUUID))
+ images = []
+ for vol in volumes:
+ for tag in vol.tags:
if tag.startswith(TAG_PREFIX_IMAGE):
img = tag[3:]
if image.REMOVED_IMAGE_PREFIX not in img:
- imglist.append(img)
+ images.append(img)
# Check image legallity, if needed
if legal:
- for img in imglist[:]:
+ for img in images[:]:
if not image.Image(self.repoPath).isLegal(self.sdUUID, img):
- imglist.remove(img)
+ images.remove(img)
- return imglist
+ return images
def getVolumeTag(self, tagPrefix):
return _getVolumeTag(self.sdUUID, self.volUUID, tagPrefix)
@@ -499,7 +499,8 @@ class BlockVolume(volume.Volume):
"""
Fetch the list of the Volumes UUIDs, not including the shared base (template)
"""
- return lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_IMAGE, imgUUID))
+ lvs = lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_IMAGE, imgUUID))
+ return [lv.name for lv in lvs]
@classmethod
def getAllChildrenList(cls, repoPath, sdUUID, imgUUID, pvolUUID):
@@ -508,11 +509,11 @@ class BlockVolume(volume.Volume):
"""
chList = []
- vollist = lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_PARENT, pvolUUID))
- for v in vollist:
- for t in lvm.getLV(sdUUID, v).tags:
- if t.startswith(TAG_PREFIX_IMAGE):
- chList.append({'imgUUID':t[3:], 'volUUID':v})
+ volumes = lvm.lvsByTag(sdUUID, "%s%s" % (TAG_PREFIX_PARENT, pvolUUID))
+ for vol in volumes:
+ for tag in vol.tags:
+ if tag.startswith(TAG_PREFIX_IMAGE):
+ chList.append({'imgUUID':tag[3:],
'volUUID':vol.name})
return chList
diff --git a/vdsm/storage/lvm.py b/vdsm/storage/lvm.py
index 049f373..6f0a036 100644
--- a/vdsm/storage/lvm.py
+++ b/vdsm/storage/lvm.py
@@ -1166,8 +1166,8 @@ def setrwLV(vgName, lvNames, rw=True):
raise se.CannotSetRWLogicalVolume(vgName, " ".join(failed),
permission)
-def lvsByTag(vg, tag):
- return [lv.name for lv in getLV(vg) if tag in lv.tags]
+def lvsByTag(vgName, tag):
+ return [lv for lv in getLV(vgName) if tag in lv.tags]
#Fix me: unify with addTag