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

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


Liron Aravot has uploaded a new change for review.

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

adding StorageDomain.removeVmData()

Change-Id: Ic53b19a43850341ee488b50fbb339fdf68c1a048
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, 106 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/54/43154/4

diff --git a/client/vdsClient.py b/client/vdsClient.py
index 6169be7..e2123e1 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 3703d69..ca37aff 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -1063,6 +1063,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 c6fb25d..9ee5cdd 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)
@@ -1104,7 +1108,8 @@
                 (self.domainGetStoredVmsInfo, 'getStorageDomainStoredVmsInfo'),
                 (self.domainUpgradeVersion, 'upgradeStorageDomainVersion'),
                 (self.domainUpdateVMData, 'updateStorageDomainVmData'),
-                (self.domainActivateHsm, 'activateStorageDomainHsm'))
+                (self.domainActivateHsm, 'activateStorageDomainHsm'),
+                (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 d65ae22..afbd960 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 db82566..dda8895 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, vmUUID)
+        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 f6e03f8..76640b1 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1447,6 +1447,25 @@
          'vmUUID' - Virtual machine UUID
         """
         self.validatePoolSD(sdUUID)
+        self._removeVM(vmUUID, sdUUID)
+
+    @unsecured
+    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)
+
+    @unsecured
+    def _removeVM(self, vmUUID, sdUUID):
+        """
+        Remove VM.
+         'vmUUID' - Virtual machine UUID
+        """
         self.log.info("spUUID=%s vmUUID=%s sdUUID=%s", self.spUUID, vmUUID,
                       sdUUID)
         vms = self._getVMsPath(sdUUID)


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic53b19a43850341ee488b50fbb339fdf68c1a048
Gerrit-PatchSet: 4
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