Tal Nisan has uploaded a new change for review.

Change subject: core: Check live snapshot capabilities in live storage 
migration CDA
......................................................................

core: Check live snapshot capabilities in live storage migration CDA

Change-Id: Idba6581587d1908e4428ea2d18878c2f62a0b317
Bug-Url: https://bugzilla.redhat.com/1158049
Bug-Url: https://bugzilla.redhat.com/1105846
Signed-off-by: Tal Nisan <tni...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/LiveSnapshotValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java
4 files changed, 56 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/34841/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
index 2bc7ccb..5f5520c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.validator.LiveSnapshotValidator;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand;
 import org.ovirt.engine.core.bll.validator.DiskImagesValidator;
@@ -541,7 +542,8 @@
     }
 
     protected boolean validateVM(VmValidator vmValidator) {
-        return canDoSnapshot(getVm()) &&
+        LiveSnapshotValidator validator = new 
LiveSnapshotValidator(getStoragePool().getcompatibility_version(), getVds());
+        return (getVm().isDown() || validate(validator.canDoSnapshot())) &&
                 validate(vmValidator.vmNotSavingRestoring());
     }
 
@@ -562,30 +564,6 @@
     protected void setActionMessageParameters() {
         addCanDoActionMessage(VdcBllMessages.VAR__ACTION__CREATE);
         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__SNAPSHOT);
-    }
-
-    private boolean canDoSnapshot(VM vm) {
-        // if live snapshot is not available, then if vm is up - snapshot is 
not possible so it needs to be
-        // checked if vm up or not
-        // if live snapshot is enabled, there is no need to check if vm is up 
since in any case snapshot is possible
-        if (!isLiveSnapshotEnabled() && !vm.isDown()) {
-            // if there is no live snapshot and the vm is up - snapshot is not 
possible
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT);
-        }
-        VDS vds = getVds();
-        // it is possible, even if unlikely, that the QEMU on the host does 
not support live snapshotting
-        if (vds != null && !vds.getLiveSnapshotSupport()) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_QEMU_UNSUPPORTED_OPERATION);
-        }
-        return true;
-    }
-
-    /**
-     * @return If DC level does not support live snapshots.
-     */
-    private boolean isLiveSnapshotEnabled() {
-        return Config.<Boolean> getValue(
-                ConfigValues.LiveSnapshotEnabled, 
getStoragePool().getcompatibility_version().getValue());
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
index 1ef375a..e5e0aeb 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
@@ -19,6 +19,7 @@
 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.validator.LiveSnapshotValidator;
 import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler;
 import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
@@ -297,6 +298,11 @@
     protected boolean canDoAction() {
         setStoragePoolId(getVm().getStoragePoolId());
 
+        LiveSnapshotValidator validator = new 
LiveSnapshotValidator(getStoragePool().getcompatibility_version(), getVds());
+        if (!validate(validator.canDoSnapshot())) {
+            return false;
+        }
+
         if (!isValidParametersList() || !checkImagesStatus() || 
!validateSpaceRequirements()
                 || !performVmRelatedChecks()) {
             return false;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/LiveSnapshotValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/LiveSnapshotValidator.java
new file mode 100644
index 0000000..9b3b6fd
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/LiveSnapshotValidator.java
@@ -0,0 +1,38 @@
+package org.ovirt.engine.core.bll.validator;
+
+import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.compat.Version;
+
+public class LiveSnapshotValidator {
+
+    private Version compatibilityVersion;
+    private VDS vds;
+
+    public LiveSnapshotValidator(Version compatibilityVersion, VDS vds) {
+        this.compatibilityVersion = compatibilityVersion;
+        this.vds = vds;
+    }
+
+    public ValidationResult canDoSnapshot() {
+        if (!isLiveSnapshotEnabled(compatibilityVersion)) {
+            return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT);
+        }
+
+        // it is possible, even if unlikely, that the QEMU on the host does 
not support live snapshotting
+        if (vds != null && !vds.getLiveSnapshotSupport()) {
+            return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_QEMU_UNSUPPORTED_OPERATION);
+        }
+        return ValidationResult.VALID;
+    }
+
+    /**
+     * @return If DC level does not support live snapshots.
+     */
+    private static boolean isLiveSnapshotEnabled(Version version) {
+        return Config.<Boolean> getValue(ConfigValues.LiveSnapshotEnabled, 
version.getValue());
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java
index 1e05022..c193680 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java
@@ -10,6 +10,7 @@
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
+import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -17,6 +18,7 @@
 import java.util.List;
 
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -38,6 +40,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
+import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
@@ -46,6 +49,7 @@
 import org.ovirt.engine.core.dao.StorageDomainDAO;
 import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VmDAO;
+import org.ovirt.engine.core.utils.MockConfigRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class LiveMigrateVmDisksCommandTest {
@@ -59,6 +63,11 @@
     private final Guid storagePoolId = Guid.newGuid();
     private final Guid diskProfileId = Guid.newGuid();
 
+    @ClassRule
+    public static MockConfigRule mcr = new MockConfigRule(
+            mockConfig(ConfigValues.LiveSnapshotEnabled, 
Version.v3_1.toString(), true)
+    );
+
     @Mock
     private DiskImageDAO diskImageDao;
 


-- 
To view, visit http://gerrit.ovirt.org/34841
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idba6581587d1908e4428ea2d18878c2f62a0b317
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

Reply via email to