Lior Vernia has uploaded a new change for review.

Change subject: engine: Re-assign display/migration roles to mgmt network
......................................................................

engine: Re-assign display/migration roles to mgmt network

While we recently started marking the management network explicitly as
display and migration by default, we did not take care of the scenario
where the roles are assigned to another network which is then removed
- in which case we're left with no explicit display/migration network,
and only fall back to the management network implicitly.

Now when a network holding the role is removed, it is re-assigned to
the management network.

Change-Id: I1fe94bdfda672ddf51b075415a02a80ff634a90a
Bug-Url: https://bugzilla.redhat.com/1135785
Signed-off-by: Lior Vernia <lver...@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/DetachNetworksFromClusterCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterHelper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java
4 files changed, 60 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/37/32637/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..b9733ca 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
@@ -42,7 +42,9 @@
 
             @Override
             public Void runInTransaction() {
-                getNetworkClusterDAO().remove(getParameters().getVdsGroupId(), 
getParameters().getNetworkCluster().getNetworkId());
+                NetworkClusterHelper helper = new 
NetworkClusterHelper(getParameters().getNetworkCluster());
+                helper.removeNetworkAndReassignRoles();
+
                 return null;
             }
         });
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java
index 09e8b55..a2cf13f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java
@@ -45,8 +45,8 @@
             @Override
             public Void runInTransaction() {
                 for (AttachNetworkToVdsGroupParameter param : 
getParameters().getClusterNetworksParameters()) {
-                    
getNetworkClusterDAO().remove(getParameters().getVdsGroupId(),
-                            param.getNetworkCluster().getNetworkId());
+                    NetworkClusterHelper helper = new 
NetworkClusterHelper(param.getNetworkCluster());
+                    helper.removeNetworkAndReassignRoles();
                 }
 
                 return null;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterHelper.java
index 3753934..d1cee0a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterHelper.java
@@ -15,6 +15,8 @@
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.network.NetworkClusterDao;
+import org.ovirt.engine.core.utils.NetworkUtils;
 import org.ovirt.engine.core.utils.linq.LinqUtils;
 import org.ovirt.engine.core.utils.linq.Predicate;
 
@@ -23,6 +25,49 @@
  */
 public class NetworkClusterHelper {
 
+    private final NetworkCluster networkCluster;
+    private NetworkCluster managementNetworkCluster;
+
+    public NetworkClusterHelper(NetworkCluster networkCluster) {
+        this.networkCluster = networkCluster;
+    }
+
+    private NetworkClusterDao getNetworkClusterDao() {
+        return DbFacade.getInstance().getNetworkClusterDao();
+    }
+
+    private NetworkCluster getManagementNetworkCluster() {
+        if (managementNetworkCluster == null) {
+            Guid clusterId = networkCluster.getClusterId();
+            Network mgmt =
+                    DbFacade.getInstance()
+                            .getNetworkDao()
+                            
.getByNameAndCluster(NetworkUtils.getEngineNetwork(), clusterId);
+            managementNetworkCluster = getNetworkClusterDao().get(new 
NetworkClusterId(clusterId, mgmt.getId()));
+        }
+
+        return managementNetworkCluster;
+    }
+
+    public void removeNetworkAndReassignRoles() {
+        getNetworkClusterDao().remove(networkCluster.getClusterId(), 
networkCluster.getNetworkId());
+        boolean updateManagementNetwork = false;
+
+        if (networkCluster.isDisplay()) {
+            getManagementNetworkCluster().setDisplay(true);
+            updateManagementNetwork = true;
+        }
+
+        if (networkCluster.isMigration()) {
+            getManagementNetworkCluster().setMigration(true);
+            updateManagementNetwork = true;
+        }
+
+        if (updateManagementNetwork) {
+            getNetworkClusterDao().update(managementNetworkCluster);
+        }
+    }
+
     /**
      * Set the network on cluster status in the DB to {@link 
NetworkStatus#OPERATIONAL} or
      * {@link NetworkStatus#NON_OPERATIONAL} depending on the network state in 
the cluster (if it's implemented by all
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..0db57c4 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.NetworkClusterHelper;
 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;
@@ -8,6 +9,7 @@
 import org.ovirt.engine.core.common.action.RemoveNetworkParameters;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
@@ -52,6 +54,7 @@
             @Override
             public Void runInTransaction() {
                 removeVnicProfiles();
+                removeFromClusters();
                 getCompensationContext().snapshotEntity(getNetwork());
                 getNetworkDAO().remove(getNetwork().getId());
                 getCompensationContext().stateChanged();
@@ -66,6 +69,13 @@
         setSucceeded(true);
     }
 
+    private void removeFromClusters() {
+        for (NetworkCluster networkCluster : 
getNetworkClusterDAO().getAllForNetwork(getNetwork().getId())) {
+            NetworkClusterHelper helper = new 
NetworkClusterHelper(networkCluster);
+            helper.removeNetworkAndReassignRoles();
+        }
+    }
+
     private void removeExternalNetwork() {
         NetworkProviderProxy proxy = 
ProviderProxyFactory.getInstance().create(getProvider());
         proxy.remove(getNetwork().getProvidedBy().getExternalId());


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

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

Reply via email to