Eduardo has uploaded a new change for review.

Change subject: getAllVolumes returns partially deleted volumes too.
......................................................................

getAllVolumes returns partially deleted volumes too.

getAllVolumesImages differentiates between legal and remnants.
Added getAllRemnants for garbage detection.

Related to: BZ#905938, BZ#910013, BZ#875708

Change-Id: Ib8514236a5d4793f66709e9daf546fb46047414f
Signed-off-by: Eduardo <[email protected]>
---
M vdsm/storage/blockSD.py
1 file changed, 33 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/46/12546/1

diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index 35282e5..4a00cec 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -171,11 +171,15 @@
         res[volName]['parent'] = parentVol
         if vImg not in res[volName]['imgs']:
             res[volName]['imgs'].insert(0, vImg)
-        if (parentVol != sd.BLANK_UUID and
-                not volName.startswith(
-                    sd.REMOVED_IMAGE_PREFIX) and
-                vImg not in res[parentVol]['imgs']):
-            res[parentVol]['imgs'].append(vImg)
+        if parentVol != sd.BLANK_UUID:
+            try:
+                newImg = vImg not in res[parentVol]['imgs']
+            except KeyError:
+                log.warning("Orphan volume %s/%s: img: %s, parent %s",
+                            sdUUID, volName, vImg, parentVol)
+            else:
+                if newImg:
+                    res[parentVol]['imgs'].append(vImg)
 
     return dict((k, sd.ImgsPar(tuple(v['imgs']), v['parent']))
                 for k, v in res.iteritems())
@@ -1003,15 +1007,34 @@
         zeroImgVolumes(sdUUID, imgUUID, toZero)
         self.rmDCImgDir(imgUUID, volsImgs)
 
-    def getAllVolumes(self):
+    def getAllVolumesImages(self):
         """
         Return all the images that depend on a volume.
 
-        TODO: rename to getAllVolumeImages.
-
-        Return dict {volUUID: ([imgUUID1, imgUUID2], parentUUID)]}.
+        Return dicts:
+        vols = {volUUID: ([imgUUID1, imgUUID2], parentUUID)]}
+        for complete images.
+        remnants (same) for broken imgs, orphan volumes, etc.
         """
-        return getAllVolumes(self.sdUUID)
+        vols = {}  # The "legal" volumes: not half deleted/removed volumes.
+        remnants = {}  # vols belongs to a partially deleted imgs
+        allVols = getAllVolumes(self.sdUUID)
+        for volName, ip in allVols.iteritems():
+            images, parent = ip
+            if (volName.startswith(sd.REMOVED_IMAGE_PREFIX) or
+                    ip.imgs[0].startswith(sd.REMOVED_IMAGE_PREFIX)):
+                        remnants[volName] = ip
+            else:
+                vols[volName] = ip
+        return vols, remnants
+
+    def getAllVolumes(self):
+        vols, rems = self.getAllVolumesImages()
+        return vols
+
+    def getAllRemnants(self):
+        vols, rems = self.getAllVolumesImages()
+        return rems
 
     def activateVolumes(self, volUUIDs):
         """


--
To view, visit http://gerrit.ovirt.org/12546
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib8514236a5d4793f66709e9daf546fb46047414f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Eduardo <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to