[NEW PATCH] BZ#730912 - Optimize BlockVolume.findImagesByVolume() (via gerrit-bot)

Eduardo Warszawski ewarszaw at redhat.com
Wed Aug 17 09:44:50 UTC 2011


New patch submitted by Eduardo Warszawski (ewarszaw at redhat.com)

You can review this change at: http://gerrit.usersys.redhat.com/817

commit 474c7bcb26c7ad7253cdb6c9906dc0dcd223df0a
Author: Eduardo Warszawski <ewarszaw at redhat.com>
Date:   Tue Aug 16 15:02:31 2011 +0300

    BZ#730912 - Optimize BlockVolume.findImagesByVolume()
    
    Fixes a reg introduced by lvm.lvsByTag() in:
    http://gerrit.usersys.redhat.com/#change,764
    
    Change-Id: Ic52a963881010a2a907acd0badad80f0438221df

diff --git a/vdsm/storage/blockVolume.py b/vdsm/storage/blockVolume.py
index 1b4988f..78cf99a 100644
--- a/vdsm/storage/blockVolume.py
+++ b/vdsm/storage/blockVolume.py
@@ -427,23 +427,30 @@ 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.
         """
-        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:
+        lvs = lvm.getLV(self.sdUUID)
+        imgUUIDs = [self.imgUUID] #Add volume image
+        for lv in lvs:
+            imgUUID = ""
+            parent = ""
+            for tag in lv.tags:
                 if tag.startswith(TAG_PREFIX_IMAGE):
-                    img = tag[3:]
-                    if image.REMOVED_IMAGE_PREFIX not in img:
-                        images.append(img)
+                    imgUUID = tag[len(TAG_PREFIX_IMAGE):]
+                elif tag.startswith(TAG_PREFIX_PARENT):
+                    if tag[len(TAG_PREFIX_PARENT):] != self.volUUID:
+                        break #Not a child
+                    parent = tag[len(TAG_PREFIX_PARENT):]
+                if parent and image:
+                    if imgUUID not in imgUUIDs:
+                        imgUUIDs.append(imgUUID)
+                    break
 
         # Check image legallity, if needed
         if legal:
-            for img in images[:]:
-                if not image.Image(self.repoPath).isLegal(self.sdUUID, img):
-                    images.remove(img)
+            for imgUUID in imgUUIDs[:]:
+                if not image.Image(self.repoPath).isLegal(self.sdUUID, imgUUID):
+                    imgUUIDs.remove(imgUUID)
 
-        return images
+        return imgUUIDs
 
     def getVolumeTag(self, tagPrefix):
         return _getVolumeTag(self.sdUUID, self.volUUID, tagPrefix)




More information about the vdsm-patches mailing list