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