Lior Vernia has uploaded a new change for review. Change subject: engine: Extract data from network entry once ......................................................................
engine: Extract data from network entry once The same operations used to be performed for every interface linked to a network/bridge, where the data really only had to be extracted once. Change-Id: Ie0dda9426feba172ce54a467c89628a0328edbc8 Signed-off-by: Lior Vernia <[email protected]> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java 1 file changed, 37 insertions(+), 25 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/79/37079/1 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 816d8c1..c3de166 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 @@ -52,6 +52,7 @@ import org.ovirt.engine.core.common.businessentities.VmRngDevice; import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.businessentities.network.Bond; +import org.ovirt.engine.core.common.businessentities.network.HostNetworkQos; import org.ovirt.engine.core.common.businessentities.network.InterfaceStatus; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; @@ -1300,19 +1301,33 @@ // Networks collection (name point to list of nics or bonds) Map<String, Object> networks = (Map<String, Object>) xmlRpcStruct.get(VdsProperties.NETWORKS); + Map<String, Object> bridges = + (Map<String, Object>) xmlRpcStruct.get(VdsProperties.NETWORK_BRIDGES); + Map<String, VdsNetworkInterface> vdsInterfaces = Entities.entitiesByName(vds.getInterfaces()); + boolean bridgesReported = FeatureSupported.bridgesReportByVdsm(vds.getVdsGroupCompatibilityVersion()); if (networks != null) { vds.getNetworks().clear(); for (Entry<String, Object> entry : networks.entrySet()) { Map<String, Object> network = (Map<String, Object>) entry.getValue(); if (network != null) { + String interfaceName = (String) network.get(VdsProperties.INTERFACE); + VdsNetworkInterface networkIface = vdsInterfaces.get(interfaceName); + Map<String, Object> bridge = + (bridges == null) ? null : (Map<String, Object>) bridges.get(interfaceName); + + boolean bridgedNetwork = isBridgedNetwork(network); + HostNetworkQos qos = new HostNetworkQosMapper(network).deserialize(); Network net = createNetworkData(entry.getKey(), network); - List<VdsNetworkInterface> interfaces = findNetworkInterfaces(vds, xmlRpcStruct, network); - + List<VdsNetworkInterface> interfaces = + findNetworkInterfaces(vdsInterfaces, bridgesReported, networkIface, + bridgesReported ? bridge : network); for (VdsNetworkInterface iface : interfaces) { updateNetworkDetailsInInterface(iface, network, + bridgedNetwork, + qos, vds, net); } @@ -1351,31 +1366,22 @@ return logable; } - private static List<VdsNetworkInterface> findNetworkInterfaces(VDS vds, - Map<String, Object> xmlRpcStruct, - Map<String, Object> network) { - - Map<String, VdsNetworkInterface> vdsInterfaces = Entities.entitiesByName(vds.getInterfaces()); + private static List<VdsNetworkInterface> findNetworkInterfaces(Map<String, VdsNetworkInterface> vdsInterfaces, + boolean bridgesReported, + VdsNetworkInterface iface, + Map<String, Object> entry) { List<VdsNetworkInterface> interfaces = new ArrayList<VdsNetworkInterface>(); - if (FeatureSupported.bridgesReportByVdsm(vds.getVdsGroupCompatibilityVersion())) { - VdsNetworkInterface iface = null; - String interfaceName = (String) network.get(VdsProperties.INTERFACE); - if (interfaceName != null) { - iface = vdsInterfaces.get(interfaceName); - if (iface == null) { - Map<String, Object> bridges = - (Map<String, Object>) xmlRpcStruct.get(VdsProperties.NETWORK_BRIDGES); - if (bridges != null && bridges.containsKey(interfaceName)) { - interfaces.addAll(findBridgedNetworkInterfaces((Map<String, Object>) bridges.get(interfaceName), - vdsInterfaces)); - } - } else { - interfaces.add(iface); + if (bridgesReported) { + if (iface == null) { + if (entry != null) { + interfaces.addAll(findBridgedNetworkInterfaces(entry, vdsInterfaces)); } + } else { + interfaces.add(iface); } } else { - interfaces.addAll(findBridgedNetworkInterfaces(network, vdsInterfaces)); + interfaces.addAll(findBridgedNetworkInterfaces(entry, vdsInterfaces)); } return interfaces; } @@ -1542,11 +1548,19 @@ * The interface to update. * @param network * Network struct to get details from. + * @param bridgedNetwork + * Whether the network is bridged. + * @param qos + * The reported network QoS. + * @param host + * The host to which the interface belongs. * @param net * Network to get details from. */ private static void updateNetworkDetailsInInterface(VdsNetworkInterface iface, Map<String, Object> network, + boolean bridgedNetwork, + HostNetworkQos qos, VDS host, Network net) { @@ -1560,7 +1574,6 @@ iface.setAddress(net.getAddr()); iface.setSubnet(net.getSubnet()); - boolean bridgedNetwork = isBridgedNetwork(network); iface.setBridged(bridgedNetwork); setGatewayIfNecessary(iface, host, net.getGateway()); @@ -1569,8 +1582,7 @@ addBootProtocol(networkConfig, host, iface); } - HostNetworkQosMapper qosMapper = new HostNetworkQosMapper(network); - iface.setQos(qosMapper.deserialize()); + iface.setQos(qos); } } -- To view, visit http://gerrit.ovirt.org/37079 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie0dda9426feba172ce54a467c89628a0328edbc8 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
