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
