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
