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

Reply via email to