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 <[email protected]>
---
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, 73 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/95/30795/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..b90ec7d 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,19 +7,14 @@
 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;
@@ -101,16 +96,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(),
+                getContext(),
+                getDbFacade().getInterfaceDao());
     }
 
     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..7594ff3 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.dao.network.InterfaceDao;
 
 /**
  * Class to hold common static methods that are used in several different 
places.
@@ -111,4 +119,24 @@
     public static boolean setupNetworkSupported(Version version) {
         return VersionSupport.isActionSupported(VdcActionType.SetupNetworks, 
version);
     }
+
+    public static void removeNetworkFromHostsInCluster(Network network, Guid 
clusterId, CommandContext context, InterfaceDao interfaceDao) {
+        List<VdsNetworkInterface> nics = 
interfaceDao.getAllInterfacesByLabelForCluster(clusterId, network.getLabel());
+        removeNetworkFromHosts(network, context, nics);
+    }
+
+    public static void removeNetworkFromHostsInDataCenter(Network network, 
Guid dataCenterId, CommandContext context, InterfaceDao interfaceDao) {
+        List<VdsNetworkInterface> nics = 
interfaceDao.getAllInterfacesByLabelForDataCenter(dataCenterId, 
network.getLabel());
+        removeNetworkFromHosts(network, context, nics);
+    }
+
+    protected 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);
+        }
+    }
 }
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 1e26af6..4ba23fc 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;
@@ -10,6 +11,7 @@
 import org.ovirt.engine.core.common.businessentities.network.Network;
 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;
 
@@ -59,13 +61,27 @@
             }
         });
 
-        if (getParameters().isRemoveFromNetworkProvider() && 
getNetwork().isExternal()) {
-            removeExternalNetwork();
+        if (getNetwork().isExternal()) {
+            if (getParameters().isRemoveFromNetworkProvider()) {
+                removeExternalNetwork();
+            }
+        } else {
+            if (NetworkUtils.isLabeled(getNetwork())
+                    && 
NetworkHelper.setupNetworkSupported(getStoragePool().getcompatibility_version()))
 {
+                removeNetworkFromHosts();
+            }
         }
 
         setSucceeded(true);
     }
 
+    private void removeNetworkFromHosts() {
+        NetworkHelper.removeNetworkFromHostsInDataCenter(getNetwork(),
+                getStoragePoolId(),
+                getContext(),
+                getDbFacade().getInterfaceDao());
+    }
+
     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 9ffe5cf..09fcd07 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,6 +245,20 @@
     }
 
     @Override
+    public List<VdsNetworkInterface> getAllInterfacesByLabelForDataCenter(Guid 
dataCenterId, String label) {
+        List<VdsNetworkInterface> result = new ArrayList<>();
+
+        for (VdsNetworkInterface vdsNetworkInterface : 
getAllInterfacesByDataCenterId(dataCenterId)) {
+            final Set<String> labels = vdsNetworkInterface.getLabels();
+            if (labels != null && labels.contains(label)) {
+                result.add(vdsNetworkInterface);
+            }
+        }
+
+        return result;
+    }
+
+    @Override
     public List<VdsNetworkInterface> getAllInterfacesByLabelForCluster(Guid 
clusterId, String label) {
         List<VdsNetworkInterface> labelledNics = new ArrayList<>();
         for (VdsNetworkInterface nic : getAllInterfacesByClusterId(clusterId)) 
{


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9ebc162324ff2ed98374d6a9a3bd9d87bb69db3f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Mucha <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to