Eduardo has uploaded a new change for review.
Change subject: Decouple images and volumes from pool path ......................................................................
Decouple images and volumes from pool path
Change-Id: Ibde0becf2600ddf2390d12a4e854e1abbd3b1e40 Signed-off-by: Eduardo ewarszaw@redhat.com --- M vdsm/storage/fileSD.py M vdsm/storage/fileVolume.py M vdsm/storage/hsm.py M vdsm/storage/image.py M vdsm/storage/resourceFactories.py M vdsm/storage/sd.py M vdsm/storage/sp.py 7 files changed, 31 insertions(+), 34 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/55/16055/1
diff --git a/vdsm/storage/fileSD.py b/vdsm/storage/fileSD.py index d5ae707..039a2a0 100644 --- a/vdsm/storage/fileSD.py +++ b/vdsm/storage/fileSD.py @@ -325,12 +325,8 @@ Fetch the list of the Image UUIDs """ # Get Volumes of an image - pattern = os.path.join(self.storage_repository, - # ISO domains don't have images, - # we can assume single domain - self.getPools()[0], - self.sdUUID, sd.DOMAIN_IMAGES) - pattern = os.path.join(pattern, constants.UUID_GLOB_PATTERN) + imgsPath = os.path.join(self._getRepoPath(), sd.DOMAIN_IMAGES) + pattern = os.path.join(imgsPath, constants.UUID_GLOB_PATTERN) files = self.oop.glob.glob(pattern) imgList = [] for i in files: @@ -546,7 +542,7 @@ templateImage = tImgs[0] relinkImgs = tuple(tImgs[1:]) repoPath = self._getRepoPath() - basePath = os.path.join(repoPath, self.sdUUID, sd.DOMAIN_IMAGES) + basePath = os.path.join(repoPath, sd.DOMAIN_IMAGES) volFiles = [volUUID, volUUID + fileVolume.META_FILEEXT] if self.hasVolumeLeases(): volFiles.append(volUUID + fileVolume.LEASE_FILEEXT) diff --git a/vdsm/storage/fileVolume.py b/vdsm/storage/fileVolume.py index 8b0a33e..2706e52 100644 --- a/vdsm/storage/fileVolume.py +++ b/vdsm/storage/fileVolume.py @@ -355,8 +355,7 @@ not including the shared base (template) """ # Get Volumes of an image - pattern = os.path.join(repoPath, sdUUID, sd.DOMAIN_IMAGES, - imgUUID, "*.meta") + pattern = os.path.join(repoPath, sd.DOMAIN_IMAGES, imgUUID, "*.meta") files = oop.getProcessPool(sdUUID).glob.glob(pattern) volList = [] for i in files: diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py index 7b9ed70..df5ff6c 100644 --- a/vdsm/storage/hsm.py +++ b/vdsm/storage/hsm.py @@ -1485,8 +1485,7 @@ # we should use the new resource system to synchronize the process # an eliminate all race conditions if needFake: - img = image.Image(os.path.join(self.storage_repository, - spUUID)) + img = image.Image(dom.domaindir) tName = volsByImg.iterkeys()[0] tParams = dom.produceVolume(imgUUID, tName).getVolumeParams() img.createFakeTemplate(sdUUID=sdUUID, volParams=tParams) @@ -1556,8 +1555,8 @@ tImgUUID = e.absentTemplateImageUUID tParams = srcDom.produceVolume(tImgUUID, tName).getVolumeParams() - image.Image(os.path.join(self.storage_repository, spUUID) - ).createFakeTemplate(dstDom.sdUUID, tParams) + image.Image(dstDom.domaindir).createFakeTemplate(dstDom.sdUUID, + tParams)
domains = [srcDomUUID, dstDomUUID] domains.sort() @@ -1636,7 +1635,7 @@ tImgUUID = e.absentTemplateImageUUID tParams = srcDom.produceVolume(tImgUUID, tName).getVolumeParams() - image.Image(os.path.join(self.storage_repository, spUUID) + image.Image(dstDom.domaindir ).createFakeTemplate(dstDom.sdUUID, tParams)
domains = sorted([srcDomUUID, dstDomUUID]) @@ -3152,11 +3151,10 @@ """ vars.task.getSharedLock(STORAGE, sdUUID)
- img = image.Image(os.path.join(self.storage_repository, spUUID)) - imgVolumes = img.prepare(sdUUID, imgUUID, volUUID) - chain = [] dom = sdCache.produce(sdUUID=sdUUID) + img = image.Image(dom.domaindir) + imgVolumes = img.prepare(sdUUID, imgUUID, volUUID)
for vol in imgVolumes: volInfo = {'domainID': sdUUID, 'imageID': imgUUID, @@ -3194,7 +3192,8 @@ """ vars.task.getSharedLock(STORAGE, sdUUID)
- img = image.Image(os.path.join(self.storage_repository, spUUID)) + dom = sdCache.produce(sdUUID=sdUUID) + img = image.Image(dom.domaindir) img.teardown(sdUUID, imgUUID, volUUID)
@public @@ -3221,10 +3220,9 @@ images = [imgUUID]
uuidlist = [] - repoPath = os.path.join(self.storage_repository, spUUID) for img in images: uuidlist += (dom.getVolumeClass(). - getImageVolumes(repoPath, sdUUID, img)) + getImageVolumes(dom.domaindir, sdUUID, img)) self.log.info("List of volumes is %s", uuidlist) return dict(uuidlist=uuidlist)
diff --git a/vdsm/storage/image.py b/vdsm/storage/image.py index e2c28cd..c54894f 100644 --- a/vdsm/storage/image.py +++ b/vdsm/storage/image.py @@ -115,8 +115,7 @@ 'sdUUID' - storage domain UUID 'imgUUID' - image UUID """ - imageDir = os.path.join(self.repoPath, sdUUID, sd.DOMAIN_IMAGES, - imgUUID) + imageDir = os.path.join(self.repoPath, sd.DOMAIN_IMAGES, imgUUID) if not os.path.isdir(imageDir): self.log.info("Create placeholder %s for image's volumes", imageDir) @@ -131,7 +130,7 @@ """ Return image directory """ - return os.path.join(self.repoPath, sdUUID, sd.DOMAIN_IMAGES, imgUUID) + return os.path.join(self.repoPath, sd.DOMAIN_IMAGES, imgUUID)
def deletedVolumeName(self, uuid): """ diff --git a/vdsm/storage/resourceFactories.py b/vdsm/storage/resourceFactories.py index 98c362b..708cce7 100644 --- a/vdsm/storage/resourceFactories.py +++ b/vdsm/storage/resourceFactories.py @@ -18,7 +18,6 @@ # Refer to the README and COPYING files for full details of the license #
-import os from vdsm.config import config import logging import lvm @@ -96,7 +95,6 @@ """ This factory produce resources for images """ - storage_repository = config.get('irs', 'repository') # Resource timeouts are in seconds. It's written in ms in the config for # backward competability reasons resource_default_timeout = config.getint('irs', @@ -116,7 +114,7 @@ template = None dom = sdCache.produce(sdUUID=self.sdUUID) # Get the list of the volumes - repoPath = os.path.join(self.storage_repository, dom.getPools()[0]) + repoPath = dom.domaindir try: chain = image.Image(repoPath).getChain(sdUUID=self.sdUUID, imgUUID=resourceName) diff --git a/vdsm/storage/sd.py b/vdsm/storage/sd.py index 8c55c09..baba500 100644 --- a/vdsm/storage/sd.py +++ b/vdsm/storage/sd.py @@ -656,7 +656,7 @@ raise se.ImagesNotSupportedError()
# If it has a repo we don't have multiple domains. Assume single pool - return os.path.join(self.storage_repository, self.getPools()[0]) + return self.domaindir
def getIsoDomainImagesDir(self): """ diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py index 052bbf0..83a1f2b 100644 --- a/vdsm/storage/sp.py +++ b/vdsm/storage/sp.py @@ -1759,7 +1759,8 @@ rmanager.acquireResource(dstImageResourcesNamespace, dstImgUUID, rm.LockType.exclusive) ): - dstUUID = image.Image(self.poolPath).copy( + dom = sdCache.produce(sdUUID=sdUUID) + dstUUID = image.Image(dom.domaindir).copy( sdUUID, vmUUID, srcImgUUID, srcVolUUID, dstImgUUID, dstVolUUID, descr, dstSdUUID, volType, volFormat, preallocate, postZero, force) @@ -1806,7 +1807,8 @@ imgUUID, srcLock), rmanager.acquireResource(dstImageResourcesNamespace, imgUUID, rm.LockType.exclusive)): - image.Image(self.poolPath).move(srcDomUUID, dstDomUUID, imgUUID, + dom = sdCache.produce(sdUUID=srcDomUUID) + image.Image(dom.domaindir).move(srcDomUUID, dstDomUUID, imgUUID, vmUUID, op, postZero, force)
def cloneImageStructure(self, sdUUID, imgUUID, dstSdUUID): @@ -1833,7 +1835,8 @@ )))
with nested(*resList): - image.Image(self.poolPath).cloneStructure( + dom = sdCache.produce(sdUUID=sdUUID) + image.Image(dom.domaindir).cloneStructure( sdUUID, imgUUID, dstSdUUID)
def syncImageData(self, sdUUID, imgUUID, dstSdUUID, syncType): @@ -1861,7 +1864,8 @@ )))
with nested(*resList): - image.Image(self.poolPath).syncData( + dom = sdCache.produce(sdUUID=sdUUID) + image.Image(dom.domaindir).syncData( sdUUID, imgUUID, dstSdUUID, syncType)
def moveMultipleImages(self, srcDomUUID, dstDomUUID, imgDict, vmUUID, @@ -1899,7 +1903,8 @@ dstImageResourcesNamespace, imgUUID, rm.LockType.exclusive))
with nested(*resourceList): - image.Image(self.poolPath).multiMove( + dom = sdCache.produce(sdUUID=srcDomUUID) + image.Image(dom.domaindir).multiMove( srcDomUUID, dstDomUUID, imgDict, vmUUID, force)
def mergeSnapshots(self, sdUUID, vmUUID, imgUUID, ancestor, successor, @@ -1925,7 +1930,8 @@
with rmanager.acquireResource(imageResourcesNamespace, imgUUID, rm.LockType.exclusive): - image.Image(self.poolPath).merge( + dom = sdCache.produce(sdUUID=sdUUID) + image.Image(dom.domaindir).merge( sdUUID, vmUUID, imgUUID, ancestor, successor, postZero)
def createVolume(self, sdUUID, imgUUID, size, volFormat, preallocate, @@ -2097,7 +2103,8 @@ self.log.warning("SP %s SD %s img %s Vol %s - teardown failed")
def validateVolumeChain(self, sdUUID, imgUUID): - image.Image(self.poolPath).validateVolumeChain(sdUUID, imgUUID) + dom = sdCache.produce(sdUUID=sdUUID) + image.Image(dom.domaindir).validateVolumeChain(sdUUID, imgUUID)
def extendSD(self, sdUUID, devlist, force): sdCache.produce(sdUUID).extend(devlist, force)
oVirt Jenkins CI Server has posted comments on this change.
Change subject: [WIP] Decouple images and volumes from pool path ......................................................................
Patch Set 2: Fails
Build Failed
http://jenkins.ovirt.org/job/vdsm_pep8_gerrit/2909/ : SUCCESS
http://jenkins.ovirt.org/job/vdsm_unit_tests_gerrit_el/2098/ : SUCCESS
http://jenkins.ovirt.org/job/vdsm_unit_tests_gerrit/2986/ : FAILURE
Sandro Bonazzola has posted comments on this change.
Change subject: [WIP] Decouple images and volumes from pool path ......................................................................
Patch Set 2:
Eduardo, can you rebase this patch?
Eduardo has posted comments on this change.
Change subject: [WIP] Decouple images and volumes from pool path ......................................................................
Patch Set 2:
Hi Sandro,
This patch was a temporal one, please use the series finished by: http://gerrit.ovirt.org/4220
Please pass pool=BLANK, sd, image, volume dict when starting the Vm. Thanks.
Itamar Heim has posted comments on this change.
Change subject: [WIP] Decouple images and volumes from pool path ......................................................................
Patch Set 2:
ping
Itamar Heim has abandoned this change.
Change subject: [WIP] Decouple images and volumes from pool path ......................................................................
Abandoned
abandoning per no reply. please restore if still relevant.
vdsm-patches@lists.fedorahosted.org