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

Reply via email to