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 <tni...@redhat.com> --- 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, 60 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/40443/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 904f254..d25f070 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.DiskValidator; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; @@ -95,6 +96,7 @@ && validateDestStorage() && checkTemplateInDestStorageDomain() && validateSpaceRequirements() + && validateVmSnapshotStatus() && checkCanBeMoveInVm() && checkIfNeedToBeOverride() && setAndValidateDiskProfiles(); @@ -170,6 +172,25 @@ return false; } + private boolean validateVmSnapshotStatus() { + SnapshotsValidator snapshotsValidator = getSnapshotsValidator(); + for (Pair<VM, VmDevice> pair : getVmsWithVmDeviceInfoForDiskId()) { + VmDevice vmDevice = pair.getSecond(); + if (vmDevice.getSnapshotId() == null) { // Skip check for VMs with connected snapshot + VM vm = pair.getFirst(); + if (!validate(snapshotsValidator.vmNotInPreview(vm.getId())) + || !validate(snapshotsValidator.vmNotDuringSnapshot(vm.getId()))) { + return false; + } + } + } + return true; + } + + 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 affdafc..882bf32 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 @@ -19,6 +19,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.ovirt.engine.core.bll.validator.DiskValidator; +import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; import org.ovirt.engine.core.common.businessentities.Disk; @@ -50,6 +51,7 @@ private Guid destStorageId = Guid.newGuid(); private final Guid srcStorageId = Guid.newGuid(); private final static int FREE_SPACE_CRITICAL_LOW_IN_GB = 0; + private final VmDevice vmDevice = new VmDevice(); @ClassRule public static MockConfigRule mcr = new MockConfigRule( @@ -63,6 +65,8 @@ private VmDAO vmDao; @Mock private VmDeviceDAO vmDeviceDao; + @Mock + private SnapshotsValidator snapshotsValidator; /** * The command under test. @@ -130,8 +134,11 @@ @Test public void canDoActionVmIsNotDown() throws Exception { initializeCommand(ImageOperation.Move); + initSnapshotValidator(); initVmDiskImage(); initVmForFail(); +// initVmDiskImage(false); +// mockGetVmsListForDisk(); initSrcStorageDomain(); initDestStorageDomain(); doReturn(vmDeviceDao).when(command).getVmDeviceDAO(); @@ -191,6 +198,7 @@ @Test public void canDoActionEnoughSpace() throws Exception { initializeCommand(ImageOperation.Move); + initSnapshotValidator(); initVmForSpace(); initVmDiskImage(); initSrcStorageDomain(); @@ -200,13 +208,36 @@ CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); } + @Test + public void successVmInPreviewForAttachedSnapshot() { + initializeCommand(ImageOperation.Move); + initSnapshotValidator(); + initVmForSpace(); + initVmDiskImage(); + initSrcStorageDomain(); + initDestStorageDomain(); + vmDevice.setSnapshotId(Guid.newGuid()); + CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); + } + + @Test + public void canDoActionVmInPreview() { + initializeCommand(ImageOperation.Move); + initSnapshotValidator(); + initVmForSpace(); + initVmDiskImage(); + initSrcStorageDomain(); + initDestStorageDomain(); + 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() { VM vm = new VM(); vm.setStatus(VMStatus.Down); doReturn(vmDao).when(command).getVmDAO(); when(vmDao.get(any(Guid.class))).thenReturn(vm); - VmDevice device = new VmDevice(); - List<Pair<VM, VmDevice>> vmList = Collections.singletonList(new Pair<>(vm, device)); + List<Pair<VM, VmDevice>> vmList = Collections.singletonList(new Pair<>(vm, vmDevice)); when(vmDao.getVmsWithPlugInfo(any(Guid.class))).thenReturn(vmList); } @@ -280,6 +311,12 @@ doReturn(true).when(command).setAndValidateDiskProfiles(); } + 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/40443 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Tal Nisan <tni...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches