Change in vdsm[master]: StorageDomainManifest: deleteImage and deps

alitke at redhat.com alitke at redhat.com
Fri Jun 12 09:59:37 UTC 2015


Adam Litke has uploaded a new change for review.

Change subject: StorageDomainManifest: deleteImage and deps
......................................................................

StorageDomainManifest: deleteImage and deps

Change-Id: I7e418262d70ed50b45fdddf2fc77eb80a03a3811
Signed-off-by: Adam Litke <alitke at redhat.com>
---
M vdsm/storage/blockSD.py
M vdsm/storage/fileSD.py
M vdsm/storage/sd.py
3 files changed, 98 insertions(+), 85 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/68/42268/1

diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py
index caa7baf..273cf51 100644
--- a/vdsm/storage/blockSD.py
+++ b/vdsm/storage/blockSD.py
@@ -570,6 +570,64 @@
             newsize = self.metaSize(self.sdUUID)
             lvm.extendLV(self.sdUUID, sd.METADATA, newsize)
 
+    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 _markForDelVols(self, sdUUID, imgUUID, volUUIDs, opTag):
+        """
+        Mark volumes that will be zeroed or removed.
+
+        Mark for delete just in case that lvremove [lvs] success partialy.
+        Mark for zero just in case that zero process is interrupted.
+
+        Tagging is preferable to rename since it can be done in a single lvm
+        operation and is resilient to open LVs, etc.
+        """
+        try:
+            lvm.changelv(sdUUID, volUUIDs,
+                         (("-a", "y"),
+                          ("--deltag", blockVolume.TAG_PREFIX_IMAGE + imgUUID),
+                          ("--addtag", blockVolume.TAG_PREFIX_IMAGE +
+                          opTag + imgUUID)))
+        except se.StorageException as e:
+            log.error("Can't activate or change LV tags in SD %s. "
+                      "failing Image %s %s operation for vols: %s. %s",
+                      sdUUID, imgUUID, opTag, volUUIDs, e)
+            raise
+
+    def _rmDCVolLinks(self, imgPath, volsImgs):
+        for vol in volsImgs:
+            lPath = os.path.join(imgPath, vol)
+            removedPaths = []
+            try:
+                os.unlink(lPath)
+            except OSError as e:
+                self.log.warning("Can't unlink %s. %s", lPath, e)
+            else:
+                removedPaths.append(lPath)
+        self.log.debug("removed: %s", removedPaths)
+        return tuple(removedPaths)
+
+    def rmDCImgDir(self, imgUUID, volsImgs):
+        imgPath = os.path.join(self.domaindir, sd.DOMAIN_IMAGES, imgUUID)
+        self._rmDCVolLinks(imgPath, volsImgs)
+        try:
+            os.rmdir(imgPath)
+        except OSError:
+            self.log.warning("Can't rmdir %s", imgPath, exc_info=True)
+        else:
+            self.log.debug("removed image dir: %s", imgPath)
+        return imgPath
+
+    def deleteImage(self, sdUUID, imgUUID, volsImgs):
+        toDel = self._getImgExclusiveVols(imgUUID, volsImgs)
+        self._markForDelVols(sdUUID, imgUUID, toDel, sd.REMOVED_IMAGE_PREFIX)
+        deleteVolumes(sdUUID, toDel)
+        self.rmDCImgDir(imgUUID, volsImgs)
+
 
 class BlockStorageDomain(sd.StorageDomain):
     manifestClass = BlockStorageDomainManifest
@@ -972,62 +1030,14 @@
             images.update(imgs)
         return images
 
-    def rmDCVolLinks(self, imgPath, volsImgs):
-        for vol in volsImgs:
-            lPath = os.path.join(imgPath, vol)
-            removedPaths = []
-            try:
-                os.unlink(lPath)
-            except OSError as e:
-                self.log.warning("Can't unlink %s. %s", lPath, e)
-            else:
-                removedPaths.append(lPath)
-        self.log.debug("removed: %s", removedPaths)
-        return tuple(removedPaths)
-
     def rmDCImgDir(self, imgUUID, volsImgs):
-        imgPath = os.path.join(self.domaindir, sd.DOMAIN_IMAGES, imgUUID)
-        self.rmDCVolLinks(imgPath, volsImgs)
-        try:
-            os.rmdir(imgPath)
-        except OSError:
-            self.log.warning("Can't rmdir %s", imgPath, exc_info=True)
-        else:
-            self.log.debug("removed image dir: %s", imgPath)
-        return imgPath
+        return self._manifest.rmDCImgDir(imgUUID, volsImgs)
 
     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
+        return self._manifest._getImgExclusiveVols(imgUUID, volsImgs)
 
     def __markForDelVols(self, sdUUID, imgUUID, volUUIDs, opTag):
-        """
-        Mark volumes that will be zeroed or removed.
-
-        Mark for delete just in case that lvremove [lvs] success partialy.
-        Mark for zero just in case that zero process is interrupted.
-
-        Tagging is preferable to rename since it can be done in a single lvm
-        operation and is resilient to open LVs, etc.
-        """
-        try:
-            lvm.changelv(sdUUID, volUUIDs, (("-a", "y"),
-                         ("--deltag", blockVolume.TAG_PREFIX_IMAGE + imgUUID),
-                         ("--addtag", blockVolume.TAG_PREFIX_IMAGE +
-                          opTag + imgUUID)))
-        except se.StorageException as e:
-            log.error("Can't activate or change LV tags in SD %s. "
-                      "failing Image %s %s operation for vols: %s. %s",
-                      sdUUID, imgUUID, opTag, volUUIDs, e)
-            raise
-
-    def deleteImage(self, sdUUID, imgUUID, volsImgs):
-        toDel = self._getImgExclusiveVols(imgUUID, volsImgs)
-        self.__markForDelVols(sdUUID, imgUUID, toDel, sd.REMOVED_IMAGE_PREFIX)
-        deleteVolumes(sdUUID, toDel)
-        self.rmDCImgDir(imgUUID, volsImgs)
+        return self._manifest._markForDelVols(sdUUID, imgUUID, volUUIDs, opTag)
 
     def zeroImage(self, sdUUID, imgUUID, volsImgs):
         toZero = self._getImgExclusiveVols(imgUUID, volsImgs)
