Liron Aravot has uploaded a new change for review. Change subject: introducing allocateVolume ......................................................................
introducing allocateVolume Change-Id: Ide8e452d5706bd2874a441d14a1ac50c1187933f Signed-off-by: Liron Aravot <lara...@redhat.com> --- M client/vdsClient.py M vdsm/API.py M vdsm/rpc/BindingXMLRPC.py M vdsm/storage/fileVolume.py M vdsm/storage/hsm.py M vdsm/storage/sd.py M vdsm/storage/sp.py M vdsm/storage/volume.py 8 files changed, 54 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/86/37586/1 diff --git a/client/vdsClient.py b/client/vdsClient.py index 07dbaa2..cf6b23a 100644 --- a/client/vdsClient.py +++ b/client/vdsClient.py @@ -1037,6 +1037,14 @@ print "\t%s = %s" % (element, info['dominfo'][element]) return 0, '' + def allocateVolume(self, args): + spUUID, sdUUID, imgUUID, volUUID, size = args + status = self.s.allocateVolume( + spUUID, sdUUID, imgUUID, volUUID, size) + if status['status']['code']: + return status['status']['code'], status['status']['message'] + return 0, '' + def createVolume(self, args): sdUUID = args[0] spUUID = args[1] @@ -2431,6 +2439,10 @@ 'Get storage domains list of pool or all ' 'domains if pool omitted.' )), + 'allocateVolume': (serv.allocateVolume, ( + '<spUUID> <sdUUID> <imgUUID> <volUUID> <size>', + 'Allocates a volume.', + )), 'createVolume': (serv.createVolume, ('<sdUUID> <spUUID> <imgUUID> <size> <volFormat> ' '<preallocate> <diskType> <newVolUUID> <descr> ' diff --git a/vdsm/API.py b/vdsm/API.py index c23b94d..aa730e6 100644 --- a/vdsm/API.py +++ b/vdsm/API.py @@ -793,6 +793,10 @@ preallocate, diskType, self._UUID, desc, srcImgUUID, srcVolUUID) + def allocate(self, size): + return self._irs.allocateVolume(self._sdUUID, self._spUUID, + self._imgUUID, self._UUID, size) + def delete(self, postZero, force): return self._irs.deleteVolume(self._sdUUID, self._spUUID, self._imgUUID, [self._UUID], postZero, diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py index b01b661..cd96761 100644 --- a/vdsm/rpc/BindingXMLRPC.py +++ b/vdsm/rpc/BindingXMLRPC.py @@ -856,6 +856,10 @@ return volume.create(size, volFormat, preallocate, diskType, desc, srcImgUUID, srcVolUUID) + def allocateVolume(self, sdUUID, spUUID, imgUUID, volUUID, size): + volume = API.Volume(volUUID, spUUID, sdUUID, imgUUID) + return volume.allocate(size) + def volumeExtendSize(self, spUUID, sdUUID, imgUUID, volUUID, newSize): volume = API.Volume(volUUID, spUUID, sdUUID, imgUUID) return volume.extendSize(newSize) @@ -1098,6 +1102,7 @@ (self.taskStop, 'stopTask'), (self.volumeCopy, 'copyImage'), (self.volumeCreate, 'createVolume'), + (self.allocateVolume, 'allocateVolume'), (self.volumeExtendSize, 'extendVolumeSize'), (self.volumeGetInfo, 'getVolumeInfo'), (self.volumeGetSize, 'getVolumeSize'), diff --git a/vdsm/storage/fileVolume.py b/vdsm/storage/fileVolume.py index 20573bd..3f3d86d 100644 --- a/vdsm/storage/fileVolume.py +++ b/vdsm/storage/fileVolume.py @@ -97,6 +97,19 @@ if oop.getProcessPool(sdUUID).os.path.lexists(metaPath): oop.getProcessPool(sdUUID).os.unlink(metaPath) + def allocate(self, size): + volPath = os.path.join(self.imagePath, self.volUUID) + if self.getVolType() == volume.PREALLOCATED_VOL: + try: + # ddWatchCopy expects size to be in bytes + misc.ddWatchCopy("/dev/zero", volPath, + vars.task.aborting, size) + except ActionStopped: + raise + except Exception: + cls.log.error("Unexpected error", exc_info=True) + raise se.VolumesZeroingError(volPath) + @classmethod def _create(cls, dom, imgUUID, volUUID, size, volFormat, preallocate, volParent, srcImgUUID, srcVolUUID, volPath): diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py index 8c75277..900b315 100644 --- a/vdsm/storage/hsm.py +++ b/vdsm/storage/hsm.py @@ -1431,6 +1431,16 @@ return dict(vmlist=vms) @public + def allocateVolume(self, sdUUID, spUUID, imgUUID, volUUID, size): + dom = sdCache.produce(sdUUID=sdUUID) + misc.validateUUID(imgUUID, 'imgUUID') + misc.validateUUID(volUUID, 'volUUID') + size = misc.validateN(size, "size") + pool = self.getPool(spUUID) + self._spmSchedule(spUUID, "allocateVolume", pool.allocateVolume, + sdUUID, imgUUID, volUUID, size) + + @public def createVolume(self, sdUUID, spUUID, imgUUID, size, volFormat, preallocate, diskType, volUUID, desc, srcImgUUID=volume.BLANK_UUID, diff --git a/vdsm/storage/sd.py b/vdsm/storage/sd.py index a771abf..f385837 100644 --- a/vdsm/storage/sd.py +++ b/vdsm/storage/sd.py @@ -429,6 +429,9 @@ self._getRepoPath(), self.sdUUID, imgUUID, size, volFormat, preallocate, diskType, volUUID, desc, srcImgUUID, srcVolUUID) + def allocateVolume(self, imgUUID, size, volUUID): + return self.produceVolume(imgUUID, volUUID).allocate(size) + def getMDPath(self): if self.domaindir: return os.path.join(self.domaindir, DOMAIN_META_DATA) diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py index 34a8fbf..0c67021 100644 --- a/vdsm/storage/sp.py +++ b/vdsm/storage/sp.py @@ -1791,6 +1791,10 @@ image.Image(self.poolPath).merge( sdUUID, vmUUID, imgUUID, ancestor, successor, postZero) + def allocateVolume(self, sdUUID, imgUUID, volUUID, size): + return sdCache.produce(sdUUID) \ + .produceVolume(imgUUID, volUUID).allocate(size) + def createVolume(self, sdUUID, imgUUID, size, volFormat, preallocate, diskType, volUUID=None, desc="", srcImgUUID=volume.BLANK_UUID, diff --git a/vdsm/storage/volume.py b/vdsm/storage/volume.py index 980b6e3..6156187 100644 --- a/vdsm/storage/volume.py +++ b/vdsm/storage/volume.py @@ -544,6 +544,9 @@ sdCache.produce(sdUUID) \ .produceVolume(imgUUID, volUUID).syncMetadata() + def allocate(self, size): + pass + def extendSize(self, newSize): """ Extend the size (virtual disk size seen by the guest) of the volume. -- To view, visit http://gerrit.ovirt.org/37586 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ide8e452d5706bd2874a441d14a1ac50c1187933f Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches