Change in vdsm[master]: adding StorageDomain.removeVmData()

laravot at redhat.com laravot at redhat.com
Thu Feb 25 16:35:20 UTC 2016


Liron Aravot has uploaded a new change for review.

Change subject: adding StorageDomain.removeVmData()
......................................................................

adding StorageDomain.removeVmData()

Change-Id: Ic964ac5c9cb57df881b895356a203529ab2a171a
Signed-off-by: laravot at redhat.com <laravot at redhat.com>
---
M client/vdsClient.py
M vdsm/API.py
M vdsm/rpc/BindingXMLRPC.py
M vdsm/rpc/vdsmapi-schema.json
M vdsm/storage/hsm.py
M vdsm/storage/sp.py
6 files changed, 90 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/03/43103/2

diff --git a/client/vdsClient.py b/client/vdsClient.py
index 9c42228..2ddb536 100755
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -978,6 +978,15 @@
             return res['status']['code'], res['status']['message']
         return 0, ''
 
+    def removeStorageDomainVmData(self, args):
+        spUUID = args[0]
+        vmUUID = args[1]
+        sdUUID = args[2]
+        res = self.s.removeStorageDomainVmData(sdUUID, spUUID, vmUUID)
+        if res['status']['code']:
+            return res['status']['code'], res['status']['message']
+        return 0, ''
+
     def _parseDomainsMap(self, domMapString):
         """
         Parse domains map string: "sdUUID1=status1,sdUUID2=status2,..."
diff --git a/vdsm/API.py b/vdsm/API.py
index 73f1a1f..0748598 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -1062,6 +1062,10 @@
         return self._irs.updateStorageDomainVmData(self._UUID, storagepoolID,
                                                    vmID, vmData)
 
+    def removeVMData(self, storagepoolID, vmID):
+        return self._irs.removeStorageDomainVmData(self._UUID, storagepoolID,
+                                                   vmID)
+
     def validate(self):
         return self._irs.validateStorageDomain(self._UUID)
 
diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py
index 0ab159f..d227d7f 100644
--- a/vdsm/rpc/BindingXMLRPC.py
+++ b/vdsm/rpc/BindingXMLRPC.py
@@ -644,6 +644,10 @@
         domain = API.StorageDomain(sdUUID)
         return domain.updateVMData(spUUID, vmUUID, vmData)
 
+    def domainRemoveVMData(self, sdUUID, spUUID, vmUUID):
+        domain = API.StorageDomain(sdUUID)
+        return domain.removeVMData(spUUID, vmUUID)
+
     def domainDetachAnyStoragePoolHsm(self, sdUUID, hostID):
         domain = API.StorageDomain(sdUUID)
         return domain.detachAnyStoragePoolHsm(sdUUID, hostID)
@@ -1106,7 +1110,8 @@
                 (self.domainGetBackedUpVmsInfo,
                     'getStorageDomainBackedUpVmsInfo'),
                 (self.domainActivateHsm, 'activateStorageDomainHsm'),
-                (self.domainUpdateVMData, 'updateStorageDomainVmData'))
+                (self.domainUpdateVMData, 'updateStorageDomainVmData'),
+                (self.domainRemoveVMData, 'removeStorageDomainVmData'))
 
     def getIrsMethods(self):
         return ((self.domainActivate, 'activateStorageDomain'),
diff --git a/vdsm/rpc/vdsmapi-schema.json b/vdsm/rpc/vdsmapi-schema.json
index 2173ac2..dee5e09 100644
--- a/vdsm/rpc/vdsmapi-schema.json
+++ b/vdsm/rpc/vdsmapi-schema.json
@@ -5051,6 +5051,23 @@
  'data': {'storagedomainID': 'UUID', 'storagepoolID': 'UUID',
           'vmID': 'UUID', 'vmData' : 'str'}}
 
+##
+# @StorageDomain.removeVMData:
+#
+# Remove a previously saved virtual machine definitio from a backup domain.
+#
+# @storagedomainID:  The backup Storage Domain id
+#
+# @storagepoolID:    The UUID of the Storage Pool
+#
+# @vmUUID:           The id of the VM
+#
+# Since: 4.18.0
+##
+{'command': {'class': 'StorageDomain', 'name': 'removeVMData'},
+ 'data': {'storagedomainID': 'UUID', 'storagepoolID': 'UUID',
+          'vmUUID': 'UUID'}}
+
 
 ##
 # @StorageDomainCreateArgumentsBlock:
@@ -6192,6 +6209,24 @@
  'data': {'storagepoolID': 'UUID', 'vmUUID': 'UUID',
           '*storagedomainID': 'UUID'}}
 
+
+##
+# @StoragePool.removeVM:
+#
+# Remove a previously saved virtual machine definition.
+#
+# @storagepoolID:    The UUID of the Storage Pool
+#
+# @vmUUID:           Remove the saved definition of the VM with this UUID
+#
+# @storagedomainID:  #optional The Storage Domain where the VM is stored
+#
+# Since: 4.10.0
+##
+{'command': {'class': 'StoragePool', 'name': 'removeVM'},
+ 'data': {'storagepoolID': 'UUID', 'vmUUID': 'UUID',
+          '*storagedomainID': 'UUID'}}
+
 ## Category: @Task ############################################################
 ##
 # @Task:
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 8302a52..346544a 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -1490,8 +1490,18 @@
         pool = self._prepareUpdateVM(spUUID, sdUUID)
         pool.updateVMHSM(sdUUID, vmUUID, vmData)
 
+    def _prepareRemoveVm(self, spUUID, sdUUID, vmUUID):
+        vars.task.getSharedLock(STORAGE, spUUID)
+        pool = self.getPool(spUUID)
+        if not sdUUID or sdUUID == sd.BLANK_UUID:
+            sdUUID = pool.masterDomain.sdUUID
+
+        vars.task.getSharedLock(STORAGE, "vms_" + sdUUID)
+        vars.task.getExclusiveLock(STORAGE, "vms_%s_%s" % (vmUUID, sdUUID))
+        return pool
+
     @public
-    def removeVM(self, spUUID, vmUUID, sdUUID=None, options=None):
+    def removeVM(self, spUUID, sdUUID, vmUUID):
         """
         Removes a VM list from a storage pool or from a Backup domain.
 
@@ -1505,16 +1515,31 @@
         :type sdUUID: UUID
         :param options: ?
         """
-        vars.task.getSharedLock(STORAGE, spUUID)
-        pool = self.getPool(spUUID)
-        if not sdUUID or sdUUID == sd.BLANK_UUID:
-            sdUUID = pool.masterDomain.sdUUID
-
-        vars.task.getSharedLock(STORAGE, "vms_" + sdUUID)
-        vars.task.getExclusiveLock(STORAGE, "vms_%s_%s" % (vmUUID, sdUUID))
+        pool = self._prepareRemoveVm(spUUID, sdUUID, vmUUID)
         pool.removeVM(vmUUID=vmUUID, sdUUID=sdUUID)
 
     @public
+    def removeStorageDomainVmData(self, sdUUID, spUUID, vmUUID):
+        """
+        Updates a VM in a Backup domain.
+        Creates the VM data file if it does not exist.
+
+        :param spUUID: The UUID of the storage pool that the target domain
+                       is attached to.
+        :type spUUID: UUID
+        :param sdUUID: The UUID of the backup domain you want to update the vm
+                       data in.
+        :type sdUUID: UUID
+        :param vmUUID: The UUID of the vm whose data is being updated.
+        :type vm: UUID
+        :param vmData: The updated vm data.
+        :type vmData: str
+        """
+        self.validateBackupDom(sdUUID)
+        pool = self._prepareRemoveVm(spUUID, sdUUID)
+        pool.removeVMHsm(sdUUID, vmUUID)
+
+    @public
     def getVmsList(self, spUUID, sdUUID=None, options=None):
         """
         Gets a list of VMs from the pool.
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index 58de8ac..a8c3d47 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1398,11 +1398,13 @@
         self._removeVM(vmUUID, sdUUID)
 
     @unsecured
-    def removeVMHsm(self, vmUUID, sdUUID):
+    def removeVMHsm(self, sdUUID, vmUUID):
         """
         Remove VM.
          'vmUUID' - Virtual machine UUID
+         'sdUUID' - The storage domain id
         """
+        self.validateNoSpm()
         self.validatePoolSD(sdUUID)
         self._removeVM(vmUUID, sdUUID)
 


-- 
To view, visit https://gerrit.ovirt.org/43103
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic964ac5c9cb57df881b895356a203529ab2a171a
Gerrit-PatchSet: 2
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Liron Aravot <laravot at redhat.com>
Gerrit-Reviewer: Jenkins CI RO
Gerrit-Reviewer: Liron Aravot <laravot at redhat.com>
Gerrit-Reviewer: gerrit-hooks <automation at ovirt.org>


More information about the vdsm-patches mailing list