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(a)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)
--
To view, visit
http://gerrit.ovirt.org/16055
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibde0becf2600ddf2390d12a4e854e1abbd3b1e40
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Eduardo <ewarszaw(a)redhat.com>
Gerrit-Reviewer: Ayal Baron <abaron(a)redhat.com>