[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