Martin Mucha has uploaded a new change for review. Change subject: core: unmanaged network queries, removing unmanaged networks via HostSetupNetworksCommand ......................................................................
core: unmanaged network queries, removing unmanaged networks via HostSetupNetworksCommand Change-Id: I6cf3d8b99b6c9909caba1d88c150859f8dc91750 Signed-off-by: Martin Mucha <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetAllUnmanagedNetworksByVdsIdQuery.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetUnmanagedNetworkByVdsIdAndNameQuery.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UnmanagedNetworksHelper.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/UnmanagedNetworkParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java 7 files changed, 183 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/37877/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetAllUnmanagedNetworksByVdsIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetAllUnmanagedNetworksByVdsIdQuery.java new file mode 100644 index 0000000..9c079eb0 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetAllUnmanagedNetworksByVdsIdQuery.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.bll.network.cluster; + +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.common.queries.IdQueryParameters; + +public class GetAllUnmanagedNetworksByVdsIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> { + public GetAllUnmanagedNetworksByVdsIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + UnmanagedNetworksHelper unmanagedNetworksHelper = new UnmanagedNetworksHelper(getParameters().getId(), + getVdsDao(), + getDbFacade().getInterfaceDao(), + getDbFacade().getNetworkDao()); + + getQueryReturnValue().setReturnValue(unmanagedNetworksHelper.getUnmanagedNetworks()); + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetUnmanagedNetworkByVdsIdAndNameQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetUnmanagedNetworkByVdsIdAndNameQuery.java new file mode 100644 index 0000000..41b4077 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/GetUnmanagedNetworkByVdsIdAndNameQuery.java @@ -0,0 +1,25 @@ +package org.ovirt.engine.core.bll.network.cluster; + +import java.util.Collections; + +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.common.queries.UnmanagedNetworkParameters; + +public class GetUnmanagedNetworkByVdsIdAndNameQuery extends QueriesCommandBase<UnmanagedNetworkParameters> { + public GetUnmanagedNetworkByVdsIdAndNameQuery(UnmanagedNetworkParameters parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + + UnmanagedNetworksHelper unmanagedNetworksHelper = new UnmanagedNetworksHelper(getParameters().getHostId(), + getVdsDao(), + getDbFacade().getInterfaceDao(), + getDbFacade().getNetworkDao()); + + String networkName = getParameters().getNetworkName(); + ////TODO MM: hack; It seems that I cannot return instance directly from query; I has to return it as single entry list, and it will be unwrapped here: org.ovirt.engine.api.restapi.resource.BackendResource.castQueryResultToEntity() ;; is there a better way? + getQueryReturnValue().setReturnValue(Collections.singletonList(unmanagedNetworksHelper.getUnmanagedNetworkByName(networkName))); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UnmanagedNetworksHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UnmanagedNetworksHelper.java new file mode 100644 index 0000000..0c21faa --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UnmanagedNetworksHelper.java @@ -0,0 +1,72 @@ +package org.ovirt.engine.core.bll.network.cluster; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.BusinessEntityMap; +import org.ovirt.engine.core.common.businessentities.UnmanagedNetwork; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VdsDAO; +import org.ovirt.engine.core.dao.network.InterfaceDao; +import org.ovirt.engine.core.dao.network.NetworkDao; + +public class UnmanagedNetworksHelper { + private final Guid vdsId; + private final VdsDAO vdsDao; + private final InterfaceDao interfaceDao; + private final NetworkDao networkDao; + private List<UnmanagedNetwork> unmanagedNetworks; + + public UnmanagedNetworksHelper(Guid vdsId, VdsDAO vdsDao, InterfaceDao interfaceDao, NetworkDao networkDao) { + this.vdsId = vdsId; + this.vdsDao = vdsDao; + this.interfaceDao = interfaceDao; + this.networkDao = networkDao; + } + + public List<UnmanagedNetwork> getUnmanagedNetworks() { + if (unmanagedNetworks == null) { + unmanagedNetworks = calculateUnmanagedNetworks(); + } + + return unmanagedNetworks; + } + + public List<UnmanagedNetwork> calculateUnmanagedNetworks() { + VDS vds = vdsDao.get(vdsId); + List<VdsNetworkInterface> vdsNetworkInterfaces = interfaceDao.getAllInterfacesForVds(vdsId); + + Guid clusterId = vds.getVdsGroupId(); + List<Network> clusterNetworks = networkDao.getAllForCluster(clusterId); + BusinessEntityMap<Network> clusterNetworkMap = new BusinessEntityMap<>(clusterNetworks); + + List<UnmanagedNetwork> unmanagedNetworks = new ArrayList<>(); + for (VdsNetworkInterface vdsNetworkInterface : vdsNetworkInterfaces) { + String networkName = vdsNetworkInterface.getNetworkName(); + if (networkName != null && !clusterNetworkMap.containsKey(networkName)) { + unmanagedNetworks.add(createUnmanagedNetworkEntity(vdsNetworkInterface, networkName)); + } + } + return unmanagedNetworks; + } + + private UnmanagedNetwork createUnmanagedNetworkEntity(VdsNetworkInterface vdsNetworkInterface, String networkName) { + return new UnmanagedNetwork() + .setNetworkName(networkName) + .setNicId(vdsNetworkInterface.getId()) + .setNicName(vdsNetworkInterface.getName()); + } + + public UnmanagedNetwork getUnmanagedNetworkByName(String networkName) { + for (UnmanagedNetwork unmanagedNetwork : getUnmanagedNetworks()) { + if (unmanagedNetwork.getNetworkName().equals(networkName)) { + return unmanagedNetwork; + } + } + + return null; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java index da54f16..98e96be 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java @@ -63,6 +63,7 @@ private BusinessEntityMap<Network> networkBusinessEntityMap; private Set<String> removedNetworks; + private Set<String> removedUnmanagedNetworks; private Set<String> removedBonds; private List<VdsNetworkInterface> existingNics; private List<NetworkAttachment> existingAttachments; @@ -229,14 +230,22 @@ final HostSetupNetworksVdsCommandParameters hostCmdParams = new HostSetupNetworksVdsCommandParameters( getVds(), getNetworks(), - getRemovedNetworks(), + getAllNetworksToRemove(), getParameters().getBonds(), getRemovedBonds()); + hostCmdParams.setRollbackOnFailure(getParameters().rollbackOnFailure()); hostCmdParams.setConectivityTimeout(timeout); boolean hostNetworkQosSupported = FeatureSupported.hostNetworkQos(getVds().getVdsGroupCompatibilityVersion()); hostCmdParams.setHostNetworkQosSupported(hostNetworkQosSupported); return hostCmdParams; + } + + private Set<String> getAllNetworksToRemove() { + Set<String> result = new HashSet<>(getRemovedNetworks().size() + getRemovedUnmanagedNetworks().size()); + result.addAll(getRemovedNetworks()); + result.addAll(getRemovedUnmanagedNetworks()); + return result; } protected Integer getSetupNetworksTimeout() { @@ -256,7 +265,8 @@ return getNetworks().isEmpty() && getRemovedNetworks().isEmpty() && getParameters().getBonds().isEmpty() - && getRemovedBonds().isEmpty(); + && getRemovedBonds().isEmpty() + && getRemovedUnmanagedNetworks().isEmpty(); } private Set<String> getRemovedBonds() { @@ -305,6 +315,14 @@ return removedNetworks; } + private Set<String> getRemovedUnmanagedNetworks() { + if (removedUnmanagedNetworks == null) { + this.removedUnmanagedNetworks = new HashSet<>(getParameters().getRemovedUnmanagedNetworks()); + } + + return removedUnmanagedNetworks; + } + private List<HostNetwork> getNetworks() { if (networksToConfigure == null) { networksToConfigure = new ArrayList<>(getParameters().getNetworkAttachments().size()); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java index ed164fa..38e046d 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java @@ -26,6 +26,8 @@ private List<Bond> removedBonds; + private List<String> removedUnmanagedNetworks; + private boolean rollbackOnFailure = true; @ConfiguredRange(min = 1, maxConfigValue = ConfigValues.NetworkConnectivityCheckTimeoutInSeconds, @@ -41,6 +43,7 @@ setRemovedNetworkAttachments(new ArrayList<NetworkAttachment>()); setBonds(new ArrayList<Bond>()); setRemovedBonds(new ArrayList<Bond>()); + setRemovedUnmanagedNetworks(new ArrayList<String>()); } public boolean rollbackOnFailure() { @@ -90,5 +93,13 @@ public void setRemovedBonds(List<Bond> removedBonds) { this.removedBonds = removedBonds; } + + public List<String> getRemovedUnmanagedNetworks() { + return removedUnmanagedNetworks; + } + + public void setRemovedUnmanagedNetworks(List<String> removedUnmanagedNetworks) { + this.removedUnmanagedNetworks = removedUnmanagedNetworks; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/UnmanagedNetworkParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/UnmanagedNetworkParameters.java new file mode 100644 index 0000000..1d6b33f --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/UnmanagedNetworkParameters.java @@ -0,0 +1,32 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.compat.Guid; + +public class UnmanagedNetworkParameters extends VdcQueryParametersBase { + + private static final long serialVersionUID = 3874444912691547792L; + private Guid hostId; + private String networkName; + + public UnmanagedNetworkParameters() { + } + + public UnmanagedNetworkParameters(Guid hostId, String networkName) { + this.hostId = hostId; + this.networkName = networkName; + } + + public Guid getHostId() { + return hostId; + } + + public String getNetworkName() { + return networkName; + } + + @Override + public UnmanagedNetworkParameters withoutRefresh() { + super.withoutRefresh(); + return this; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 4479492..84354d6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -64,6 +64,8 @@ GetVdsFreeBondsByVdsId, GetAllNetworks(VdcQueryAuthType.User), GetAllNetworksByClusterId(VdcQueryAuthType.User), + GetAllUnmanagedNetworksByVdsId(VdcQueryAuthType.User), + GetUnmanagedNetworkByVdsIdAndName(VdcQueryAuthType.User), GetNetworksByDataCenterId(VdcQueryAuthType.User), GetAllNetworksByQosId, GetManagementInterfaceAddressByVmId(VdcQueryAuthType.User), -- To view, visit http://gerrit.ovirt.org/37877 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6cf3d8b99b6c9909caba1d88c150859f8dc91750 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
