def invalidate(self): """ Make sure that storage domain is inaccessible. 1. Make sure master LV is not mounted 2. Deactivate all the volumes from the underlying VG 3. Destroy any possible dangling maps left in device mapper """ try: self.unmountMaster() except se.StorageDomainMasterUnmountError: self.log.warning("Unable to unmount master LV during invalidateSD") except se.CannotDeactivateLogicalVolume: # It could be that at this point there is no LV, so just ignore it pass except Exception: # log any other exception, but keep going self.log.error("Unexpected error", exc_info=True) # FIXME: remove this and make sure nothing breaks try: lvm.deactivateVG(self.sdUUID) except Exception: # log any other exception, but keep going self.log.error("Unexpected error", exc_info=True) fileUtils.cleanupdir(os.path.join("/dev", self.sdUUID))
def format(cls, sdUUID): """Format detached storage domain. This removes all data from the storage domain. """ # Remove the directory tree try: domaindir = cls.findDomainPath(sdUUID) except (se.StorageDomainDoesNotExist): pass else: fileUtils.cleanupdir(domaindir, ignoreErrors=True) # Remove special metadata and service volumes # Remove all volumes LV if exists _removeVMSfs(lvm.lvPath(sdUUID, MASTERLV)) try: lvs = lvm.getLV(sdUUID) except se.LogicalVolumeDoesNotExistError: lvs = () # No LVs in this VG (domain) for lv in lvs: # Fix me: Should raise and get resource lock. try: lvm.removeLVs(sdUUID, lv.name) except se.CannotRemoveLogicalVolume as e: cls.log.warning("Remove logical volume failed %s/%s %s", sdUUID, lv.name, str(e)) lvm.removeVG(sdUUID) return True
def createImageRollback(cls, taskObj, imageDir): """ Remove empty image folder """ cls.log.info("createImageRollback: imageDir=%s" % (imageDir)) if os.path.exists(imageDir): if not len(os.listdir(imageDir)): fileUtils.cleanupdir(imageDir) else: cls.log.error("createImageRollback: Cannot remove dirty image " "folder %s" % (imageDir))
def createVolumeRollback(cls, taskObj, repoPath, sdUUID, imgUUID, volUUID, imageDir): cls.log.info("createVolumeRollback: repoPath=%s sdUUID=%s imgUUID=%s " "volUUID=%s imageDir=%s" % (repoPath, sdUUID, imgUUID, volUUID, imageDir)) vol = sdCache.produce(sdUUID).produceVolume(imgUUID, volUUID) pvol = vol.getParentVolume() # Remove volume vol.delete(postZero=False, force=True) if len(cls.getImageVolumes(repoPath, sdUUID, imgUUID)): # Don't remove the image folder itself return if not pvol or pvol.isShared(): # Remove image folder with all leftovers if os.path.exists(imageDir): fileUtils.cleanupdir(imageDir)