Martin Mucha has uploaded a new change for review.

Change subject: core: Removal of labelled network from DC inconsistent with 
removal from cluster
......................................................................

core: Removal of labelled network from DC inconsistent with removal from cluster

- when removing labeled network from dc, "remove [that] network from
host". I.e. call PersistentSetupNetworks so that given network is
removed from host.

Change-Id: I9ebc162324ff2ed98374d6a9a3bd9d87bb69db3f
Bug-Url: https://bugzilla.redhat.com/1091692
Signed-off-by: Martin Mucha <mmu...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
5 files changed, 78 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/32366/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java
index 8f62f6c..e5f7acc 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java
@@ -7,23 +7,17 @@
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.VdsGroupCommandBase;
-import org.ovirt.engine.core.bll.network.NetworkParametersBuilder;
-import org.ovirt.engine.core.bll.network.RemoveNetworkParametersBuilder;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.NetworkValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.AttachNetworkToVdsGroupParameter;
-import org.ovirt.engine.core.common.action.VdcActionParametersBase;
-import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 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.compat.Guid;
-import org.ovirt.engine.core.utils.NetworkUtils;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
@@ -47,8 +41,7 @@
             }
         });
 
-        if (!getPersistedNetwork().isExternal() && 
NetworkUtils.isLabeled(getPersistedNetwork())
-                && 
NetworkHelper.setupNetworkSupported(getVdsGroup().getcompatibility_version())) {
+        if 
(NetworkHelper.shouldRemoveNetworkFromHostUponNetworkRemoval(getPersistedNetwork(),
 getVdsGroup().getcompatibility_version())) {
             removeNetworkFromHosts();
         }
 
@@ -101,16 +94,10 @@
     }
 
     private void removeNetworkFromHosts() {
-        List<VdsNetworkInterface> nics =
-                
getDbFacade().getInterfaceDao().getAllInterfacesByLabelForCluster(getParameters().getVdsGroupId(),
-                        getPersistedNetwork().getLabel());
-        RemoveNetworkParametersBuilder builder = new 
RemoveNetworkParametersBuilder(getPersistedNetwork(), getContext());
-        ArrayList<VdcActionParametersBase> parameters = 
builder.buildParameters(nics);
-
-        if (!parameters.isEmpty()) {
-            NetworkParametersBuilder.updateParametersSequencing(parameters);
-            runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, 
parameters);
-        }
+        NetworkHelper.removeNetworkFromHostsInCluster(getPersistedNetwork(),
+                getParameters().getVdsGroupId(),
+                cloneContextAndDetachFromParent()
+        );
     }
 
     private class DetachNetworkValidator extends NetworkValidator {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
index 1d38506..d196b8a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
@@ -1,18 +1,26 @@
 package org.ovirt.engine.core.bll.network.cluster;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import org.ovirt.engine.core.bll.Backend;
 import org.ovirt.engine.core.bll.MultiLevelAdministrationHandler;
 import org.ovirt.engine.core.bll.PredefinedRoles;
+import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.network.NetworkParametersBuilder;
+import org.ovirt.engine.core.bll.network.RemoveNetworkParametersBuilder;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.Permissions;
 import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.utils.NetworkUtils;
 
 /**
  * Class to hold common static methods that are used in several different 
places.
@@ -111,4 +119,29 @@
     public static boolean setupNetworkSupported(Version version) {
         return VersionSupport.isActionSupported(VdcActionType.SetupNetworks, 
version);
     }
+
+    public static void removeNetworkFromHostsInCluster(Network network, Guid 
clusterId, CommandContext context) {
+        List<VdsNetworkInterface> nics = 
DbFacade.getInstance().getInterfaceDao().getAllInterfacesByLabelForCluster(clusterId,
 network.getLabel());
+        removeNetworkFromHosts(network, context, nics);
+    }
+
+    public static void removeNetworkFromHostsInDataCenter(Network network, 
Guid dataCenterId, CommandContext context) {
+        List<VdsNetworkInterface> nics = 
DbFacade.getInstance().getInterfaceDao().getAllInterfacesByLabelForDataCenter(dataCenterId,
 network.getLabel());
+        removeNetworkFromHosts(network, context, nics);
+    }
+
+    private static void removeNetworkFromHosts(Network network, CommandContext 
context, List<VdsNetworkInterface> nics) {
+        RemoveNetworkParametersBuilder builder = new 
RemoveNetworkParametersBuilder(network, context);
+        ArrayList<VdcActionParametersBase> parameters = 
builder.buildParameters(nics);
+
+        if (!parameters.isEmpty()) {
+            NetworkParametersBuilder.updateParametersSequencing(parameters);
+            
Backend.getInstance().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks,
 parameters, context);
+        }
+    }
+
+    public static boolean 
shouldRemoveNetworkFromHostUponNetworkRemoval(Network persistedNetwork, Version 
compatibilityVersion) {
+        return !persistedNetwork.isExternal() && 
NetworkUtils.isLabeled(persistedNetwork)
+                && setupNetworkSupported(compatibilityVersion);
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java
index c3620f7..f77faef 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.bll.network.dc;
 
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
+import org.ovirt.engine.core.bll.network.cluster.NetworkHelper;
 import org.ovirt.engine.core.bll.provider.ProviderProxyFactory;
 import org.ovirt.engine.core.bll.provider.network.NetworkProviderProxy;
 import org.ovirt.engine.core.bll.validator.NetworkValidator;
@@ -59,13 +60,26 @@
             }
         });
 
-        if (getParameters().isRemoveFromNetworkProvider() && 
getNetwork().isExternal()) {
-            removeExternalNetwork();
+        if (getNetwork().isExternal()) {
+            if (getParameters().isRemoveFromNetworkProvider()) {
+                removeExternalNetwork();
+            }
+        }
+
+        if 
(NetworkHelper.shouldRemoveNetworkFromHostUponNetworkRemoval(getNetwork(), 
getStoragePool().getcompatibility_version())) {
+            removeNetworkFromHosts();
         }
 
         setSucceeded(true);
     }
 
+    private void removeNetworkFromHosts() {
+        NetworkHelper.removeNetworkFromHostsInDataCenter(getNetwork(),
+                getStoragePoolId(),
+                cloneContextAndDetachFromParent()
+        );
+    }
+
     private void removeExternalNetwork() {
         NetworkProviderProxy proxy = 
ProviderProxyFactory.getInstance().create(getProvider());
         proxy.remove(getNetwork().getProvidedBy().getExternalId());
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
index e87e64e..0af7e26 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
@@ -158,6 +158,15 @@
      */
     List<VdsNetworkInterface> getAllInterfacesByClusterId(Guid clusterId);
 
+
+    /**
+     * @param dataCenterId the date center where the hosts reside in
+     * @param label label to check.
+     *
+     * @return all interfaces within a specific data center
+     */
+    List<VdsNetworkInterface> getAllInterfacesByLabelForDataCenter(Guid 
dataCenterId, String label);
+
     /**
      * Retrieves all interfaces marked with a given label
      *
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
index 94386da..e3f37a1 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
@@ -245,15 +245,25 @@
     }
 
     @Override
+    public List<VdsNetworkInterface> getAllInterfacesByLabelForDataCenter(Guid 
dataCenterId, String label) {
+        return 
nicsContainingLabel(getAllInterfacesByDataCenterId(dataCenterId), label);
+    }
+
+    @Override
     public List<VdsNetworkInterface> getAllInterfacesByLabelForCluster(Guid 
clusterId, String label) {
-        List<VdsNetworkInterface> labelledNics = new ArrayList<>();
-        for (VdsNetworkInterface nic : getAllInterfacesByClusterId(clusterId)) 
{
-            if (nic.getLabels() != null && nic.getLabels().contains(label)) {
-                labelledNics.add(nic);
+        return nicsContainingLabel(getAllInterfacesByClusterId(clusterId), 
label);
+    }
+
+    protected List<VdsNetworkInterface> 
nicsContainingLabel(List<VdsNetworkInterface> interfaces, String label) {
+        List<VdsNetworkInterface> result = new ArrayList<>();
+
+        for (VdsNetworkInterface vdsNetworkInterface : interfaces) {
+            if (vdsNetworkInterface.getLabels() != null && 
vdsNetworkInterface.getLabels().contains(label)) {
+                result.add(vdsNetworkInterface);
             }
         }
 
-        return labelledNics;
+        return result;
     }
 
     private List<VdsNetworkInterface> getAllInterfacesByDataCenterId(Guid 
dataCenterId) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9ebc162324ff2ed98374d6a9a3bd9d87bb69db3f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Martin Mucha <mmu...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to