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