Yevgeny Zaspitsky has uploaded a new change for review. Change subject: engine: Enable detaching network from host when a VM has an unplugged VNIC profile of that network ......................................................................
engine: Enable detaching network from host when a VM has an unplugged VNIC profile of that network Enable detaching network from host when a VM has an unplugged VNIC profile of that network. Change-Id: I10db794df55b25925423166d33549b92856e9dd0 Bug-Url: https://bugzilla.redhat.com/1115101 Signed-off-by: Yevgeny Zaspitsky <yzasp...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java 3 files changed, 32 insertions(+), 17 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/29878/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java index 99082dc..35f79a5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java @@ -140,7 +140,7 @@ } /** - * Finds active VMs which uses a network from a given networks list + * Finds active VMs which actively uses a network from a given networks list * * @param vdsId * The host id on which VMs are running @@ -149,12 +149,18 @@ * @return A list of VM names which uses the networks */ public List<String> findActiveVmsUsingNetworks(Guid vdsId, List<String> networks) { + if (networks.isEmpty()) { + return Collections.emptyList(); + } + List<VM> runningVms = getVmDAO().getAllRunningForVds(vdsId); List<String> vmNames = new ArrayList<String>(); for (VM vm : runningVms) { List<VmNetworkInterface> vmInterfaces = getVmNetworkInterfaceDao().getAllForVm(vm.getId()); for (VmNetworkInterface vmNic : vmInterfaces) { - if (vmNic.getNetworkName() != null && networks.contains(vmNic.getNetworkName())) { + if (vmNic.isPlugged() && + vmNic.getNetworkName() != null && + networks.contains(vmNic.getNetworkName())) { vmNames.add(vm.getName()); break; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java index cdd73ce..2a606ff 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java @@ -725,15 +725,11 @@ } } - if (!removedNetworks.isEmpty()) { - List<String> vmNames = - getVmInterfaceManager().findActiveVmsUsingNetworks(params.getVdsId(), removedNetworks); + List<String> vmNames = + getVmInterfaceManager().findActiveVmsUsingNetworks(params.getVdsId(), removedNetworks); - if (!vmNames.isEmpty()) { - for (String vmName : vmNames) { - addViolation(VdcBllMessages.NETWORK_CANNOT_DETACH_NETWORK_USED_BY_VMS, vmName); - } - } + for (String vmName : vmNames) { + addViolation(VdcBllMessages.NETWORK_CANNOT_DETACH_NETWORK_USED_BY_VMS, vmName); } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java index 1084597..d693713 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll.network; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyList; @@ -128,7 +129,7 @@ @Test public void findActiveVmsUsingNetworks() { - mockDaos(); + mockDaos(true); List<String> vmNames = vmInterfaceManager.findActiveVmsUsingNetworks(Guid.newGuid(), Collections.singletonList(NETWORK_NAME)); @@ -136,8 +137,17 @@ } @Test + public void findActiveVmsUsingNetworksOnUnpluggedVnic() { + mockDaos(false); + + List<String> vmNames = + vmInterfaceManager.findActiveVmsUsingNetworks(Guid.newGuid(), Collections.singletonList(NETWORK_NAME)); + assertFalse(vmNames.contains(VM_NAME)); + } + + @Test public void findNoneOfActiveVmsUsingNetworks() { - mockDaos(); + mockDaos(true); List<String> vmNames = vmInterfaceManager.findActiveVmsUsingNetworks(Guid.newGuid(), @@ -158,8 +168,8 @@ } } - private void mockDaos() { - VM vm = createVM(VM_NAME, NETWORK_NAME); + private void mockDaos(boolean pluggedInterface) { + VM vm = createVM(VM_NAME, NETWORK_NAME, pluggedInterface); when(vmDAO.getAllRunningForVds(any(Guid.class))).thenReturn(Arrays.asList(vm)); when(vmNetworkInterfaceDAO.getAllForVm(vm.getId())).thenReturn(vm.getInterfaces()); } @@ -200,10 +210,11 @@ return iface; } - protected VmNetworkInterface createNewViewableInterface() { + protected VmNetworkInterface createNewViewableInterface(boolean plugged) { VmNetworkInterface iface = new VmNetworkInterface(); iface.setId(Guid.newGuid()); iface.setMacAddress(RandomUtils.instance().nextString(10)); + iface.setPlugged(plugged); return iface; } @@ -214,13 +225,15 @@ * The VM name to be set * @param networkName * The network name to be set for the VM interface + * @param pluggedInterface + * whether the VM interface plugged or not * @return the VM instance with the appropriate data. */ - private VM createVM(String vmName, String networkName) { + private VM createVM(String vmName, String networkName, boolean pluggedInterface) { VM vm = new VM(); vm.setId(Guid.newGuid()); vm.setName(vmName); - VmNetworkInterface vmIface = createNewViewableInterface(); + VmNetworkInterface vmIface = createNewViewableInterface(pluggedInterface); vmIface.setVmId(vm.getId()); vmIface.setNetworkName(networkName); vm.getInterfaces().add(vmIface); -- To view, visit http://gerrit.ovirt.org/29878 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I10db794df55b25925423166d33549b92856e9dd0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yevgeny Zaspitsky <yzasp...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches