Moti Asayag has uploaded a new change for review. Change subject: engine: Allow network update if vnics are unplugged ......................................................................
engine: Allow network update if vnics are unplugged If a network is configured on running VMs, but no active nic is using it, the update should be permitted. Change-Id: I0bdbc159edb95b530b1c0b04b81589495a2c1123 Bug-Url: https://bugzilla.redhat.com/1059741 Signed-off-by: Moti Asayag <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java 2 files changed, 29 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/25/24525/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java index 5209e6a..1ccc4aa 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java @@ -27,10 +27,12 @@ import org.ovirt.engine.core.common.action.PersistentSetupNetworksParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.validation.group.UpdateEntity; import org.ovirt.engine.core.compat.Guid; @@ -229,9 +231,17 @@ public ValidationResult networkNotUsedByRunningVms() { List<VM> runningVms = new ArrayList<>(); + List<VmNetworkInterface> vnics = getDbFacade().getVmNetworkInterfaceDao().getAllForNetwork(network.getId()); + Map<Guid, List<VmNetworkInterface>> vnicsByVmId = Entities.vmInterfacesByVmId(vnics); + for (VM vm : getVms()) { if (vm.isRunningOrPaused()) { - runningVms.add(vm); + for (VmNetworkInterface nic : vnicsByVmId.get(vm.getId())) { + if (nic.isPlugged() && nic.isLinked()) { + runningVms.add(vm); + break; + } + } } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java index 2757432..acc9d34 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java @@ -13,6 +13,7 @@ import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; +import org.ovirt.engine.core.compat.Guid; /** * General utility class for common entities functions @@ -61,6 +62,23 @@ } } + public static <E extends VmNetworkInterface> Map<Guid, List<E>> vmInterfacesByVmId(List<E> vnics) { + if (vnics == null || vnics.isEmpty()) { + return Collections.emptyMap(); + } + + Map<Guid, List<E>> map = new HashMap<Guid, List<E>>(); + for (E vnic : vnics) { + if (!map.containsKey(vnic.getVmId())) { + map.put(vnic.getVmId(), new ArrayList<E>()); + } + + map.get(vnic.getVmId()).add(vnic); + } + + return map; + } + public static <E extends VdsNetworkInterface> Map<String, E> hostInterfacesByNetworkName(Collection<E> entityList) { if (entityList != null) { Map<String, E> map = new HashMap<String, E>(); -- To view, visit http://gerrit.ovirt.org/24525 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0bdbc159edb95b530b1c0b04b81589495a2c1123 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
