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

Reply via email to