Idan Shaby has uploaded a new change for review. Change subject: core: WAD should be Ignored on File Domain Disks ......................................................................
core: WAD should be Ignored on File Domain Disks Since the file system is responsible for handling block allocation, there is no need for wiping disks on file domains. Change-Id: I0df2c07282994557e149db922cc1d3a166c5aa8f Bug-Url: https://bugzilla.redhat.com/1097820 Signed-off-by: Idan Shaby <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/HibernationVolumesRemover.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverFromExportDomain.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverOnDataDomain.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandler.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandlerTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CopyImageVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DeleteImageGroupVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DestroyImageVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeSnapshotsVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MoveImageGroupVDSCommandParameters.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SecureDeletion.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DeleteImageGroupVDSCommand.java 23 files changed, 250 insertions(+), 103 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/31687/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java index 2c791d7..52351f2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java @@ -4,6 +4,7 @@ import java.util.List; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; import org.ovirt.engine.core.common.action.RemoveImageParameters; @@ -69,34 +70,36 @@ if (getParameters().getUseCopyCollapse()) { vdsReturnValue = runVdsCommand( VDSCommandType.CopyImage, - new CopyImageVDSCommandParameters(getStorageDomain().getStoragePoolId(), - sourceDomainId, - getParameters().getContainerId(), - getParameters().getImageGroupID(), - getParameters().getImageId(), - getParameters().getDestImageGroupId(), - getParameters().getDestinationImageId(), - "", - getParameters().getStorageDomainId(), - getParameters().getCopyVolumeType(), - getVolumeFormatForDomain(), - getParameters().getVolumeType(), - isWipeAfterDelete(), - getParameters().getForceOverride())); + SecureDeletionHandler.fixParametersWithSecureDeletion( + new CopyImageVDSCommandParameters(getStorageDomain().getStoragePoolId(), + sourceDomainId, + getParameters().getContainerId(), + getParameters().getImageGroupID(), + getParameters().getImageId(), + getParameters().getDestImageGroupId(), + getParameters().getDestinationImageId(), + "", + getParameters().getStorageDomainId(), + getParameters().getCopyVolumeType(), + getVolumeFormatForDomain(), + getParameters().getVolumeType(), + isWipeAfterDelete(), + getParameters().getForceOverride()))); } else { vdsReturnValue = runVdsCommand( VDSCommandType.MoveImageGroup, - new MoveImageGroupVDSCommandParameters( - getDiskImage() != null ? getDiskImage().getStoragePoolId() - : getStorageDomain().getStoragePoolId(), - sourceDomainId, - getDiskImage() != null ? - getDiskImage().getId() : getParameters().getImageGroupID(), - getParameters().getStorageDomainId(), - getParameters().getContainerId(), - ImageOperation.Copy, - isWipeAfterDelete(), - getParameters().getForceOverride())); + SecureDeletionHandler.fixParametersWithSecureDeletion( + new MoveImageGroupVDSCommandParameters( + getDiskImage() != null ? getDiskImage().getStoragePoolId() + : getStorageDomain().getStoragePoolId(), + sourceDomainId, + getDiskImage() != null ? + getDiskImage().getId() : getParameters().getImageGroupID(), + getParameters().getStorageDomainId(), + getParameters().getContainerId(), + ImageOperation.Copy, + isWipeAfterDelete(), + getParameters().getForceOverride()))); } if (vdsReturnValue.getSucceeded()) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java index d0a2d0c..b3dd890 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Arrays; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.CreateCloneOfTemplateParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -55,12 +56,13 @@ Guid taskId = persistAsyncTaskPlaceHolder(VdcActionType.AddVmFromTemplate); try { vdsReturnValue = runVdsCommand(VDSCommandType.CopyImage, - new CopyImageVDSCommandParameters(storagePoolID, getParameters().getStorageDomainId(), - getVmTemplateId(), getDiskImage().getId(), getImage().getImageId(), - newDiskImage.getId(), getDestinationImageId(), - "", getDestinationStorageDomainId(), CopyVolumeType.LeafVol, - newDiskImage.getVolumeFormat(), newDiskImage.getVolumeType(), - getDiskImage().isWipeAfterDelete(), false)); + SecureDeletionHandler.fixParametersWithSecureDeletion( + new CopyImageVDSCommandParameters(storagePoolID, getParameters().getStorageDomainId(), + getVmTemplateId(), getDiskImage().getId(), getImage().getImageId(), + newDiskImage.getId(), getDestinationImageId(), + "", getDestinationStorageDomainId(), CopyVolumeType.LeafVol, + newDiskImage.getVolumeFormat(), newDiskImage.getVolumeType(), + getDiskImage().isWipeAfterDelete(), false))); } catch (VdcBLLException e) { log.errorFormat("Failed creating snapshot from image id -'{0}'", getImage().getImageId()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java index 0c08946..e14efb1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java @@ -6,6 +6,7 @@ import java.util.Arrays; import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.CreateImageTemplateParameters; import org.ovirt.engine.core.common.action.RemoveImageParameters; @@ -60,11 +61,12 @@ getParameters().getDestinationStorageDomainId()); VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.CopyImage, - new CopyImageVDSCommandParameters(storagePoolId, getParameters().getStorageDomainId(), + SecureDeletionHandler.fixParametersWithSecureDeletion( + new CopyImageVDSCommandParameters(storagePoolId, getParameters().getStorageDomainId(), getParameters().getVmId(), imageGroupId, snapshotId, destinationImageGroupID, - getDestinationImageId(), StringUtils.defaultString(newImage.getDescription()), getParameters() - .getDestinationStorageDomainId(), CopyVolumeType.SharedVol, targetFormat, - newImage.getVolumeType(), getDiskImage().isWipeAfterDelete(), false)); + getDestinationImageId(), StringUtils.defaultString(newImage.getDescription()), + getParameters().getDestinationStorageDomainId(), CopyVolumeType.SharedVol, + targetFormat, newImage.getVolumeType(), getDiskImage().isWipeAfterDelete(), false))); getReturnValue().getInternalVdsmTaskIdList().add( createTask(taskId, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java index 03bdfd3..5347b9c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.List; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.DestroyImageParameters; @@ -13,7 +14,6 @@ import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; import org.ovirt.engine.core.common.vdscommands.DestroyImageVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; -import org.ovirt.engine.core.common.vdscommands.VDSParametersBase; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.CommandStatus; import org.ovirt.engine.core.compat.Guid; @@ -38,7 +38,7 @@ Guid taskId = persistAsyncTaskPlaceHolder(VdcActionType.DestroyImage); VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.DestroyImage, - createVDSParameters()); + SecureDeletionHandler.fixParametersWithSecureDeletion(createVDSParameters())); if (vdsReturnValue != null && vdsReturnValue.getCreationInfo() != null) { getParameters().setVdsmTaskIds(new ArrayList<Guid>()); @@ -56,7 +56,7 @@ } } - private VDSParametersBase createVDSParameters() { + private DestroyImageVDSCommandParameters createVDSParameters() { return new DestroyImageVDSCommandParameters( getParameters().getStoragePoolId(), getParameters().getStorageDomainId(), diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java index 7c436d3..b07ea05 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java @@ -7,6 +7,7 @@ import java.util.LinkedList; import java.util.List; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.RemoveImageParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -296,9 +297,10 @@ getCompensationContext()); } return runVdsCommand(VDSCommandType.DeleteImageGroup, - new DeleteImageGroupVDSCommandParameters(getDiskImage().getStoragePoolId(), - getStorageDomainId(), getDiskImage().getId(), - getDiskImage().isWipeAfterDelete(), getParameters().getForceDelete())); + SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(getDiskImage().getStoragePoolId(), + getStorageDomainId(), getDiskImage().getId(), + getDiskImage().isWipeAfterDelete(), getParameters().getForceDelete()))); } protected VmDeviceDAO getVmDeviceDAO() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java index a022331..0914c31 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.ImagesContainterParametersBase; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; @@ -46,7 +47,8 @@ MergeSnapshotsVDSCommandParameters params = new MergeSnapshotsVDSCommandParameters(storagePoolId, storageDomainId, getVmId(), getDiskImage().getId(), getDiskImage().getImageId(), getDestinationDiskImage().getImageId(), getDiskImage().isWipeAfterDelete()); - return runVdsCommand(VDSCommandType.MergeSnapshots, params); + return runVdsCommand(VDSCommandType.MergeSnapshots, + SecureDeletionHandler.fixParametersWithSecureDeletion(params)); } protected Guid createTask(Guid taskId, VDSReturnValue vdsReturnValue, Guid storageDomainId) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java index b8229ed..4a35f8d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java @@ -2,6 +2,7 @@ import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.ImagesContainterParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; @@ -24,11 +25,11 @@ protected void executeCommand() { Guid taskId = persistAsyncTaskPlaceHolder(VdcActionType.RemoveVmTemplate); - VDSReturnValue vdsReturnValue = runVdsCommand( - VDSCommandType.DeleteImageGroup, - new DeleteImageGroupVDSCommandParameters(getParameters().getStoragePoolId(), getParameters() - .getStorageDomainId(), getParameters().getImageGroupID(), getParameters() - .getWipeAfterDelete(), false)); + VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.DeleteImageGroup, + SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(getParameters().getStoragePoolId(), + getParameters().getStorageDomainId(), getParameters().getImageGroupID(), + getParameters().getWipeAfterDelete(), false))); if (vdsReturnValue.getSucceeded()) { getReturnValue().getInternalVdsmTaskIdList().add( diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java index c0a20b5..d1c4eab 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java @@ -3,6 +3,8 @@ import org.ovirt.engine.core.bll.context.CommandContext; import java.util.ArrayList; + +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.RestoreFromSnapshotParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -102,10 +104,10 @@ Guid taskId = persistAsyncTaskPlaceHolder(VdcActionType.RestoreAllSnapshots); - vdsReturnValue = runVdsCommand( - VDSCommandType.DestroyImage, + vdsReturnValue = runVdsCommand(VDSCommandType.DestroyImage, + SecureDeletionHandler.fixParametersWithSecureDeletion( new DestroyImageVDSCommandParameters(storagePoolId, storageDomainId, imageGroupId, - _imagesToDelete, getDiskImage().isWipeAfterDelete(), true)); + _imagesToDelete, getDiskImage().isWipeAfterDelete(), true))); if (vdsReturnValue.getSucceeded()) { getReturnValue().getInternalVdsmTaskIdList().add( diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java index f3841cf..828b372 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java @@ -7,6 +7,7 @@ import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.snapshots.SnapshotsManager; import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.MultipleStorageDomainsValidator; import org.ovirt.engine.core.common.FeatureSupported; @@ -334,10 +335,10 @@ // delete first image // the next 'DeleteImageGroup' command should also take care of the image removal: - VDSReturnValue vdsRetValue = runVdsCommand( - VDSCommandType.DeleteImageGroup, - new DeleteImageGroupVDSCommandParameters(guids.get(1), - guids.get(0), guids.get(2), postZero, false)); + VDSReturnValue vdsRetValue = runVdsCommand(VDSCommandType.DeleteImageGroup, + SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(2), + postZero, false))); if (!vdsRetValue.getSucceeded()) { return false; @@ -350,10 +351,10 @@ Guid taskId2 = persistAsyncTaskPlaceHolder(parentCommand, DELETE_SECONDARY_IMAGES_TASK_KEY); // delete second image // the next 'DeleteImageGroup' command should also take care of the image removal: - vdsRetValue = runVdsCommand( - VDSCommandType.DeleteImageGroup, - new DeleteImageGroupVDSCommandParameters(guids.get(1), - guids.get(0), guids.get(4), postZero, false)); + vdsRetValue = runVdsCommand(VDSCommandType.DeleteImageGroup, + SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(4), + postZero, false))); if (!vdsRetValue.getSucceeded()) { if (startPollingTasks) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java index a3cb7ef..438f717 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java @@ -2,6 +2,7 @@ import org.ovirt.engine.core.bll.AbstractSPMAsyncTaskHandler; import org.ovirt.engine.core.bll.ImagesHandler; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; @@ -77,14 +78,15 @@ @Override protected VDSParametersBase getRevertVDSParameters() { - return new DeleteImageGroupVDSCommandParameters( - getEnclosingCommand().getParameters().getStoragePoolId(), - getEnclosingCommand().getParameters().getTargetStorageDomainId(), - getEnclosingCommand().getParameters().getImageGroupID(), - DbFacade.getInstance() - .getDiskImageDao() - .get(getEnclosingCommand().getParameters().getDestinationImageId()) - .isWipeAfterDelete(), - getEnclosingCommand().getParameters().getForceDelete()); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters( + getEnclosingCommand().getParameters().getStoragePoolId(), + getEnclosingCommand().getParameters().getTargetStorageDomainId(), + getEnclosingCommand().getParameters().getImageGroupID(), + DbFacade.getInstance() + .getDiskImageDao() + .get(getEnclosingCommand().getParameters().getDestinationImageId()) + .isWipeAfterDelete(), + getEnclosingCommand().getParameters().getForceDelete())); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java index dc2768e..a3d47e0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java @@ -2,6 +2,7 @@ import org.ovirt.engine.core.bll.AbstractSPMAsyncTaskHandler; import org.ovirt.engine.core.bll.ImagesHandler; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; @@ -136,15 +137,16 @@ @Override protected VDSParametersBase getVDSParameters() { - return new DeleteImageGroupVDSCommandParameters( - getEnclosingCommand().getParameters().getStoragePoolId(), - getEnclosingCommand().getParameters().getSourceStorageDomainId(), - getEnclosingCommand().getParameters().getImageGroupID(), - DbFacade.getInstance() - .getDiskImageDao() - .get(getEnclosingCommand().getParameters().getDestinationImageId()) - .isWipeAfterDelete(), - getEnclosingCommand().getParameters().getForceDelete()); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters( + getEnclosingCommand().getParameters().getStoragePoolId(), + getEnclosingCommand().getParameters().getSourceStorageDomainId(), + getEnclosingCommand().getParameters().getImageGroupID(), + DbFacade.getInstance() + .getDiskImageDao() + .get(getEnclosingCommand().getParameters().getDestinationImageId()) + .isWipeAfterDelete(), + getEnclosingCommand().getParameters().getForceDelete())); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/HibernationVolumesRemover.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/HibernationVolumesRemover.java index a6435d0..8527c84 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/HibernationVolumesRemover.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/HibernationVolumesRemover.java @@ -2,6 +2,7 @@ import java.util.List; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; @@ -31,14 +32,16 @@ @Override protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryImageParams(List<Guid> guids) { - return new DeleteImageGroupVDSCommandParameters( - guids.get(1), guids.get(0), guids.get(2), isPostZero(), false); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(2), + isPostZero(), false)); } @Override protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryConfParams(List<Guid> guids) { - return new DeleteImageGroupVDSCommandParameters( - guids.get(1), guids.get(0), guids.get(4), isPostZero(), false); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(4), + isPostZero(), false)); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverFromExportDomain.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverFromExportDomain.java index 9a60621..a5be945 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverFromExportDomain.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverFromExportDomain.java @@ -2,6 +2,7 @@ import java.util.List; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters; @@ -35,14 +36,16 @@ @Override protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryImageParams(List<Guid> guids) { - return new DeleteImageGroupVDSCommandParameters( - guids.get(1), guids.get(0), guids.get(2), isPostZero(), false); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(2), + isPostZero(), false)); } @Override protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryConfParams(List<Guid> guids) { - return new DeleteImageGroupVDSCommandParameters( - guids.get(1), guids.get(0), guids.get(4), isPostZero(), false); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(4), + isPostZero(), false)); } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverOnDataDomain.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverOnDataDomain.java index 825f7da..fa50604 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverOnDataDomain.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageRemoverOnDataDomain.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Set; +import org.ovirt.engine.core.bll.storage.SecureDeletionHandler; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.action.RemoveMemoryVolumesParameters; import org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters; @@ -29,14 +30,16 @@ @Override protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryImageParams(List<Guid> guids) { - return new DeleteImageGroupVDSCommandParameters( - guids.get(1), guids.get(0), guids.get(2), isPostZero(), false); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(2), + isPostZero(), false)); } @Override protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryConfParams(List<Guid> guids) { - return new DeleteImageGroupVDSCommandParameters( - guids.get(1), guids.get(0), guids.get(4), isPostZero(), false); + return SecureDeletionHandler.fixParametersWithSecureDeletion( + new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(4), + isPostZero(), false)); } protected boolean isPostZero() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandler.java new file mode 100644 index 0000000..1455e5c --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandler.java @@ -0,0 +1,33 @@ +package org.ovirt.engine.core.bll.storage; + +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.vdscommands.SecureDeletion; +import org.ovirt.engine.core.common.vdscommands.StorageDomainIdParametersBase; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + +public class SecureDeletionHandler { + + /** + * Since the file system is responsible for handling block allocation, there is no need + * for posting zeros on file domains. This method gets parameters of a command that deals with + * posting zeros and fixes its postZero value if required. + * @param parameters The parameters of the command that should be executed. + * @param <T> The parameters type. + * @return The fixed parameters. + */ + public static <T extends StorageDomainIdParametersBase & SecureDeletion> + T fixParametersWithSecureDeletion(T parameters) { + StorageDomainStatic storageDomainStatic = + DbFacade.getInstance().getStorageDomainStaticDao().get(parameters.getStorageDomainId()); + return fixParametersWithSecureDeletion(parameters, storageDomainStatic.getStorageType().isFileDomain()); + } + + protected static <T extends StorageDomainIdParametersBase & SecureDeletion> + T fixParametersWithSecureDeletion(T parameters, boolean isFileDomain) { + if (isFileDomain) { + parameters.setPostZero(false); + } + return parameters; + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandlerTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandlerTest.java new file mode 100644 index 0000000..1765123 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/SecureDeletionHandlerTest.java @@ -0,0 +1,68 @@ +package org.ovirt.engine.core.bll.storage; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.common.vdscommands.SecureDeletion; +import org.ovirt.engine.core.common.vdscommands.StorageDomainIdParametersBase; + +import java.text.MessageFormat; + +import static org.junit.Assert.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public class SecureDeletionHandlerTest { + + private ParametersWithSecureDeletion parameters; + + @Test + public void parametersWithSecureDeletionAreFixedOnFileDomainWhenPostZeroIsTrue() { + parameters = new ParametersWithSecureDeletion(true); + assertPostZeroValue(parameters, true, false); + } + + @Test + public void parametersWithSecureDeletionAreNotFixedOnBlockDomainWhenPostZeroIsTrue() { + parameters = new ParametersWithSecureDeletion(true); + assertPostZeroValue(parameters, false, true); + } + + @Test + public void parametersWithSecureDeletionAreNotFixedWhenPostZeroIsFalse() { + parameters = new ParametersWithSecureDeletion(false); + + // On file domain. + assertPostZeroValue(parameters, true, false); + + // On block domain. + assertPostZeroValue(parameters, false, false); + } + + private void assertPostZeroValue(ParametersWithSecureDeletion parameters, boolean isFileDomain, + boolean postZeroExpectedValue) { + SecureDeletionHandler.fixParametersWithSecureDeletion(parameters, isFileDomain); + assertEquals(MessageFormat.format( + "Wrong VDS command parameters: 'postZero' should be {0}.", postZeroExpectedValue), + parameters.getPostZero(), postZeroExpectedValue); + } + + private class ParametersWithSecureDeletion extends StorageDomainIdParametersBase implements SecureDeletion { + + private boolean postZero; + + public ParametersWithSecureDeletion(boolean postZero) { + this.postZero = postZero; + } + + @Override + public boolean getPostZero() { + return postZero; + } + + @Override + public void setPostZero(boolean postZero) { + this.postZero = postZero; + } + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CopyImageVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CopyImageVDSCommandParameters.java index d14f8b7..000e566 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CopyImageVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/CopyImageVDSCommandParameters.java @@ -5,7 +5,8 @@ import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.compat.Guid; -public class CopyImageVDSCommandParameters extends AllStorageAndImageIdVDSCommandParametersBase { +public class CopyImageVDSCommandParameters + extends AllStorageAndImageIdVDSCommandParametersBase implements SecureDeletion { public CopyImageVDSCommandParameters(Guid storagePoolId, Guid storageDomainId, Guid vmId, Guid imageGroupId, Guid srcImageId, Guid dstImageGroupId, Guid dstVolUUID, String description, Guid dstStorageDomainId, CopyVolumeType copyVolumeType, VolumeFormat volumeFormat, VolumeType preallocate, boolean postZero, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DeleteImageGroupVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DeleteImageGroupVDSCommandParameters.java index 354448d..213a973 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DeleteImageGroupVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DeleteImageGroupVDSCommandParameters.java @@ -2,25 +2,26 @@ import org.ovirt.engine.core.compat.Guid; -public class DeleteImageGroupVDSCommandParameters extends StoragePoolDomainAndGroupIdBaseVDSCommandParameters { - private boolean postZeros; +public class DeleteImageGroupVDSCommandParameters + extends StoragePoolDomainAndGroupIdBaseVDSCommandParameters implements SecureDeletion { + private boolean postZero; private boolean forceDelete; public DeleteImageGroupVDSCommandParameters(Guid storagePoolId, - Guid storageDomainId, Guid imageGroupId, boolean postZeros, boolean force) { + Guid storageDomainId, Guid imageGroupId, boolean postZero, boolean force) { super(storagePoolId, storageDomainId, imageGroupId); - setPostZeros(postZeros); + setPostZero(postZero); setForceDelete(force); } public DeleteImageGroupVDSCommandParameters() { } - public boolean getPostZeros() { - return postZeros; + public boolean getPostZero() { + return postZero; } - protected void setPostZeros(boolean value) { - postZeros = value; + public void setPostZero(boolean postZeros) { + postZero = postZeros; } public boolean getForceDelete() { @@ -35,7 +36,7 @@ public String toString() { return String.format("%s, postZeros = %s, forceDelete = %s", super.toString(), - getPostZeros(), + getPostZero(), getForceDelete()); } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DestroyImageVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DestroyImageVDSCommandParameters.java index 68a7124..ee0c829 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DestroyImageVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/DestroyImageVDSCommandParameters.java @@ -4,7 +4,8 @@ import org.ovirt.engine.core.compat.Guid; -public class DestroyImageVDSCommandParameters extends AllStorageAndImageIdVDSCommandParametersBase { +public class DestroyImageVDSCommandParameters + extends AllStorageAndImageIdVDSCommandParametersBase implements SecureDeletion { public DestroyImageVDSCommandParameters(Guid storagePoolId, Guid storageDomainId, Guid imageGroupId, List<Guid> imageList, boolean postZero, boolean force) { super(storagePoolId, storageDomainId, imageGroupId, Guid.Empty); @@ -29,7 +30,7 @@ return privatePostZero; } - protected void setPostZero(boolean value) { + public void setPostZero(boolean value) { privatePostZero = value; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeSnapshotsVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeSnapshotsVDSCommandParameters.java index 0010538..8550ed8 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeSnapshotsVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeSnapshotsVDSCommandParameters.java @@ -2,7 +2,8 @@ import org.ovirt.engine.core.compat.Guid; -public class MergeSnapshotsVDSCommandParameters extends AllStorageAndImageIdVDSCommandParametersBase { +public class MergeSnapshotsVDSCommandParameters + extends AllStorageAndImageIdVDSCommandParametersBase implements SecureDeletion { private Guid _imageId2; public MergeSnapshotsVDSCommandParameters(Guid storagePoolId, Guid storageDomainId, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MoveImageGroupVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MoveImageGroupVDSCommandParameters.java index 625bda6..7ec8a86 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MoveImageGroupVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MoveImageGroupVDSCommandParameters.java @@ -3,7 +3,8 @@ import org.ovirt.engine.core.common.businessentities.ImageOperation; import org.ovirt.engine.core.compat.Guid; -public class MoveImageGroupVDSCommandParameters extends TargetDomainImageGroupVDSCommandParameters { +public class MoveImageGroupVDSCommandParameters + extends TargetDomainImageGroupVDSCommandParameters implements SecureDeletion { private Guid privateVmId; public Guid getVmId() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SecureDeletion.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SecureDeletion.java new file mode 100644 index 0000000..7adafe0 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SecureDeletion.java @@ -0,0 +1,13 @@ +package org.ovirt.engine.core.common.vdscommands; + +/** + * In a VDS command parameters object, this interface + * represents the ability to delete storage securely. + */ +public interface SecureDeletion { + + boolean getPostZero(); + + void setPostZero(boolean postZero); + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DeleteImageGroupVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DeleteImageGroupVDSCommand.java index 44302e0..62834e7 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DeleteImageGroupVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DeleteImageGroupVDSCommand.java @@ -16,7 +16,7 @@ getIrsProxy().deleteImage(getParameters().getStorageDomainId().toString(), getParameters().getStoragePoolId().toString(), getParameters().getImageGroupId().toString(), - String.valueOf(getParameters().getPostZeros()), + String.valueOf(getParameters().getPostZero()), String.valueOf(getParameters().getForceDelete()).toLowerCase()); proceedProxyReturnValue(); -- To view, visit http://gerrit.ovirt.org/31687 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0df2c07282994557e149db922cc1d3a166c5aa8f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Idan Shaby <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
