CLOUDSTACK-741: Granular Global Parameters Added parameters to cluster level 
cluster.storage.allocated.capacity.notificationthreshold 
cluster.storage.capacity.notificationthreshold

CLOUDSTACK-2036
global parameter for Router Template ID functionality added
We use 5 parameters to set the router template name for each hypervisor

Moved cpu.overprovisioning.factor and mem.overprovisioning.factor to be able to 
update/list using update/list configuration API at cluster level.

Signed-off-by: Abhinandan Prateek <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/10b6c1c6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/10b6c1c6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/10b6c1c6

Branch: refs/heads/internallb
Commit: 10b6c1c6c8f8c2ec49145a901fb083e7f362f3a1
Parents: bb63d71
Author: Harikrishna Patnala <[email protected]>
Authored: Tue Apr 30 16:41:25 2013 +0530
Committer: Abhinandan Prateek <[email protected]>
Committed: Wed May 1 12:12:37 2013 +0530

----------------------------------------------------------------------
 server/src/com/cloud/alert/AlertManagerImpl.java   |    5 +++-
 server/src/com/cloud/configuration/Config.java     |   13 ++++++---
 .../configuration/ConfigurationManagerImpl.java    |   14 ++++++++-
 server/src/com/cloud/dc/ClusterDetailsDaoImpl.java |    8 +++++
 .../router/VirtualNetworkApplianceManagerImpl.java |   21 ++++++++++++++-
 .../src/com/cloud/storage/dao/VMTemplateDao.java   |    2 +-
 .../com/cloud/storage/dao/VMTemplateDaoImpl.java   |    6 +++-
 test/integration/smoke/test_global_settings.py     |    2 +-
 8 files changed, 60 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/alert/AlertManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java 
