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

Reply via email to