Adam Litke has uploaded a new change for review.
Change subject: Add wipeVolume API ......................................................................
Add wipeVolume API
Change-Id: I572099e1fee4ae847de95e27973405ba90b56a9b Signed-off-by: Adam Litke alitke@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/sdm/__init__.py 6 files changed, 70 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/28/40628/1
diff --git a/client/vdsClient.py b/client/vdsClient.py index bac146e..c267b75 100755 --- a/client/vdsClient.py +++ b/client/vdsClient.py @@ -1973,6 +1973,16 @@ else: return status['status']['code'], status['status']['message']
+ def wipeVolume(self, args): + if len(args) != 3: + raise ValueError('Wrong number of arguments') + sdUUID, imgUUID, volUUID = args + status = self.s.wipeVolume(sdUUID, imgUUID, volUUID) + if status['status']['code'] == 0: + return 0, '' + else: + return status['status']['code'], status['status']['message'] +
if __name__ == '__main__': if _glusterEnabled: diff --git a/vdsm/API.py b/vdsm/API.py index 6adefa8..a49448b 100644 --- a/vdsm/API.py +++ b/vdsm/API.py @@ -840,6 +840,9 @@ return self._irs.setVolumeLegality(self._sdUUID, self._spUUID, self._imgUUID, self._UUID, legality)
+ def wipe(self): + return self._irs.wipeVolume(self._sdUUID, self._imgUUID, self._UUID) +
class Image(APIBase): ctorArgs = ['imageID', 'storagepoolID', 'storagedomainID'] diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py index f110468..270f7a1 100644 --- a/vdsm/rpc/BindingXMLRPC.py +++ b/vdsm/rpc/BindingXMLRPC.py @@ -1004,6 +1004,10 @@ api = API.StorageDomain(sdUUID) return api.isolateVolume(srcImgUUID, dstImgUUID, volumeID)
+ def wipeVolume(self, sdUUID, imgUUID, volUUID): + volume = API.Volume(volUUID, None, sdUUID, imgUUID) + return volume.wipe() + def getGlobalMethods(self): return ((self.vmDestroy, 'destroy'), (self.vmCreate, 'create'), @@ -1156,7 +1160,8 @@ (self.volumeCreateContainer, 'createVolumeContainer'), (self.copyData, 'copyData'), (self.extendVolumeContainer, 'extendVolumeContainer'), - (self.isolateVolume, 'isolateVolume')) + (self.isolateVolume, 'isolateVolume'), + (self.wipeVolume, 'wipeVolume'))
def wrapApiMethod(f): diff --git a/vdsm/rpc/vdsmapi-schema.json b/vdsm/rpc/vdsmapi-schema.json index a76db8d..80b1968 100644 --- a/vdsm/rpc/vdsmapi-schema.json +++ b/vdsm/rpc/vdsmapi-schema.json @@ -8312,6 +8312,22 @@ 'legality': 'VolumeLegality'}}
## +# @Volume.wipe: +# +# Wipe a volume to ensure previous data is erased. +# +# @volumeID: The UUID of the Volume +# +# @storagedomainID: The Storage Domain associated with the Volume +# +# @imageID: The Image associated with the Volume +# +# Since: 4.18.0 +## +{'command': {'class': 'Volume', 'name': 'wipe'}, + 'data': {'volumeID': 'UUID', 'storagedomainID': 'UUID', 'imageID': 'UUID'}} + +## # @VM.setNumberOfCpus: # # Set the number CPUs for a VM diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py index 432c8f9..cb51cd1 100644 --- a/vdsm/storage/hsm.py +++ b/vdsm/storage/hsm.py @@ -3776,3 +3776,16 @@ misc.validateUUID(dstImgUUID, 'dstImgUUID') vars.task.getSharedLock(STORAGE, sdUUID) return sdm.isolateVolume(dom, srcImgUUID, dstImgUUID, volumeID) + + @public + def wipeVolume(self, sdUUID, imgUUID, volUUID): + argsStr = ("sdUUID=%s, imgUUID=%s, volUUID=%s" % + (sdUUID, imgUUID, volUUID)) + vars.task.setDefaultException(se.VolumesZeroingError(argsStr)) + misc.validateUUID(imgUUID, 'imgUUID') + misc.validateUUID(volUUID, 'volUUID') + vars.task.getSharedLock(STORAGE, sdUUID) + imageSpec = {'sdUUID': sdUUID, 'imgUUID': imgUUID, 'volUUID': volUUID} + with sdm.prepareCopy(imageSpec, False, 0, True): + self._sdmSchedule('wipeVolume', sdm.wipeVolume, sdUUID, imgUUID, + volUUID) diff --git a/vdsm/storage/sdm/__init__.py b/vdsm/storage/sdm/__init__.py index 4738813..2113d26 100644 --- a/vdsm/storage/sdm/__init__.py +++ b/vdsm/storage/sdm/__init__.py @@ -22,6 +22,7 @@ from contextlib import contextmanager, nested
from .. import image +from .. import misc from .. import resourceManager as rm from .. import sd from .. import storage_exception as se @@ -234,6 +235,27 @@ domain.releaseClusterLock()
+def wipeVolume(sdUUID, imgUUID, volUUID): + dom = sdCache.produce(sdUUID) + imageResourcesNamespace = sd.getNamespace(sdUUID, IMAGE_NAMESPACE) + try: + with rmanager.acquireResource(imageResourcesNamespace, + imgUUID, rm.LockType.exclusive): + vol = dom.produceVolume(imgUUID, volUUID) + size = vol.getVolumeSize(bs=1) + vol_path = vol.getVolumePath() + vol.prepare(rw=True, justme=True) + try: + vol.setLegality(volume.ILLEGAL_VOL) + misc.ddWatchCopy( + "/dev/zero", vol_path, vars.task.aborting, int(size)) + finally: + vol.tearDown(imgUUID, volUUID) + vol.setLegality(volume.LEGAL_VOL) + finally: + dom.releaseVolumeLease(imgUUID, volUUID) + + def garbageCollectStorageDomain(domain): if domain.isISO(): return
automation@ovirt.org has posted comments on this change.
Change subject: Add wipeVolume API ......................................................................
Patch Set 1:
* Update tracker::IGNORE, no Bug-Url found * Check Bug-Url::WARN, no bug url found, make sure header matches 'Bug-Url: ' and is a valid url. * Check merged to previous::IGNORE, Not in stable branch (['ovirt-3.5', 'ovirt-3.4', 'ovirt-3.3'])
automation@ovirt.org has posted comments on this change.
Change subject: SDM: Add wipeVolume API ......................................................................
Patch Set 2:
* Update tracker::IGNORE, no Bug-Url found * Check Bug-Url::WARN, no bug url found, make sure header matches 'Bug-Url: ' and is a valid url. * Check merged to previous::IGNORE, Not in stable branch (['ovirt-3.5', 'ovirt-3.4', 'ovirt-3.3'])
Jenkins CI RO has abandoned this change.
Change subject: SDM: Add wipeVolume API ......................................................................
Abandoned
Abandoned due to no activity - please restore if still relevant
gerrit-hooks has posted comments on this change.
Change subject: SDM: Add wipeVolume API ......................................................................
Patch Set 2:
* Update tracker: IGNORE, no Bug-Url found
vdsm-patches@lists.fedorahosted.org