Tal Nisan has uploaded a new change for review. Change subject: core: Check attached VMs snapshot status when moving a disk ......................................................................
core: Check attached VMs snapshot status when moving a disk Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56 Bug-Url: https://bugzilla.redhat.com/1211330 Signed-off-by: Tal Nisan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java 2 files changed, 40 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/80/40080/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java index 33393f5..4936cb4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java @@ -13,6 +13,7 @@ import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; +import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.storage.DiskValidator; import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator; @@ -96,6 +97,7 @@ && validateDestStorage() && checkTemplateInDestStorageDomain() && validateSpaceRequirements() + && validateVmSnapshotStatus() && checkCanBeMoveInVm() && checkIfNeedToBeOverride() && setAndValidateDiskProfiles(); @@ -180,6 +182,21 @@ return false; } + private boolean validateVmSnapshotStatus() { + SnapshotsValidator snapshotsValidator = getSnapshotsValidator(); + boolean returnValue = true; + for (Pair<VM, VmDevice> pair : getVmsWithVmDeviceInfoForDiskId()) { + VM vm = pair.getFirst(); + returnValue = returnValue && validate(snapshotsValidator.vmNotInPreview(vm.getId())) + && validate(snapshotsValidator.vmNotDuringSnapshot(vm.getId())); + } + return returnValue; + } + + protected SnapshotsValidator getSnapshotsValidator() { + return new SnapshotsValidator(); + } + protected List<DiskImage> getAllImageSnapshots() { return ImagesHandler.getAllImageSnapshots(getImage().getImageId()); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java index c5c666e..d69e1be 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java @@ -18,6 +18,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator; import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; import org.ovirt.engine.core.common.businessentities.StorageDomain; @@ -61,6 +62,8 @@ private VmDAO vmDao; @Mock private VmDeviceDAO vmDeviceDao; + @Mock + private SnapshotsValidator snapshotsValidator; /** * The command under test. @@ -161,6 +164,7 @@ @Test public void canDoActionVmIsNotDown() throws Exception { initializeCommand(ImageOperation.Move); + initSnapshotValidator(); initVmDiskImage(false); mockGetVmsListForDisk(); initSrcStorageDomain(); @@ -221,12 +225,25 @@ @Test public void canDoActionEnoughSpace() throws Exception { initializeCommand(ImageOperation.Move); + initSnapshotValidator(); initVmForSpace(); initVmDiskImage(false); initSrcStorageDomain(); initDestStorageDomain(StorageType.NFS); doReturn(mockStorageDomainValidatorWithSpace()).when(command).createStorageDomainValidator(); CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); + } + + @Test + public void canDoActionVmInPreview() { + initializeCommand(ImageOperation.Move); + initSnapshotValidator(); + initVmForSpace(); + initVmDiskImage(false); + initSrcStorageDomain(); + initDestStorageDomain(StorageType.NFS); + when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW)); + CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW); } protected void initVmForSpace() { @@ -312,6 +329,12 @@ doReturn(storageDomainDao).when(command).getStorageDomainDAO(); } + private void initSnapshotValidator() { + when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(ValidationResult.VALID); + when(snapshotsValidator.vmNotDuringSnapshot(any(Guid.class))).thenReturn(ValidationResult.VALID); + when(command.getSnapshotsValidator()).thenReturn(snapshotsValidator); + } + private void initTemplateDiskImage() { DiskImage diskImage = new DiskImage(); diskImage.setVmEntityType(VmEntityType.TEMPLATE); -- To view, visit https://gerrit.ovirt.org/40080 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
