Blob Blame History Raw
From 37334a9b538fdb7af6e2d49eea5f7bd7bedd82b4 Mon Sep 17 00:00:00 2001
From: Eduardo Warszawski <ewarszaw@redhat.com>
Date: Mon, 18 Feb 2013 18:14:31 +0200
Subject: [PATCH 36/36] Do not delete the template when zeroing a dependant
 image.

Change-Id: I9e472334efa9dadb5389db70b0953f88b9be858a
Bug-url: https://bugzilla.redhat.com/show_bug.cgi?id=910013
Signed-off-by: Eduardo <ewarszaw@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/12178
Tested-by: Haim Ateya <hateya@redhat.com>
Reviewed-by: Dan Kenigsberg <danken@redhat.com>
Reviewed-by: Yeela Kaplan <ykaplan@redhat.com>
Reviewed-by: Ayal Baron <abaron@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/13028
Tested-by: Federico Simoncelli <fsimonce@redhat.com>
---
 vdsm/storage/blockSD.py | 12 +++++++++---
 vdsm/storage/hsm.py     |  2 +-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index 862e413..e66256d 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -945,14 +945,20 @@ class BlockStorageDomain(sd.StorageDomain):
             self.log.debug("removed image dir: %s", imgPath)
         return imgPath
 
+    def _getImgExclusiveVols(self, imgUUID, volsImgs):
+        """Filter vols belonging to imgUUID only."""
+        exclusives = dict((vName, v) for vName, v in volsImgs.iteritems()
+                          if v.imgs[0] == imgUUID)
+        return exclusives
+
     def deleteImage(self, sdUUID, imgUUID, volsImgs):
-        toDel = tuple(vName for vName, v in volsImgs.iteritems()
-                                                    if v.imgs[0] == imgUUID)
+        toDel = self._getImgExclusiveVols(imgUUID, volsImgs)
         deleteVolumes(sdUUID, toDel)
         self.rmDCImgDir(imgUUID, volsImgs)
 
     def zeroImage(self, sdUUID, imgUUID, volsImgs):
-        zeroImgVolumes(sdUUID, imgUUID, volsImgs)
+        toZero = self._getImgExclusiveVols(imgUUID, volsImgs)
+        zeroImgVolumes(sdUUID, imgUUID, toZero)
         self.rmDCImgDir(imgUUID, volsImgs)
 
     def getAllVolumes(self):
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 8bbe3b8..32a32c9 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -1455,7 +1455,7 @@ class HSM:
             # postZero implies block domain. Backup domains are always NFS
             # hence no need to create fake template if postZero is true.
             self._spmSchedule(spUUID, "zeroImage_%s" % imgUUID, dom.zeroImage,
-                              sdUUID, imgUUID, volsByImg.keys())
+                              sdUUID, imgUUID, volsByImg)
         else:
             dom.deleteImage(sdUUID, imgUUID, volsByImg)
             # This is a hack to keep the interface consistent
-- 
1.8.1.4