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