Lior Vernia has uploaded a new change for review. Change subject: engine: Include network QoS in Setup Networks ......................................................................
engine: Include network QoS in Setup Networks Modified the Setup Networks VDS command cycle to also account for QoS configuration on the host's networks - any QoS configuration on a network is serialized in the Setup Networks command, and any QoS configuration reported when the network data is collected back from VDSM is deserialized into VdsNetworkInterface and persisted. Change-Id: I5f0d2c3fe430961f7a402518ce1358938ed52063 Signed-off-by: Lior Vernia <lver...@redhat.com> --- M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java 5 files changed, 38 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/04/22604/1 diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java index 7e889f4..ae18ed1 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java @@ -170,7 +170,8 @@ public static boolean isNetworkInSync(VdsNetworkInterface iface, Network network) { return (network.getMtu() == 0 || iface.getMtu() == network.getMtu()) && Objects.equals(iface.getVlanId(), network.getVlanId()) - && iface.isBridged() == network.isVmNetwork(); + && iface.isBridged() == network.isVmNetwork() + && Objects.equals(iface.getQos(), network.getQos()); } /** diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java index a44162f..9403b53 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java @@ -15,6 +15,7 @@ import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface.NetworkImplementationDetails; import org.ovirt.engine.core.common.vdscommands.VdsIdAndVdsVDSCommandParametersBase; @@ -23,6 +24,7 @@ import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dao.network.InterfaceDao; +import org.ovirt.engine.core.dao.network.NetworkQoSDao; import org.ovirt.engine.core.utils.NetworkUtils; import org.ovirt.engine.core.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; @@ -174,14 +176,17 @@ if (dbIface.getName().equals(vdsIface.getName())) { // we preserve only the ID from the Database // everything else is what we got from getVdsCapabilities + // also update related QoS entities vdsIface.setId(dbIface.getId()); dbIfacesToBatch.add(vdsIface); updatedIfaces.add(vdsIface.getName()); + persistQosChanges(vdsIface.getQos(), dbIface.getQos()); found = true; break; } } if (!found) { + persistQosChanges(null, dbIface.getQos()); interfaceDAO.removeInterfaceFromVds(dbIface.getId()); interfaceDAO.removeStatisticsForVds(dbIface.getId()); } @@ -194,12 +199,30 @@ // now all that left is add the interfaces that not exists in the Database for (VdsNetworkInterface vdsIface : vds.getInterfaces()) { if (!updatedIfaces.contains(vdsIface.getName())) { + persistQosChanges(vdsIface.getQos(), null); interfaceDAO.saveInterfaceForVds(vdsIface); interfaceDAO.saveStatisticsForVds(vdsIface.getStatistics()); } } } + private static void persistQosChanges(NetworkQoS newQos, NetworkQoS oldQos) { + NetworkQoSDao qosDao = DbFacade.getInstance().getQosDao(); + if (newQos == null) { + if (oldQos != null) { + qosDao.remove(oldQos.getId()); + } + } else { + if (oldQos == null) { + newQos.setId(Guid.newGuid()); + qosDao.save(newQos); + } else { + newQos.setId(oldQos.getId()); + qosDao.update(newQos); + } + } + } + private static String getVmNetworksImplementedAsBridgeless(VDS vds, List<Network> clusterNetworks) { Map<String, VdsNetworkInterface> interfacesByNetworkName = Entities.hostInterfacesByNetworkName(vds.getInterfaces()); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java index b37de8e..6c01178 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommand.java @@ -32,7 +32,7 @@ private Map<String, Object> generateNetworks() { Map<String, Object> networks = new HashMap<String, Object>(); for (Network network : getParameters().getNetworks()) { - Map<String, String> opts = new HashMap<String, String>(); + Map<String, Object> opts = new HashMap<String, Object>(); VdsNetworkInterface iface = findNetworkInterface(network.getName(), getParameters().getInterfaces(), getParameters().getBonds()); String ifaceNameWithoutVlan = NetworkUtils.stripVlan(iface.getName()); @@ -56,6 +56,10 @@ opts.put(VdsProperties.STP, network.getStp() ? "yes" : "no"); } + NetworkQosMapper qosMapper = + new NetworkQosMapper(opts, VdsProperties.HOST_QOS_INBOUND, VdsProperties.HOST_QOS_OUTBOUND); + qosMapper.serialize(network.getQos()); + networks.put(network.getName(), opts); } @@ -66,7 +70,7 @@ return networks; } - private void addBootProtocol(Map<String, String> opts, VdsNetworkInterface iface) { + private void addBootProtocol(Map<String, Object> opts, VdsNetworkInterface iface) { switch (iface.getBootProtocol()) { case DHCP: opts.put(BOOT_PROTOCOL, DHCP_BOOT_PROTOCOL); @@ -117,7 +121,7 @@ return options; } - private static void putIfNotEmpty(Map<String, String> map, String key, String value) { + private static void putIfNotEmpty(Map<String, Object> map, String key, String value) { if (!StringUtils.isEmpty(value)) { map.put(key, value); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java index 8761707..952f314 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java @@ -1262,6 +1262,10 @@ Map<String, Object> networkConfig = (Map<String, Object>) network.get("cfg"); addBootProtocol(networkConfig, host, iface); } + + NetworkQosMapper qosMapper = + new NetworkQosMapper(network, VdsProperties.HOST_QOS_INBOUND, VdsProperties.HOST_QOS_OUTBOUND); + iface.setQos(qosMapper.deserialize()); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 83ed398..e8505e2 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -300,6 +300,8 @@ public static final String action = "action"; // Network QoS + public static final String HOST_QOS_INBOUND = "qosInbound"; + public static final String HOST_QOS_OUTBOUND = "qosOutbound"; public static final String QOS_INBOUND = "inbound"; public static final String QOS_OUTBOUND = "outbound"; public static final String QOS_AVERAGE = "average"; -- To view, visit http://gerrit.ovirt.org/22604 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5f0d2c3fe430961f7a402518ce1358938ed52063 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <lver...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches