[NEW PATCH] Related to BZ#704131 - Reduce the number of lvm ops during image mgmt. (via gerrit-bot)
Dan Kenigsberg
danken at redhat.com
Mon Aug 8 12:36:52 UTC 2011
New patch submitted by Dan Kenigsberg (danken at redhat.com)
You can review this change at: http://gerrit.usersys.redhat.com/764
commit 6db6f49d3485ee9db57df8a653fe261de8743838
Author: Eduardo Warszawski <ewarszaw at redhat.com>
Date: Thu Jul 28 11:26:42 2011 +0300
Related to BZ#704131 - Reduce the number of lvm ops during image mgmt.
lvm.getLV() is called once per LV, instead of once per LV tag in findImagesByVolume().
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 ca32231..d46f678 100644
--- a/vdsm/storage/lvm.py
+++ b/vdsm/storage/lvm.py
@@ -1166,8 +1166,8 @@ def setrwLV(vg, lv, rw=True):
raise se.CannotSetRWLogicalVolume(vg, lv, 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
More information about the vdsm-patches
mailing list