Gilad Chaplik has uploaded a new change for review.

Change subject: db: aggregate qos in db and dal
......................................................................

db: aggregate qos in db and dal

DB and DAL changes: extend netwok_qos, rename it to qos, have a type field 
(QoSType),
all other limits wil be added here (sparse matrix).

Current network_qos dal flows are reused to benefit all future qos types.

For more information see: http://www.ovirt.org/Features/aggregate_QoS

Change-Id: I1a9af59277b5055453159f002f19046c0051d63b
Signed-off-by: Gilad Chaplik <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllNetworkQosByStoragePoolIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/GetVdsInterfacesByVdsIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/NetworkQoSCommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VmNicValidatorTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
D 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java
D 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoFacadeImpl.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/BaseQosDaoFacadeImpl.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDao.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoFacadeImpl.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/QosDao.java
M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
R 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
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/VmInfoBuilder.java
M 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java
M packaging/dbscripts/create_views.sql
D packaging/dbscripts/network_qos_sp.sql
A packaging/dbscripts/qos_sp.sql
A packaging/dbscripts/upgrade/03_05_0330_aggregate_qos.sql
31 files changed, 329 insertions(+), 238 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/27094/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllNetworkQosByStoragePoolIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllNetworkQosByStoragePoolIdQuery.java
index 7dc10ce..383f114 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllNetworkQosByStoragePoolIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllNetworkQosByStoragePoolIdQuery.java
@@ -11,6 +11,6 @@
 
     @Override
     protected void executeQueryCommand() {
-        
getQueryReturnValue().setReturnValue(getDbFacade().getQosDao().getAllForStoragePoolId(getParameters().getId()));
+        
getQueryReturnValue().setReturnValue(getDbFacade().getNetworkQosDao().getAllForStoragePoolId(getParameters().getId()));
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
index 13691fc..3ae4e46 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java
@@ -33,6 +33,7 @@
 import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.validation.group.UpdateEntity;
 import org.ovirt.engine.core.compat.Guid;
@@ -415,7 +416,7 @@
             for (VdsNetworkInterface nic : nics) {
                 if (!NetworkUtils.isNetworkInSync(nic,
                         getNetwork(),
-                        
getDbFacade().getQosDao().get(getNetwork().getQosId()))) {
+                        
(NetworkQoS)getDbFacade().getNetworkQosDao().get(getNetwork().getQosId()))) {
                     hostIdsToSync.add(nic.getVdsId());
                 }
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/GetVdsInterfacesByVdsIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/GetVdsInterfacesByVdsIdQuery.java
index 287aa962..6fea2f0 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/GetVdsInterfacesByVdsIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/GetVdsInterfacesByVdsIdQuery.java
@@ -11,7 +11,7 @@
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.NetworkUtils;
 import org.ovirt.engine.core.utils.linq.LinqUtils;
 import org.ovirt.engine.core.utils.linq.Predicate;
@@ -48,7 +48,7 @@
 
         if (!list.isEmpty()) {
             VdsStatic vdsStatic = 
getDbFacade().getVdsStaticDao().get(getParameters().getId());
-            NetworkQoSDao qosDao = getDbFacade().getQosDao();
+            NetworkQosDao qosDao = getDbFacade().getNetworkQosDao();
             Map<String, Network> networks = Entities.entitiesByName(
                     
getDbFacade().getNetworkDao().getAllForCluster(vdsStatic.getVdsGroupId()));
             for (final VdsNetworkInterface i : list) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java
index 48f7b5e..a5ae041 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelper.java
@@ -24,33 +24,33 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.NetworkUtils;
 
 public class SetupNetworksHelper {
     protected static final String VIOLATING_ENTITIES_LIST_FORMAT = "${0}_LIST 
{1}";
-    private SetupNetworksParameters params;
-    private VDS vds;
-    private Map<VdcBllMessages, List<String>> violations = new 
HashMap<VdcBllMessages, List<String>>();
+    private final SetupNetworksParameters params;
+    private final VDS vds;
+    private final Map<VdcBllMessages, List<String>> violations = new 
HashMap<VdcBllMessages, List<String>>();
     private Map<String, VdsNetworkInterface> existingIfaces;
     private Map<String, Network> existingClusterNetworks;
 
-    private List<Network> modifiedNetworks = new ArrayList<Network>();
-    private List<String> removedNetworks = new ArrayList<String>();
-    private Map<String, VdsNetworkInterface> modifiedBonds = new 
HashMap<String, VdsNetworkInterface>();
-    private Map<String, VdsNetworkInterface> removedBonds = new 
HashMap<String, VdsNetworkInterface>();
-    private List<VdsNetworkInterface> modifiedInterfaces = new ArrayList<>();
+    private final List<Network> modifiedNetworks = new ArrayList<Network>();
+    private final List<String> removedNetworks = new ArrayList<String>();
+    private final Map<String, VdsNetworkInterface> modifiedBonds = new 
HashMap<String, VdsNetworkInterface>();
+    private final Map<String, VdsNetworkInterface> removedBonds = new 
HashMap<String, VdsNetworkInterface>();
+    private final List<VdsNetworkInterface> modifiedInterfaces = new 
ArrayList<>();
 
     /** All interface`s names that were processed by the helper. */
-    private Set<String> ifaceNames = new HashSet<String>();
+    private final Set<String> ifaceNames = new HashSet<String>();
 
     /** Map of all bonds which were processed by the helper. Key = bond name, 
Value = list of slave NICs. */
-    private Map<String, List<VdsNetworkInterface>> bonds = new HashMap<String, 
List<VdsNetworkInterface>>();
+    private final Map<String, List<VdsNetworkInterface>> bonds = new 
HashMap<String, List<VdsNetworkInterface>>();
 
     /** All network`s names that are attached to some sort of interface. */
-    private Set<String> attachedNetworksNames = new HashSet<String>();
+    private final Set<String> attachedNetworksNames = new HashSet<String>();
 
-    private Map<String, List<NetworkType>> ifacesWithExclusiveNetwork = new 
HashMap<String, List<NetworkType>>();
+    private final Map<String, List<NetworkType>> ifacesWithExclusiveNetwork = 
new HashMap<String, List<NetworkType>>();
 
     private final boolean hostNetworkQosSupported;
 
@@ -315,7 +315,7 @@
         if (existingIfaces == null) {
             List<VdsNetworkInterface> ifaces =
                     
getDbFacade().getInterfaceDao().getAllInterfacesForVds(params.getVdsId());
-            NetworkQoSDao qosDao = getDbFacade().getQosDao();
+            NetworkQosDao qosDao = getDbFacade().getNetworkQosDao();
 
             for (VdsNetworkInterface iface : ifaces) {
                 Network network = 
getExistingClusterNetworks().get(iface.getNetworkName());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/NetworkQoSCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/NetworkQoSCommandBase.java
index 2e22ad7..6b3f3f1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/NetworkQoSCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/qos/NetworkQoSCommandBase.java
@@ -1,15 +1,15 @@
 package org.ovirt.engine.core.bll.qos;
 
+import java.util.Collections;
+import java.util.List;
+
 import org.ovirt.engine.core.bll.CommandBase;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.NetworkQoSParametersBase;
 import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
-
-import java.util.Collections;
-import java.util.List;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 
 
 public abstract class NetworkQoSCommandBase extends 
CommandBase<NetworkQoSParametersBase> {
@@ -51,8 +51,8 @@
                 VdcObjectType.StoragePool, getActionType().getActionGroup()));
     }
 
-    protected NetworkQoSDao getNetworkQoSDao() {
-        return getDbFacade().getQosDao();
+    protected NetworkQosDao getNetworkQoSDao() {
+        return getDbFacade().getNetworkQosDao();
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java
index a479d9a..96944b9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkQosValidator.java
@@ -19,14 +19,14 @@
 
     protected NetworkQoS getOldQos() {
         if (oldQos == null) {
-            oldQos = DbFacade.getInstance().getQosDao().get(qos.getId());
+            oldQos = 
DbFacade.getInstance().getNetworkQosDao().get(qos.getId());
         }
         return oldQos;
     }
 
     protected List<NetworkQoS> getAllQosInDc() {
         if (allQos == null) {
-            allQos = 
DbFacade.getInstance().getQosDao().getAllForStoragePoolId(qos.getStoragePoolId());
+            allQos = 
DbFacade.getInstance().getNetworkQosDao().getAllForStoragePoolId(qos.getStoragePoolId());
         }
         return allQos;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
index 9eac8a1..fec90c9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
@@ -183,7 +183,7 @@
      *         belongs to the wrong DC.
      */
     public ValidationResult qosExistsInDc() {
-        NetworkQosValidator qosValidator = new 
NetworkQosValidator(getDbFacade().getQosDao().get(network.getQosId()));
+        NetworkQosValidator qosValidator = new 
NetworkQosValidator(getDbFacade().getNetworkQosDao().get(network.getQosId()));
         ValidationResult res = qosValidator.qosExists();
         return (res == ValidationResult.VALID) ? 
qosValidator.consistentDataCenter() : res;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
index 005b23c..a8c077f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
@@ -51,7 +51,7 @@
 
     public ValidationResult networkQosExistsOrNull() {
         return vnicProfile.getNetworkQosId() == null
-                || 
getDbFacade().getQosDao().get(vnicProfile.getNetworkQosId()) != null
+                || 
getDbFacade().getNetworkQosDao().get(vnicProfile.getNetworkQosId()) != null
                 ? ValidationResult.VALID
                 : new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS);
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java
index 1d42676..2cd1948 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/host/SetupNetworksHelperTest.java
@@ -39,7 +39,7 @@
 import org.ovirt.engine.core.dao.VdsDAO;
 import org.ovirt.engine.core.dao.network.InterfaceDao;
 import org.ovirt.engine.core.dao.network.NetworkDao;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 
@@ -68,7 +68,7 @@
     private InterfaceDao interfaceDAO;
 
     @Mock
-    private NetworkQoSDao qosDao;
+    private NetworkQosDao qosDao;
 
     /* --- Tests for networks functionality --- */
 
@@ -1827,7 +1827,7 @@
         doReturn(interfaceDAO).when(dbFacade).getInterfaceDao();
         doReturn(mock(VdsDAO.class)).when(dbFacade).getVdsDao();
         doReturn(networkDAO).when(dbFacade).getNetworkDao();
-        doReturn(qosDao).when(dbFacade).getQosDao();
+        doReturn(qosDao).when(dbFacade).getNetworkQosDao();
 
         return helper;
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VmNicValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VmNicValidatorTest.java
index 3b863db..4ab0020 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VmNicValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VmNicValidatorTest.java
@@ -34,8 +34,8 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -70,7 +70,7 @@
     private VnicProfileDao vnicProfileDao;
 
     @Mock
-    private NetworkQoSDao networkQosDao;
+    private NetworkQosDao networkQosDao;
 
     @Mock
     private VnicProfile vnicProfile;
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
index 45b35de..b8f2d25 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
@@ -31,8 +31,8 @@
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.VmTemplateDAO;
 import org.ovirt.engine.core.dao.network.NetworkDao;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 
 @RunWith(MockitoJUnitRunner.class)
 public class VnicProfileValidatorTest {
@@ -53,7 +53,7 @@
     private NetworkDao networkDao;
 
     @Mock
-    private NetworkQoSDao networkQosDao;
+    private NetworkQosDao networkQosDao;
 
     @Mock
     private VmDAO vmDao;
@@ -67,7 +67,7 @@
     @Mock
     private NetworkQoS networkQos;
 
-    private List<VnicProfile> vnicProfiles = new ArrayList<>();
+    private final List<VnicProfile> vnicProfiles = new ArrayList<>();
 
     private VnicProfileValidator validator;
 
@@ -81,7 +81,7 @@
         // mock some commonly used DAOs
         when(dbFacade.getVnicProfileDao()).thenReturn(vnicProfileDao);
         when(dbFacade.getNetworkDao()).thenReturn(networkDao);
-        when(dbFacade.getQosDao()).thenReturn(networkQosDao);
+        when(dbFacade.getNetworkQosDao()).thenReturn(networkQosDao);
         when(dbFacade.getVmDao()).thenReturn(vmDao);
 
         // mock their getters
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
index b8d519e..0d7e7a5 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
@@ -115,7 +115,6 @@
 import org.ovirt.engine.core.dao.network.InterfaceDao;
 import org.ovirt.engine.core.dao.network.NetworkClusterDao;
 import org.ovirt.engine.core.dao.network.NetworkDao;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
 import org.ovirt.engine.core.dao.network.NetworkViewDao;
 import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
 import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDao;
@@ -123,6 +122,7 @@
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
 import org.ovirt.engine.core.dao.network.VnicProfileViewDao;
 import org.ovirt.engine.core.dao.provider.ProviderDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.dao.scheduling.AffinityGroupDao;
 import org.ovirt.engine.core.dao.scheduling.ClusterPolicyDao;
 import org.ovirt.engine.core.dao.scheduling.PolicyUnitDao;
@@ -911,8 +911,8 @@
         return getDao(VmGuestAgentInterfaceDao.class);
     }
 
-    public NetworkQoSDao getQosDao() {
-        return getDao(NetworkQoSDao.class);
+    public NetworkQosDao getNetworkQosDao() {
+        return getDao(NetworkQosDao.class);
     }
 
     /**
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
index 93073a5..4f05c32 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
@@ -24,6 +24,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper;
 import org.ovirt.engine.core.dao.BaseDAODbFacade;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.SerializationFactory;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@@ -133,7 +134,7 @@
     }
 
     private void persistQosChanges(VdsNetworkInterface entity) {
-        NetworkQoSDao qosDao = DbFacade.getInstance().getQosDao();
+        NetworkQosDao qosDao = DbFacade.getInstance().getNetworkQosDao();
         Guid id = entity.getId();
         NetworkQoS oldQos = qosDao.get(id);
         NetworkQoS qos = entity.getQos();
@@ -218,7 +219,7 @@
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
                 .addValue("id", id);
 
-        DbFacade.getInstance().getQosDao().remove(id);
+        DbFacade.getInstance().getNetworkQosDao().remove(id);
         getCallsHandler().executeModification("Deletevds_interface", 
parameterSource);
     }
 
@@ -307,7 +308,7 @@
                     
entity.setBootProtocol(NetworkBootProtocol.forValue(rs.getInt("boot_protocol")));
                     entity.setMtu(rs.getInt("mtu"));
                     entity.setBridged(rs.getBoolean("bridged"));
-                    
entity.setQos(DbFacade.getInstance().getQosDao().get(entity.getId()));
+                    
entity.setQos(DbFacade.getInstance().getNetworkQosDao().get(entity.getId()));
                     entity.setQosOverridden(rs.getBoolean("qos_overridden"));
                     
entity.setLabels(SerializationFactory.getDeserializer().deserialize(rs.getString("labels"),
                             HashSet.class));
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java
deleted file mode 100644
index b321498..0000000
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.ovirt.engine.core.dao.network;
-
-import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
-import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dao.GenericDao;
-
-import java.util.List;
-
-public interface NetworkQoSDao extends GenericDao<NetworkQoS, Guid> {
-
-    public List<NetworkQoS> getAllForStoragePoolId(Guid storagePoolId);
-}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoFacadeImpl.java
deleted file mode 100644
index e17556d..0000000
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoFacadeImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.ovirt.engine.core.dao.network;
-
-import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
-import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade;
-import org.springframework.jdbc.core.RowMapper;
-import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.List;
-
-public class NetworkQoSDaoFacadeImpl extends 
DefaultGenericDaoDbFacade<NetworkQoS, Guid> implements NetworkQoSDao {
-
-    protected final RowMapper<NetworkQoS> mapper = createEntityRowMapper();
-
-    public NetworkQoSDaoFacadeImpl(){
-        super("NetworkQos");
-    }
-
-    private static Integer getIntegerOrNull(ResultSet rs, String columnName) 
throws SQLException {
-        int i = rs.getInt(columnName);
-        return rs.wasNull() ? null : i;
-    }
-
-    @Override
-    protected MapSqlParameterSource createIdParameterMapper(Guid guid) {
-        return getCustomMapSqlParameterSource()
-                .addValue("id", guid);
-    }
-
-    @Override
-    protected RowMapper<NetworkQoS> createEntityRowMapper() {
-        return new RowMapper<NetworkQoS>() {
-            @Override
-            public NetworkQoS mapRow(ResultSet rs, int rowNum)
-                    throws SQLException {
-                NetworkQoS entity = new NetworkQoS();
-                entity.setId(getGuid(rs, "id"));
-                entity.setName(rs.getString("name"));
-                entity.setStoragePoolId(getGuid(rs, "storage_pool_id"));
-                entity.setInboundAverage(getIntegerOrNull(rs, 
"inbound_average"));
-                entity.setInboundPeak(getIntegerOrNull(rs, "inbound_peak"));
-                entity.setInboundBurst(getIntegerOrNull(rs, "inbound_burst"));
-                entity.setOutboundAverage(getIntegerOrNull(rs, 
"outbound_average"));
-                entity.setOutboundPeak(getIntegerOrNull(rs, "outbound_peak"));
-                entity.setOutboundBurst(getIntegerOrNull(rs, 
"outbound_burst"));
-                return entity;
-            }
-        };
-    }
-
-    @Override
-    public List<NetworkQoS> getAllForStoragePoolId(Guid storagePoolId) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("storage_pool_id", storagePoolId.getUuid());
-        return 
getCallsHandler().executeReadList("GetAllNetworkQosForStoragePool", mapper, 
parameterSource);
-    }
-
-    @Override
-    protected MapSqlParameterSource createFullParametersMapper(NetworkQoS 
networkQoS) {
-        return getCustomMapSqlParameterSource()
-                .addValue("id", networkQoS.getId())
-                .addValue("name", networkQoS.getName())
-                .addValue("storage_pool_id", networkQoS.getStoragePoolId())
-                .addValue("inbound_average", networkQoS.getInboundAverage())
-                .addValue("inbound_peak", networkQoS.getInboundPeak())
-                .addValue("inbound_burst", networkQoS.getInboundBurst())
-                .addValue("outbound_average", networkQoS.getOutboundAverage())
-                .addValue("outbound_peak", networkQoS.getOutboundPeak())
-                .addValue("outbound_burst", networkQoS.getOutboundBurst());
-
-    }
-}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/BaseQosDaoFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/BaseQosDaoFacadeImpl.java
new file mode 100644
index 0000000..8673943
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/BaseQosDaoFacadeImpl.java
@@ -0,0 +1,87 @@
+package org.ovirt.engine.core.dao.qos;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.qos.BaseQos;
+import org.ovirt.engine.core.common.businessentities.qos.QosType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+public abstract class BaseQosDaoFacadeImpl<T extends BaseQos> extends 
DefaultGenericDaoDbFacade<T, Guid> implements QosDao<T> {
+    RowMapper<T> mapper = createEntityRowMapper();
+
+    public BaseQosDaoFacadeImpl(String entityStoredProcedureName) {
+        super("qos");
+    }
+
+    /**
+     * @param rs
+     * @return specific mapper for derived QoS dao
+     * @throws SQLException
+     */
+    protected abstract T createPartialQosEntity(ResultSet rs) throws 
SQLException;
+
+    /**
+     * @param map
+     * @param obj
+     * @return parameters mapper for derived QoS dao
+     */
+    protected abstract void 
updatePartialParametersMapper(MapSqlParameterSource map, T obj);
+
+    /**
+     * @return qos type for derived qos dao
+     */
+    protected abstract QosType getQosType();
+
+    @Override
+    public List<T> getAllForStoragePoolId(Guid storagePoolId) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("storage_pool_id", storagePoolId.getUuid())
+                .addValue("qos_type", getQosType());
+        return 
getCallsHandler().executeReadList("GetAllQosForStoragePoolByQosType",
+                mapper,
+                parameterSource);
+    }
+
+    @Override
+    protected RowMapper<T> createEntityRowMapper() {
+        return new RowMapper<T>() {
+            @Override
+            public T mapRow(ResultSet rs, int rowNum)
+                    throws SQLException {
+                T entity = createPartialQosEntity(rs);
+                entity.setId(getGuid(rs, "id"));
+                entity.setName(rs.getString("name"));
+                entity.setStoragePoolId(getGuid(rs, "storage_pool_id"));
+                return entity;
+            }
+        };
+    }
+
+    @Override
+    protected MapSqlParameterSource createFullParametersMapper(T obj) {
+        MapSqlParameterSource map = getCustomMapSqlParameterSource()
+                .addValue("id", obj.getId())
+                .addValue("qos_type", getQosType())
+                .addValue("name", obj.getName())
+                .addValue("storage_pool_id", obj.getStoragePoolId());
+        // add other values.
+        updatePartialParametersMapper(map, obj);
+        return map;
+    }
+
+    @Override
+    protected MapSqlParameterSource createIdParameterMapper(Guid guid) {
+        return getCustomMapSqlParameterSource()
+                .addValue("id", guid);
+    }
+
+    protected Integer getIntegerOrNull(ResultSet rs, String columnName) throws 
SQLException {
+        int i = rs.getInt(columnName);
+        return rs.wasNull() ? null : i;
+    }
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDao.java
new file mode 100644
index 0000000..38bfc8d
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDao.java
@@ -0,0 +1,7 @@
+package org.ovirt.engine.core.dao.qos;
+
+import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
+
+public interface NetworkQosDao extends QosDao<NetworkQoS> {
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoFacadeImpl.java
new file mode 100644
index 0000000..5c5f6c9
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoFacadeImpl.java
@@ -0,0 +1,46 @@
+package org.ovirt.engine.core.dao.qos;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
+import org.ovirt.engine.core.common.businessentities.qos.QosType;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+public class NetworkQosDaoFacadeImpl extends BaseQosDaoFacadeImpl<NetworkQoS> 
implements NetworkQosDao {
+
+    public NetworkQosDaoFacadeImpl() {
+        // trivial (a single table for all QoS objects)
+        super("");
+    }
+
+    @Override
+    protected NetworkQoS createPartialQosEntity(ResultSet rs) throws 
SQLException {
+        NetworkQoS entity = new NetworkQoS();
+
+        entity.setInboundAverage(getIntegerOrNull(rs, "inbound_average"));
+        entity.setInboundPeak(getIntegerOrNull(rs, "inbound_peak"));
+        entity.setInboundBurst(getIntegerOrNull(rs, "inbound_burst"));
+        entity.setOutboundAverage(getIntegerOrNull(rs, "outbound_average"));
+        entity.setOutboundPeak(getIntegerOrNull(rs, "outbound_peak"));
+        entity.setOutboundBurst(getIntegerOrNull(rs, "outbound_burst"));
+
+        return entity;
+    }
+
+    @Override
+    protected void updatePartialParametersMapper(MapSqlParameterSource map, 
NetworkQoS networkQoS) {
+        map.addValue("inbound_average", networkQoS.getInboundAverage())
+                .addValue("inbound_peak", networkQoS.getInboundPeak())
+                .addValue("inbound_burst", networkQoS.getInboundBurst())
+                .addValue("outbound_average", networkQoS.getOutboundAverage())
+                .addValue("outbound_peak", networkQoS.getOutboundPeak())
+                .addValue("outbound_burst", networkQoS.getOutboundBurst());
+    }
+
+    @Override
+    protected QosType getQosType() {
+        return QosType.NETWORK;
+    }
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/QosDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/QosDao.java
new file mode 100644
index 0000000..d511a18
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/qos/QosDao.java
@@ -0,0 +1,12 @@
+package org.ovirt.engine.core.dao.qos;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.qos.BaseQos;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.GenericDao;
+
+public interface QosDao<T extends BaseQos> extends GenericDao<T, Guid> {
+
+    public List<T> getAllForStoragePoolId(Guid storagePoolId);
+}
diff --git 
a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties 
b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
index 19273d7..e8ee8f6 100644
--- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
+++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
@@ -66,7 +66,7 @@
 
GlusterServerServiceDao=org.ovirt.engine.core.dao.gluster.GlusterServerServiceDaoDbFacadeImpl
 
GlusterClusterServiceDao=org.ovirt.engine.core.dao.gluster.GlusterClusterServiceDaoDbFacadeImpl
 GlusterServerDao=org.ovirt.engine.core.dao.gluster.GlusterServerDaoDbFacadeImpl
-NetworkQoSDao=org.ovirt.engine.core.dao.network.NetworkQoSDaoFacadeImpl
+NetworkQosDao=org.ovirt.engine.core.dao.qos.NetworkQosDaoFacadeImpl
 PolicyUnitDao=org.ovirt.engine.core.dao.scheduling.PolicyUnitDaoImpl
 ClusterPolicyDao=org.ovirt.engine.core.dao.scheduling.ClusterPolicyDaoImpl
 
DwhHistoryTimekeepingDao=org.ovirt.engine.core.dao.dwh.DwhHistoryTimekeepingDaoDbFacadeImpl
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
index e0e9b16..f417df2 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
@@ -123,7 +123,7 @@
             found |= 
(FixturesTool.VDS_NETWORK_INTERFACE.equals(iface.getId()));
         }
         assertTrue(found);
-        
assertNotNull(dbFacade.getQosDao().get(FixturesTool.VDS_NETWORK_INTERFACE));
+        
assertNotNull(dbFacade.getNetworkQosDao().get(FixturesTool.VDS_NETWORK_INTERFACE));
 
         dao.removeInterfaceFromVds(FixturesTool.VDS_NETWORK_INTERFACE);
 
@@ -132,7 +132,7 @@
         for (VdsNetworkInterface iface : after) {
             assertNotSame(FixturesTool.VDS_NETWORK_INTERFACE, iface.getId());
         }
-        
assertNull(dbFacade.getQosDao().get(FixturesTool.VDS_NETWORK_INTERFACE));
+        
assertNull(dbFacade.getNetworkQosDao().get(FixturesTool.VDS_NETWORK_INTERFACE));
     }
 
     /**
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoTest.java
similarity index 82%
rename from 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java
rename to 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoTest.java
index 308cfac..3b2a961 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/qos/NetworkQosDaoTest.java
@@ -1,4 +1,8 @@
-package org.ovirt.engine.core.dao.network;
+package org.ovirt.engine.core.dao.qos;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.qos.NetworkQoS;
@@ -6,13 +10,9 @@
 import org.ovirt.engine.core.dao.BaseDAOTestCase;
 import org.ovirt.engine.core.dao.FixturesTool;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
 public class NetworkQosDaoTest extends BaseDAOTestCase {
 
-    private NetworkQoSDao dao = getDbFacade().getQosDao();
+    private final NetworkQosDao networkDao = getDbFacade().getNetworkQosDao();
 
     private static final Guid qosAId = 
Guid.createGuidFromString("ae956031-6be2-43d6-bb90-5191c9253314");
     private static final Guid qosBId = 
Guid.createGuidFromString("ae956031-6be2-43d6-bb90-5191c9253315");
@@ -25,7 +25,7 @@
      */
     @Test
     public void testGetWithInvalidId() {
-        NetworkQoS result = dao.get(Guid.newGuid());
+        NetworkQoS result = networkDao.get(Guid.newGuid());
 
         assertNull(result);
     }
@@ -35,7 +35,7 @@
      */
     @Test
     public void testGetNetworkQos() {
-        NetworkQoS result = dao.get(qosAId);
+        NetworkQoS result = networkDao.get(qosAId);
         NetworkQoS trueA = new NetworkQoS();
         trueA.setId(qosAId);
         trueA.setName("qos_a");
@@ -56,7 +56,7 @@
      */
     @Test
     public void testGetAllNetworkQos() {
-        assertTrue(dao.getAll().size() == 4);
+        assertTrue(networkDao.getAll().size() == 4);
     }
 
     /**
@@ -75,9 +75,9 @@
         newB.setOutboundPeak(30);
         newB.setOutboundBurst(30);
 
-        dao.update(newB);
+        networkDao.update(newB);
 
-        NetworkQoS afterUpdate = dao.get(qosBId);
+        NetworkQoS afterUpdate = networkDao.get(qosBId);
         assertTrue(newB.equals(afterUpdate));
     }
 
@@ -86,8 +86,8 @@
      */
     @Test
     public void testRemoveNetworkQos() {
-        dao.remove(qosCId);
-        NetworkQoS afterRemove = dao.get(qosCId);
+        networkDao.remove(qosCId);
+        NetworkQoS afterRemove = networkDao.get(qosCId);
         assertNull(afterRemove);
     }
 
@@ -107,8 +107,8 @@
         qosD.setOutboundPeak(200);
         qosD.setOutboundBurst(200);
 
-        dao.save(qosD);
-        NetworkQoS returnedD = dao.get(qosDId);
+        networkDao.save(qosD);
+        NetworkQoS returnedD = networkDao.get(qosDId);
         assertTrue(qosD.equals(returnedD));
     }
 
@@ -117,7 +117,7 @@
      */
     @Test
     public void testGetAllNetworkQosForStoragePool() {
-        
assertTrue(dao.getAllForStoragePoolId(FixturesTool.STORAGE_POOL_NFS_2).size() 
== 2);
+        
assertTrue(networkDao.getAllForStoragePoolId(FixturesTool.STORAGE_POOL_NFS_2).size()
 == 2);
     }
 
 }
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 26f53e8..27106df 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -987,8 +987,9 @@
         </row>
     </table>
 
-    <table name="network_qos">
+    <table name="qos">
         <column>id</column>
+        <column>qos_type</column>
         <column>name</column>
         <column>storage_pool_id</column>
         <column>inbound_average</column>
@@ -999,6 +1000,7 @@
         <column>outbound_burst</column>
         <row>
             <value>ae956031-6be2-43d6-bb90-5191c9253314</value>
+            <value>0</value>
             <value>qos_a</value>
             <value>386bffd1-e7ed-4b08-bce9-d7df10f8c9a0</value>
             <value>1000</value>
@@ -1010,6 +1012,7 @@
         </row>
         <row>
             <value>ae956031-6be2-43d6-bb90-5191c9253315</value>
+            <value>0</value>
             <value>qos_b</value>
             <value>386bffd1-e7ed-4b08-bce9-d7df10f8c9a0</value>
             <value>1200</value>
@@ -1021,6 +1024,7 @@
         </row>
         <row>
             <value>ae956031-6be2-43d6-bb90-5191c9253316</value>
+            <value>0</value>
             <value>qos_c</value>
             <value>72b9e200-f48b-4687-83f2-62828f249a47</value>
             <value>700</value>
@@ -1032,6 +1036,7 @@
         </row>
         <row>
             <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9db</value>
+            <value>0</value>
             <null />
             <null />
             <value>700</value>
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 6209427..1a7872f 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
@@ -23,7 +23,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.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.NetworkUtils;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
@@ -151,7 +151,7 @@
 
     private static void logUnsynchronizedNetworks(VDS vds, Map<String, 
Network> networks) {
         List<String> networkNames = new ArrayList<String>();
-        NetworkQoSDao qosDao = DbFacade.getInstance().getQosDao();
+        NetworkQosDao qosDao = DbFacade.getInstance().getNetworkQosDao();
 
         for (VdsNetworkInterface iface : vds.getInterfaces()) {
             Network network = networks.get(iface.getNetworkName());
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 7b3fbdb..7ada7f4 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
@@ -13,7 +13,7 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import 
org.ovirt.engine.core.common.vdscommands.SetupNetworksVdsCommandParameters;
 import org.ovirt.engine.core.compat.Version;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.NetworkUtils;
 
 public class SetupNetworksVDSCommand<T extends 
SetupNetworksVdsCommandParameters> extends FutureVDSCommand<T> {
@@ -36,7 +36,7 @@
 
     private Map<String, Object> generateNetworks() {
         Map<String, Object> networks = new HashMap<String, Object>();
-        NetworkQoSDao qosDao = getDbFacade().getQosDao();
+        NetworkQosDao qosDao = getDbFacade().getNetworkQosDao();
         for (Network network : getParameters().getNetworks()) {
             Map<String, Object> opts = new HashMap<String, Object>();
             VdsNetworkInterface iface =
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
index 6b7f794..09007c4 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
@@ -632,7 +632,7 @@
                 specParams = new HashMap<>();
                 struct.put(VdsProperties.SpecParams, specParams);
             }
-            NetworkQoS networkQoS = 
DbFacade.getInstance().getQosDao().get(qosId);
+            NetworkQoS networkQoS = 
DbFacade.getInstance().getNetworkQosDao().get(qosId);
             NetworkQosMapper qosMapper =
                     new NetworkQosMapper(specParams, 
VdsProperties.QOS_INBOUND, VdsProperties.QOS_OUTBOUND);
             qosMapper.serialize(networkQoS);
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java
index a4ae523..95de147 100644
--- 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java
@@ -35,7 +35,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.VdsDAO;
 import org.ovirt.engine.core.dao.VdsStaticDAO;
-import org.ovirt.engine.core.dao.network.NetworkQoSDao;
+import org.ovirt.engine.core.dao.qos.NetworkQosDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 
@@ -47,7 +47,7 @@
     private IVdsServer server;
 
     @Mock
-    private NetworkQoSDao qosDao;
+    private NetworkQosDao qosDao;
 
     @Mock
     private VDS host;
@@ -288,7 +288,7 @@
 
         when(dbFacade.getVdsStaticDao()).thenReturn(vdsStaticDao);
         when(dbFacade.getVdsDao()).thenReturn(vdsDao);
-        when(dbFacade.getQosDao()).thenReturn(qosDao);
+        when(dbFacade.getNetworkQosDao()).thenReturn(qosDao);
 
         when(vdsDao.get(any(Guid.class))).thenReturn(host);
 
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index 4f071f0..cb6cd13 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -1196,14 +1196,15 @@
        vnic_profiles.custom_properties as custom_properties,
        vnic_profiles.description as description,
        network.name as network_name,
-       network_qos.name as network_qos_name,
+       qos.name as network_qos_name,
        storage_pool.name as data_center_name,
        storage_pool.compatibility_version as compatibility_version,
        storage_pool.id as data_center_id
 FROM vnic_profiles
 
 INNER JOIN network ON vnic_profiles.network_id = network.id
-LEFT JOIN network_qos ON vnic_profiles.network_qos_id = network_qos.id
+-- 0 = network QoS type
+LEFT JOIN qos ON (vnic_profiles.network_qos_id = qos.id AND qos.qos_type = 0)
 INNER JOIN storage_pool ON network.storage_pool_id = storage_pool.id;
 
 
diff --git a/packaging/dbscripts/network_qos_sp.sql 
b/packaging/dbscripts/network_qos_sp.sql
deleted file mode 100644
index 3c1fa91..0000000
--- a/packaging/dbscripts/network_qos_sp.sql
+++ /dev/null
@@ -1,79 +0,0 @@
-----------------------------------------------------------------
--- [network_qos] Table
-----------------------------------------------------------------
-
-Create or replace FUNCTION InsertNetworkQos(v_id uuid,
-  v_name VARCHAR(50),
-  v_storage_pool_id uuid,
-  v_inbound_average INTEGER,
-  v_inbound_peak INTEGER,
-  v_inbound_burst INTEGER,
-  v_outbound_average INTEGER,
-  v_outbound_peak INTEGER,
-  v_outbound_burst INTEGER)
-RETURNS VOID
-   AS $procedure$
-BEGIN
-INSERT INTO network_qos(id, name, storage_pool_id, inbound_average, 
inbound_peak, inbound_burst, outbound_average, outbound_peak, outbound_burst)
-  VALUES(v_id, v_name, v_storage_pool_id, v_inbound_average, v_inbound_peak, 
v_inbound_burst, v_outbound_average, v_outbound_peak, v_outbound_burst);
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-Create or replace FUNCTION UpdateNetworkQos(v_id uuid,
-  v_name VARCHAR(50),
-  v_storage_pool_id uuid,
-  v_inbound_average INTEGER,
-  v_inbound_peak INTEGER,
-  v_inbound_burst INTEGER,
-  v_outbound_average INTEGER,
-  v_outbound_peak INTEGER,
-  v_outbound_burst INTEGER)
-RETURNS VOID
-   AS $procedure$
-BEGIN
-      UPDATE network_qos
-      SET name = v_name, storage_pool_id = v_storage_pool_id, inbound_average 
= v_inbound_average, inbound_peak = v_inbound_peak, inbound_burst = 
v_inbound_burst,
-      outbound_average = v_outbound_average, outbound_peak = v_outbound_peak, 
outbound_burst = v_outbound_burst, _update_date = LOCALTIMESTAMP
-      WHERE id = v_id;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-Create or replace FUNCTION DeleteNetworkQos(v_id UUID) RETURNS VOID
-   AS $procedure$
-BEGIN
-   DELETE FROM network_qos
-   WHERE id = v_id;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-
-Create or replace FUNCTION GetAllFromNetworkQoss() RETURNS SETOF network_qos 
STABLE
-   AS $procedure$
-BEGIN
-   RETURN QUERY SELECT *
-   FROM network_qos;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-Create or replace FUNCTION GetNetworkQosByNetworkQosId(v_id UUID) RETURNS 
SETOF network_qos STABLE
-   AS $procedure$
-BEGIN
-RETURN QUERY SELECT *
-   FROM network_qos
-   WHERE id = v_id;
-END; $procedure$
-LANGUAGE plpgsql;
-
-
-Create or replace FUNCTION GetAllNetworkQosForStoragePool(v_storage_pool_id 
UUID) RETURNS SETOF network_qos STABLE
-   AS $procedure$
-BEGIN
-RETURN QUERY SELECT *
-   FROM network_qos
-   WHERE storage_pool_id = v_storage_pool_id;
-END; $procedure$
-LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/qos_sp.sql b/packaging/dbscripts/qos_sp.sql
new file mode 100644
index 0000000..8a65c39
--- /dev/null
+++ b/packaging/dbscripts/qos_sp.sql
@@ -0,0 +1,83 @@
+----------------------------------------------------------------
+-- [qos] Table
+----------------------------------------------------------------
+
+Create or replace FUNCTION InsertQos(v_id uuid,
+  v_qos_type SMALLINT,
+  v_name VARCHAR(50),
+  v_storage_pool_id uuid,
+  v_inbound_average INTEGER,
+  v_inbound_peak INTEGER,
+  v_inbound_burst INTEGER,
+  v_outbound_average INTEGER,
+  v_outbound_peak INTEGER,
+  v_outbound_burst INTEGER)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+INSERT INTO qos(id, qos_type, name, storage_pool_id, inbound_average, 
inbound_peak, inbound_burst, outbound_average, outbound_peak, outbound_burst)
+  VALUES(v_id, v_qos_type, v_name, v_storage_pool_id, v_inbound_average, 
v_inbound_peak, v_inbound_burst, v_outbound_average, v_outbound_peak, 
v_outbound_burst);
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION UpdateQos(v_id uuid,
+  v_qos_type SMALLINT,
+  v_name VARCHAR(50),
+  v_storage_pool_id uuid,
+  v_inbound_average INTEGER,
+  v_inbound_peak INTEGER,
+  v_inbound_burst INTEGER,
+  v_outbound_average INTEGER,
+  v_outbound_peak INTEGER,
+  v_outbound_burst INTEGER)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+      UPDATE qos
+      SET qos_type = v_qos_type, name = v_name, storage_pool_id = 
v_storage_pool_id, inbound_average = v_inbound_average, inbound_peak = 
v_inbound_peak,
+      inbound_burst = v_inbound_burst, outbound_average = v_outbound_average, 
outbound_peak = v_outbound_peak, outbound_burst = v_outbound_burst,
+      _update_date = LOCALTIMESTAMP
+      WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION DeleteQos(v_id UUID) RETURNS VOID
+   AS $procedure$
+BEGIN
+   DELETE FROM qos
+   WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+Create or replace FUNCTION GetAllFromQoss() RETURNS SETOF qos STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM qos;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetQosByQosId(v_id UUID) RETURNS SETOF qos STABLE
+   AS $procedure$
+BEGIN
+RETURN QUERY SELECT *
+   FROM qos
+   WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetAllQosForStoragePoolByQosType(v_storage_pool_id 
UUID, v_qos_type SMALLINT) RETURNS SETOF qos STABLE
+   AS $procedure$
+BEGIN
+RETURN QUERY SELECT *
+   FROM qos
+   WHERE storage_pool_id = v_storage_pool_id
+   AND qos_type = v_qos_type;
+END; $procedure$
+LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/upgrade/03_05_0330_aggregate_qos.sql 
b/packaging/dbscripts/upgrade/03_05_0330_aggregate_qos.sql
new file mode 100644
index 0000000..c4db99e
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_05_0330_aggregate_qos.sql
@@ -0,0 +1,13 @@
+-- for more details see http://www.ovirt.org/Features/aggregate_QoS
+
+-- add type column (default is network (0))
+ALTER TABLE network_qos ADD qos_type SMALLINT NOT NULL DEFAULT 0;
+-- rename table
+ALTER TABLE network_qos RENAME TO qos;
+-- rename table index
+ALTER INDEX idx_network_qos_storage_pool_id RENAME TO idx_qos_storage_pool_id;
+-- rename table constraints (drop + add)
+ALTER TABLE qos DROP CONSTRAINT network_qos_storage_pool_fk;
+ALTER TABLE qos ADD CONSTRAINT fk_qos_storage_pool FOREIGN KEY 
(storage_pool_id)
+      REFERENCES storage_pool (id) MATCH SIMPLE
+      ON UPDATE NO ACTION ON DELETE CASCADE;


-- 
To view, visit http://gerrit.ovirt.org/27094
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1a9af59277b5055453159f002f19046c0051d63b
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gilad Chaplik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to