diff --git a/vdsm/storage/fileSD.py b/vdsm/storage/fileSD.py
index ff083cd..9f44342 100644
--- a/vdsm/storage/fileSD.py
+++ b/vdsm/storage/fileSD.py
@@ -179,6 +179,40 @@
     def getIdsFilePath(self):
         return os.path.join(self.getMDPath(), sd.IDS)
 
+    def getImagePath(self, imgUUID):
+        return os.path.join(self.domaindir, sd.DOMAIN_IMAGES, imgUUID)
+
+    def deleteImage(self, sdUUID, imgUUID, volsImgs):
+        currImgDir = self.getImagePath(imgUUID)
+        dirName, baseName = os.path.split(currImgDir)
+        toDelDir = os.path.join(dirName, sd.REMOVED_IMAGE_PREFIX + baseName)
+        self.log.debug("Renaming dir %s to %s", currImgDir, toDelDir)
+        try:
+            self.oop.os.rename(currImgDir, toDelDir)
+        except OSError as e:
+            self.log.error("image: %s can't be moved", currImgDir)
+            raise se.ImageDeleteError("%s %s" % (imgUUID, str(e)))
+        for volUUID in volsImgs:
+            volPath = os.path.join(toDelDir, volUUID)
+            try:
+                self.log.debug("Removing file: %s", volPath)
+                self.oop.os.remove(volPath)
+                metaFile = volPath + '.meta'
+                self.log.debug("Removing file: %s", metaFile)
+                self.oop.os.remove(metaFile)
+                leaseFile = volPath + '.lease'
+                self.log.debug("Removing file: %s", leaseFile)
+                self.oop.os.remove(leaseFile)
+            except OSError:
+                self.log.error("vol: %s can't be removed.",
+                               volPath, exc_info=True)
+        self.log.debug("Removing directory: %s", toDelDir)
+        try:
+            self.oop.os.rmdir(toDelDir)
+        except OSError as e:
+            self.log.error("removed image dir: %s can't be removed", toDelDir)
+            raise se.ImageDeleteError("%s %s" % (imgUUID, str(e)))
+
 
 class FileStorageDomain(sd.StorageDomain):
     manifestClass = FileStorageDomainManifest
@@ -373,40 +407,6 @@
             if self.oop.os.path.isdir(i):
                 images.add(os.path.basename(i))
         return images
-
-    def getImagePath(self, imgUUID):
-        return os.path.join(self.domaindir, sd.DOMAIN_IMAGES, imgUUID)
-
-    def deleteImage(self, sdUUID, imgUUID, volsImgs):
-        currImgDir = self.getImagePath(imgUUID)
-        dirName, baseName = os.path.split(currImgDir)
-        toDelDir = os.path.join(dirName, sd.REMOVED_IMAGE_PREFIX + baseName)
-        self.log.debug("Renaming dir %s to %s", currImgDir, toDelDir)
-        try:
-            self.oop.os.rename(currImgDir, toDelDir)
-        except OSError as e:
-            self.log.error("image: %s can't be moved", currImgDir)
-            raise se.ImageDeleteError("%s %s" % (imgUUID, str(e)))
-        for volUUID in volsImgs:
-            volPath = os.path.join(toDelDir, volUUID)
-            try:
-                self.log.debug("Removing file: %s", volPath)
-                self.oop.os.remove(volPath)
-                metaFile = volPath + '.meta'
-                self.log.debug("Removing file: %s", metaFile)
-                self.oop.os.remove(metaFile)
-                leaseFile = volPath + '.lease'
-                self.log.debug("Removing file: %s", leaseFile)
-                self.oop.os.remove(leaseFile)
-            except OSError:
-                self.log.error("vol: %s can't be removed.",
-                               volPath, exc_info=True)
-        self.log.debug("Removing directory: %s", toDelDir)
-        try:
-            self.oop.os.rmdir(toDelDir)
-        except OSError as e:
-            self.log.error("removed image dir: %s can't be removed", toDelDir)
-            raise se.ImageDeleteError("%s %s" % (imgUUID, str(e)))
 
     def zeroImage(self, sdUUID, imgUUID, volsImgs):
         self.log.warning("image %s on a fileSD %s won't be zeroed." %
diff --git a/vdsm/storage/sd.py b/vdsm/storage/sd.py
index c5dd224..873c8fa 100644
--- a/vdsm/storage/sd.py
+++ b/vdsm/storage/sd.py
@@ -404,6 +404,9 @@
     def getVSize(self, imgUUID, volUUID):
         return self._manifest.getVSize(imgUUID, volUUID)
 
+    def deleteImage(self, sdUUID, imgUUID, volsImgs):
+        self._manifest.deleteImage(sdUUID, imgUUID, volsImgs)
+
     def prepareMailbox(self):
         """
         This method has been introduced in order to prepare the mailbox


-- 
To view, visit https://gerrit.ovirt.org/42268
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7e418262d70ed50b45fdddf2fc77eb80a03a3811
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Adam Litke <alitke at redhat.com>


More information about the vdsm-patches mailing list