b/server/src/com/cloud/alert/AlertManagerImpl.java
index 6839d44..9b7cd27 100755
--- a/server/src/com/cloud/alert/AlertManagerImpl.java
+++ b/server/src/com/cloud/alert/AlertManagerImpl.java
@@ -569,7 +569,10 @@ public class AlertManagerImpl extends ManagerBase 
implements AlertManager {
                 switch (capacityType) {
                     case Capacity.CAPACITY_TYPE_STORAGE:
                         capacity.add(getUsedStats(capacityType, 
cluster.getDataCenterId(), cluster.getPodId(), cluster.getId()));
-                        capacityValue = 
_capacityTypeThresholdMap.get(capacityType);
+                        capacityValue = 
Double.parseDouble(_configServer.getConfigValue(Config.StorageCapacityThreshold.key(),
 Config.ConfigurationParameterScope.cluster.toString(), cluster.getId()));
+                        break;
+                    case Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED:
+                        capacityValue = 
Double.parseDouble(_configServer.getConfigValue(Config.StorageAllocatedCapacityThreshold.key(),
 Config.ConfigurationParameterScope.cluster.toString(), cluster.getId()));
                         break;
                     case Capacity.CAPACITY_TYPE_CPU:
                         overProvFactor = 
ApiDBUtils.getCpuOverprovisioningFactor();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java 
b/server/src/com/cloud/configuration/Config.java
index af6adcf..9fbb692 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -51,8 +51,8 @@ public enum Config {
        AlertSMTPUsername("Alert", ManagementServer.class, String.class, 
"alert.smtp.username", null, "Username for SMTP authentication (applies only if 
alert.smtp.useAuth is true).", null),
        AlertWait("Alert", AgentManager.class, Integer.class, "alert.wait", 
null, "Seconds to wait before alerting on a disconnected agent", null),
        CapacityCheckPeriod("Alert", ManagementServer.class, Integer.class, 
"capacity.check.period", "300000", "The interval in milliseconds between 
capacity checks", null),
-       StorageAllocatedCapacityThreshold("Alert", ManagementServer.class, 
Float.class, "cluster.storage.allocated.capacity.notificationthreshold", 
"0.75", "Percentage (as a value between 0 and 1) of allocated storage 
utilization above which alerts will be sent about low storage available.", 
null),
-       StorageCapacityThreshold("Alert", ManagementServer.class, Float.class, 
"cluster.storage.capacity.notificationthreshold", "0.75", "Percentage (as a 
value between 0 and 1) of storage utilization above which alerts will be sent 
about low storage available.", null),
+       StorageAllocatedCapacityThreshold("Alert", ManagementServer.class, 
Float.class, "cluster.storage.allocated.capacity.notificationthreshold", 
"0.75", "Percentage (as a value between 0 and 1) of allocated storage 
utilization above which alerts will be sent about low storage available.", 
null, ConfigurationParameterScope.cluster.toString()),
+       StorageCapacityThreshold("Alert", ManagementServer.class, Float.class, 
"cluster.storage.capacity.notificationthreshold", "0.75", "Percentage (as a 
value between 0 and 1) of storage utilization above which alerts will be sent 
about low storage available.", null, 
ConfigurationParameterScope.cluster.toString()),
        CPUCapacityThreshold("Alert", ManagementServer.class, Float.class, 
"cluster.cpu.allocated.capacity.notificationthreshold", "0.75", "Percentage (as 
a value between 0 and 1) of cpu utilization above which alerts will be sent 
about low cpu available.", null, 
ConfigurationParameterScope.cluster.toString()),
        MemoryCapacityThreshold("Alert", ManagementServer.class, Float.class, 
"cluster.memory.allocated.capacity.notificationthreshold", "0.75", "Percentage 
(as a value between 0 and 1) of memory utilization above which alerts will be 
sent about low memory available.", null, 
ConfigurationParameterScope.cluster.toString()),
        PublicIpCapacityThreshold("Alert", ManagementServer.class, Float.class, 
"zone.virtualnetwork.publicip.capacity.notificationthreshold", "0.75", 
"Percentage (as a value between 0 and 1) of public IP address space utilization 
above which alerts will be sent.", null),
@@ -173,6 +173,11 @@ public enum Config {
        RouterCheckInterval("Advanced", NetworkManager.class, Integer.class, 
"router.check.interval", "30", "Interval (in seconds) to report redundant 
router status.", null),
        RouterCheckPoolSize("Advanced", NetworkManager.class, Integer.class, 
"router.check.poolsize", "10", "Numbers of threads using to check redundant 
router status.", null),
        RouterTemplateId("Advanced", NetworkManager.class, Long.class, 
"router.template.id", "1", "Default ID for template.", null),
+    RouterTemplateXen("Advanced", NetworkManager.class, String.class, 
"router.template.xen", "SystemVM Template (XenServer)", "Name of the default 
router template on Xenserver.", null, 
ConfigurationParameterScope.zone.toString()),
+    RouterTemplateKVM("Advanced", NetworkManager.class, String.class, 
"router.template.kvm", "SystemVM Template (KVM)", "Name of the default router 
template on KVM.", null, ConfigurationParameterScope.zone.toString()),
+    RouterTemplateVmware("Advanced", NetworkManager.class, String.class, 
"router.template.vmware", "SystemVM Template (vSphere)", "Name of the default 
router template on Vmware.", null, ConfigurationParameterScope.zone.toString()),
+    RouterTemplateHyperv("Advanced", NetworkManager.class, String.class, 
"router.template.hyperv", "SystemVM Template (HyperV)", "Name of the default 
router template on Hyperv.", null, ConfigurationParameterScope.zone.toString()),
+    RouterTemplateLXC("Advanced", NetworkManager.class, String.class, 
"router.template.lxc", "SystemVM Template (LXC)", "Name of the default router 
template on LXC.", null, ConfigurationParameterScope.zone.toString()),
     RouterExtraPublicNics("Advanced", NetworkManager.class, Integer.class, 
"router.extra.public.nics", "2", "specify extra public nics used for virtual 
router(up to 5)", "0-5"),
        StartRetry("Advanced", AgentManager.class, Integer.class, 
"start.retry", "10", "Number of times to retry create and start commands", 
null),
     ScaleRetry("Advanced", AgentManager.class, Integer.class, "scale.retry", 
"2", "Number of times to retry scaling up the vm", null),
@@ -191,8 +196,8 @@ public enum Config {
     SystemVMAutoReserveCapacity("Advanced", ManagementServer.class, 
Boolean.class, "system.vm.auto.reserve.capacity", "true", "Indicates whether or 
not to automatically reserver system VM standby capacity.", null),
        SystemVMDefaultHypervisor("Advanced", ManagementServer.class, 
String.class, "system.vm.default.hypervisor", null, "Hypervisor type used to 
create system vm", null),
     SystemVMRandomPassword("Advanced", ManagementServer.class, Boolean.class, 
"system.vm.random.password", "false", "Randomize system vm password the first 
time management server starts", null),
-       CPUOverprovisioningFactor("Advanced", ManagementServer.class, 
String.class, "cpu.overprovisioning.factor", "1", "Used for CPU 
overprovisioning calculation; available CPU will be (actualCpuCapacity * 
cpu.overprovisioning.factor)", null),
-       MemOverprovisioningFactor("Advanced", ManagementServer.class, 
String.class, "mem.overprovisioning.factor", "1", "Used for memory 
overprovisioning calculation", null),
+       CPUOverprovisioningFactor("Advanced", ManagementServer.class, 
String.class, "cpu.overprovisioning.factor", "1", "Used for CPU 
overprovisioning calculation; available CPU will be (actualCpuCapacity * 
cpu.overprovisioning.factor)", null, 
ConfigurationParameterScope.cluster.toString()),
+       MemOverprovisioningFactor("Advanced", ManagementServer.class, 
String.class, "mem.overprovisioning.factor", "1", "Used for memory 
overprovisioning calculation", null, 
ConfigurationParameterScope.cluster.toString()),
        LinkLocalIpNums("Advanced", ManagementServer.class, Integer.class, 
"linkLocalIp.nums", "10", "The number of link local ip that needed by domR(in 
power of 2)", null),
        HypervisorList("Advanced", ManagementServer.class, String.class, 
"hypervisor.list", HypervisorType.KVM + "," + HypervisorType.XenServer + "," + 
HypervisorType.VMware + "," + HypervisorType.BareMetal + "," + 
HypervisorType.Ovm + "," + HypervisorType.LXC, "The list of hypervisors that 
this deployment will use.", "hypervisorList"),
        ManagementHostIPAdr("Advanced", ManagementServer.class, String.class, 
"host", "localhost", "The ip address of management server", null),

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java 
b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 068a586..4092e74 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -324,7 +324,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
     @DB
     public String updateConfiguration(long userId, String name, String 
category, String value, String scope, Long resourceId) {
 
-        String validationMsg = validateConfigurationValue(name, value);
+        String validationMsg = validateConfigurationValue(name, value, scope);
 
         if (validationMsg != null) {
             s_logger.error("Invalid configuration option, name: " + name + ", 
value:" + value);
@@ -553,7 +553,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
         }
     }
 
-    private String validateConfigurationValue(String name, String value) {
+    private String validateConfigurationValue(String name, String value, 
String scope) {
 
         Config c = Config.getConfig(name);
         if (c == null) {
@@ -561,6 +561,16 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
             return "Invalid configuration variable.";
         }
         String configScope = c.getScope();
+        if (scope != null) {
+            if (!configScope.contains(scope)) {
+                s_logger.error("Invalid scope id provided for the parameter " 
+ name);
+                return "Invalid scope id provided for the parameter " + name;
+            }
+            if ((name.equalsIgnoreCase("cpu.overprovisioning.factor") || 
name.equalsIgnoreCase("mem.overprovisioning.factor")) && value == null) {
+                s_logger.error("value cannot be null for 
cpu.overprovisioning.factor/mem.overprovisioning.factor");
+                return "value cannot be null for 
cpu.overprovisioning.factor/mem.overprovisioning.factor";
+            }
+        }
 
         Class<?> type = c.getType();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java 
b/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
index 4c85918..d14e0e4 100755
--- a/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
+++ b/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
@@ -50,9 +50,17 @@ public class ClusterDetailsDaoImpl extends 
GenericDaoBase<ClusterDetailsVO, Long
     @Override
     public ClusterDetailsVO findDetail(long clusterId, String name) {
         SearchCriteria<ClusterDetailsVO> sc = DetailSearch.create();
+        // This is temporary fix to support list/update configuration api for 
cpu and memory overprovisioning ratios
+        if(name.equalsIgnoreCase("cpu.overprovisioning.factor")) {
+            name = "cpuOvercommitRatio";
+        }
+        if (name.equalsIgnoreCase("mem.overprovisioning.factor")) {
+            name = "memoryOvercommitRatio";
+        }
         sc.setParameters("clusterId", clusterId);
         sc.setParameters("name", name);
 
+
         ClusterDetailsVO detail = findOneIncludingRemovedBy(sc);
         if("password".equals(name) && detail != null){
             detail.setValue(DBEncryptionUtil.decrypt(detail.getValue()));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 4c7bc75..6620e0a 100755
--- 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1591,7 +1591,26 @@ public class VirtualNetworkApplianceManagerImpl extends 
ManagerBase implements V
             HypervisorType hType = iter.next();
             try {
                 s_logger.debug("Allocating the domR with the hypervisor type " 
+ hType);
-                VMTemplateVO template = 
_templateDao.findRoutingTemplate(hType);
+                String templateName = null;
+                switch (hType) {
+                    case XenServer:
+                        templateName = 
_configServer.getConfigValue(Config.RouterTemplateXen.key(), 
Config.ConfigurationParameterScope.zone.toString(), 
dest.getDataCenter().getId());
+                        break;
+                    case KVM:
+                        templateName = 
_configServer.getConfigValue(Config.RouterTemplateKVM.key(), 
Config.ConfigurationParameterScope.zone.toString(), 
dest.getDataCenter().getId());
+                        break;
+                    case VMware:
+                        templateName = 
_configServer.getConfigValue(Config.RouterTemplateVmware.key(), 
Config.ConfigurationParameterScope.zone.toString(), 
dest.getDataCenter().getId());
+                        break;
+                    case Hyperv:
+                        templateName = 
_configServer.getConfigValue(Config.RouterTemplateHyperv.key(), 
Config.ConfigurationParameterScope.zone.toString(), 
dest.getDataCenter().getId());
+                        break;
+                    case LXC:
+                        templateName = 
_configServer.getConfigValue(Config.RouterTemplateLXC.key(), 
Config.ConfigurationParameterScope.zone.toString(), 
dest.getDataCenter().getId());
+                        break;
+                    default: break;
+                }
+                VMTemplateVO template = 
_templateDao.findRoutingTemplate(hType, templateName);
 
                 if (template == null) {
                     s_logger.debug(hType + " won't support system vm, skip 
it");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/storage/dao/VMTemplateDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateDao.java 
b/server/src/com/cloud/storage/dao/VMTemplateDao.java
index 3f1fe93..8520757 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateDao.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateDao.java
@@ -75,7 +75,7 @@ public interface VMTemplateDao extends 
GenericDao<VMTemplateVO, Long>, StateDao<
     VMTemplateVO findSystemVMTemplate(long zoneId);
     VMTemplateVO findSystemVMTemplate(long zoneId, HypervisorType hType);
 
-    VMTemplateVO findRoutingTemplate(HypervisorType type);
+    VMTemplateVO findRoutingTemplate(HypervisorType type, String templateName);
     List<Long> listPrivateTemplatesByHost(Long hostId);
     public Long countTemplatesForAccount(long accountId);
        

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java 
b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index 3b37f24..7101071 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -353,6 +353,7 @@ public class VMTemplateDaoImpl extends 
GenericDaoBase<VMTemplateVO, Long> implem
                tmpltTypeHyperSearch2 = createSearchBuilder();
                tmpltTypeHyperSearch2.and("templateType", 
tmpltTypeHyperSearch2.entity().getTemplateType(), SearchCriteria.Op.EQ);
                tmpltTypeHyperSearch2.and("hypervisorType", 
tmpltTypeHyperSearch2.entity().getHypervisorType(), SearchCriteria.Op.EQ);
+        tmpltTypeHyperSearch2.and("templateName", 
tmpltTypeHyperSearch2.entity().getName(), SearchCriteria.Op.EQ);
 
 
                tmpltTypeSearch = createSearchBuilder();
@@ -897,10 +898,13 @@ public class VMTemplateDaoImpl extends 
GenericDaoBase<VMTemplateVO, Long> implem
        }
 
        @Override
-       public VMTemplateVO findRoutingTemplate(HypervisorType hType) {
+       public VMTemplateVO findRoutingTemplate(HypervisorType hType, String 
templateName) {
            SearchCriteria<VMTemplateVO> sc = tmpltTypeHyperSearch2.create();
         sc.setParameters("templateType", Storage.TemplateType.SYSTEM);
         sc.setParameters("hypervisorType", hType);
+        if (templateName != null) {
+            sc.setParameters("templateName", templateName);
+        }
 
         //order by descending order of id and select the first (this is going 
to be the latest)
         List<VMTemplateVO> tmplts = listBy(sc, new Filter(VMTemplateVO.class, 
"id", false, null, 1l));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10b6c1c6/test/integration/smoke/test_global_settings.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_global_settings.py 
b/test/integration/smoke/test_global_settings.py
index ec18cea..a7cdb3e 100644
--- a/test/integration/smoke/test_global_settings.py
+++ b/test/integration/smoke/test_global_settings.py
@@ -54,7 +54,7 @@ class TestUpdateConfigWithScope(cloudstackTestCase):
         self.assertNotEqual(len(listConfigurationsResponse), 0, "Check if the 
list API \
                             returns a non-empty response")
 
-        configParam = listConfigurationsResponse[2]
+        configParam = listConfigurationsResponse[7]
         self.assertEqual(configParam.value, updateConfigurationResponse.value, 
"Check if the update API returned \
                          is the same as the one we got in the list API")
 

Reply via email to