Vitor de Lima has uploaded a new change for review.

Change subject: core, engine: Fix balloon detection during VM import
......................................................................

core, engine: Fix balloon detection during VM import

The canDoAction method of the ImportVmCommand was not properly checking
for the presence of ballooning devices and always blocked the importing
of ppc64 VMs. This patch fixes this issue.

Change-Id: If660e368d7ec31ff1f8251d483971ffbf0bd858a
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1152560
Signed-off-by: Vitor de Lima <vdel...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
3 files changed, 37 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/82/34382/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
index b90d3b7..fae5721 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
@@ -61,6 +61,7 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmStatistics;
@@ -80,6 +81,7 @@
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
+import org.ovirt.engine.core.common.utils.VmDeviceCommonUtils;
 import org.ovirt.engine.core.common.validation.group.ImportClonedEntity;
 import org.ovirt.engine.core.common.validation.group.ImportEntity;
 import 
org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters;
@@ -209,8 +211,17 @@
             }
         }
 
+        boolean hasBalloon = false;
+
+        for (VmDevice vmDevice : getVm().getManagedVmDeviceMap().values()) {
+            if (VmDeviceCommonUtils.isMemoryBalloon(vmDevice)) {
+                hasBalloon = true;
+                break;
+            }
+        }
+
         OsRepository osRepository = 
SimpleDependecyInjector.getInstance().get(OsRepository.class);
-        if (getVm().isBalloonEnabled() && 
!osRepository.isBalloonEnabled(getVm().getStaticData().getOsId(),
+        if (hasBalloon && 
!osRepository.isBalloonEnabled(getVm().getStaticData().getOsId(),
                 getVdsGroup().getcompatibility_version())) {
             addCanDoActionMessageVariable("clusterArch", 
getVdsGroup().getArchitecture());
             return 
failCanDoAction(VdcBllMessages.BALLOON_REQUESTED_ON_NOT_SUPPORTED_ARCH);
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java
index 4446b4b..f17939b 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportVmCommandTest.java
@@ -50,17 +50,21 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
+import org.ovirt.engine.core.common.businessentities.VmDeviceId;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.osinfo.OsRepository;
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
 import org.ovirt.engine.core.common.utils.ValidationUtils;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 import org.ovirt.engine.core.utils.RandomUtilsSeedingRule;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsProperties;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ImportVmCommandTest {
@@ -118,10 +122,23 @@
         verify(multipleSdValidator, 
never()).allDomainsHaveSpaceForNewDisks(anyList());
     }
 
+    void addBalloonToVm(VM vm) {
+        Guid deviceId = Guid.newGuid();
+        Map<String, Object> specParams = new HashMap<String, Object>();
+        specParams.put(VdsProperties.Model, VdsProperties.Virtio);
+        VmDevice balloon = new VmDevice(new VmDeviceId(deviceId, vm.getId()),
+                VmDeviceGeneralType.BALLOON, 
VmDeviceType.MEMBALLOON.toString(), null, 0, specParams,
+                true, true, true, null, null, null);
+
+        vm.getManagedVmDeviceMap().put(deviceId, balloon);
+    }
+
     @Test
     public void refuseBalloonOnPPC() {
         final ImportVmCommand<ImportVmParameters> c = 
setupDiskSpaceTest(createParameters());
-        c.getParameters().getVm().setBalloonEnabled(true);
+
+        addBalloonToVm(c.getParameters().getVm());
+
         c.getParameters().getVm().setClusterArch(ArchitectureType.ppc64);
         VDSGroup cluster = new VDSGroup();
         cluster.setArchitecture(ArchitectureType.ppc64);
@@ -137,7 +154,9 @@
     @Test
     public void acceptBalloon() {
         final ImportVmCommand<ImportVmParameters> c = 
setupDiskSpaceTest(createParameters());
-        c.getParameters().getVm().setBalloonEnabled(true);
+
+        addBalloonToVm(c.getParameters().getVm());
+
         c.getParameters().getVm().setClusterArch(ArchitectureType.x86_64);
         VDSGroup cluster = new VDSGroup();
         cluster.setArchitecture(ArchitectureType.x86_64);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
index 1f32b8d..0615c44 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
@@ -57,6 +57,10 @@
         return device.getType() == VmDeviceGeneralType.SOUND;
     }
 
+    public static boolean isMemoryBalloon(VmDevice device) {
+        return device.getType() == VmDeviceGeneralType.BALLOON;
+    }
+
     public static boolean isBridge(VmDevice device) {
         return device.getType() == VmDeviceGeneralType.INTERFACE
                 && device.getDevice().equals(VmDeviceType.BRIDGE.getName());


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If660e368d7ec31ff1f8251d483971ffbf0bd858a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Vitor de Lima <vdel...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to