Updated Branches:
  refs/heads/4.2-forward 37d500d2a -> f70183171

CLOUDSTACK-4498 we should not reserve memory and cpu for vmware VMs if the 
vmware.reserve.cpu and vmware.reserve.mem are set to false.

Conflicts:
        
plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java

Signed-off-by: Jayapal <[email protected]>


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

Branch: refs/heads/4.2-forward
Commit: f7018317131f42f77e9bba18e5e1c78457679afc
Parents: 37d500d
Author: Bharat Kumar <[email protected]>
Authored: Tue Aug 27 12:27:22 2013 +0530
Committer: Jayapal <[email protected]>
Committed: Tue Aug 27 19:42:07 2013 +0530

----------------------------------------------------------------------
 .../com/cloud/hypervisor/guru/VMwareGuru.java   | 12 +++++-
 .../vmware/manager/VmwareManagerImpl.java       |  2 -
 .../vmware/resource/VmwareResource.java         | 43 ++++++++++++--------
 server/src/com/cloud/configuration/Config.java  |  4 +-
 4 files changed, 39 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f7018317/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
index 8aae8c8..7c70c6a 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
@@ -29,8 +29,11 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 
 import com.cloud.agent.api.storage.CreateEntityDownloadURLCommand;
+import com.cloud.dc.dao.ClusterDao;
 import com.cloud.host.Host;
+import com.cloud.server.ConfigurationServer;
 import com.cloud.storage.Storage;
+import com.cloud.vm.dao.VMInstanceDao;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
 import org.apache.log4j.Logger;
 
@@ -108,12 +111,17 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru {
     @Inject SecondaryStorageVmManager _secStorageMgr;
     @Inject NetworkModel _networkMgr;
     @Inject ConfigurationDao _configDao;
+    @Inject ConfigurationServer _configServer;
     @Inject
     NicDao _nicDao;
     @Inject
     PhysicalNetworkDao _physicalNetworkDao;
     @Inject
     PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao;
+    @Inject
+    VMInstanceDao _vmDao;
+    @Inject
+    ClusterDao _clusterDao;
 
     protected VMwareGuru() {
         super();
@@ -180,7 +188,9 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru {
                 break;
             }
         }
-
+        long clusterId = _hostDao.findById( 
_vmDao.findById(vm.getId()).getHostId()).getClusterId();
+        details.put(Config.VmwareReserveCpu.key(), 
_configServer.getConfigValue(Config.VmwareReserveCpu.key(), 
Config.ConfigurationParameterScope.cluster.toString(), clusterId));
+        details.put(Config.VmwareReserveMem.key(), 
_configServer.getConfigValue(Config.VmwareReserveMem.key(), 
Config.ConfigurationParameterScope.cluster.toString(), clusterId));
         to.setDetails(details);
 
         if(vm.getVirtualMachine() instanceof DomainRouterVO) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f7018317/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
index 4d24562..b5e7535 100755
--- 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
@@ -518,8 +518,6 @@ public class VmwareManagerImpl extends ManagerBase 
implements VmwareManager, Vmw
         params.put("vm.instancename.flag", _instanceNameFlag);
         params.put("service.console.name", _serviceConsoleName);
         params.put("management.portgroup.name", _managemetPortGroupName);
-        params.put("vmware.reserve.cpu", _reserveCpu);
-        params.put("vmware.reserve.mem", _reserveMem);
         params.put("vmware.root.disk.controller", _rootDiskController);
         params.put("vmware.recycle.hung.wokervm", _recycleHungWorker);
         params.put("ports.per.dvportgroup", _portsPerDvPortGroup);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f7018317/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index b612ac7..6e4d230 100755
--- 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -46,6 +46,7 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import com.cloud.configuration.Config;
 import org.apache.cloudstack.storage.command.DeleteCommand;
 import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
 import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
@@ -364,9 +365,7 @@ public class VmwareResource implements StoragePoolResource, 
ServerResource, Vmwa
     protected boolean _fullCloneFlag = false;
     protected boolean _instanceNameFlag = false;
 
-    protected boolean _reserveCpu = false;
 
-    protected boolean _reserveMem = false;
     protected boolean _recycleHungWorker = false;
     protected DiskControllerType _rootDiskController = DiskControllerType.ide;
 
@@ -2689,7 +2688,6 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                     vmMo.tearDownDevices(new Class<?>[] { VirtualDisk.class, 
VirtualEthernetCard.class });
                     vmMo.ensureScsiDeviceController();
                 } else {
-                    int ramMb = (int) (vmSpec.getMinRam() / (1024 * 1024));
                     Pair<ManagedObjectReference, DatastoreMO> 
rootDiskDataStoreDetails = null;
                     for (DiskTO vol : disks) {
                         if (vol.getType() == Volume.Type.ROOT) {
@@ -2707,7 +2705,7 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                     }
                     
                     if (!hyperHost.createBlankVm(vmNameOnVcenter, 
vmInternalCSName, vmSpec.getCpus(), vmSpec.getMaxSpeed().intValue(),
-                            vmSpec.getMinSpeed(), 
vmSpec.getLimitCpuUse(),(int)(vmSpec.getMaxRam()/(1024*1024)), ramMb,
+                            getReservedCpuMHZ(vmSpec), 
vmSpec.getLimitCpuUse(),(int)(vmSpec.getMaxRam()/(1024*1024)), 
getReservedMemoryMb(vmSpec),
                             translateGuestOsIdentifier(vmSpec.getArch(), 
vmSpec.getOs()).value(), rootDiskDataStoreDetails.first(), false)) {
                         throw new Exception("Failed to create VM. vmName: " + 
vmInternalCSName);
                     }
@@ -2732,11 +2730,10 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
             }
 
             VirtualMachineConfigSpec vmConfigSpec = new 
VirtualMachineConfigSpec();
-            int ramMb = (int) (vmSpec.getMinRam() / (1024 * 1024));
             String guestOsId = translateGuestOsIdentifier(vmSpec.getArch(), 
vmSpec.getOs()).value();
             
             VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), 
vmSpec.getMaxSpeed(),
-                    vmSpec.getMinSpeed(),(int) 
(vmSpec.getMaxRam()/(1024*1024)), ramMb,
+                    getReservedCpuMHZ(vmSpec),(int) 
(vmSpec.getMaxRam()/(1024*1024)), getReservedMemoryMb(vmSpec),
                     guestOsId, vmSpec.getLimitCpuUse());
             
             // Check for hotadd settings
@@ -2988,7 +2985,27 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
             }
         }
     }
-    
+
+    int getReservedMemoryMb(VirtualMachineTO vmSpec) {
+        if 
(vmSpec.getDetails().get(Config.VmwareReserveMem.key()).equalsIgnoreCase("true"))
 {
+              return  (int) (vmSpec.getMinRam() / (1024 * 1024));
+        }  else if (vmSpec.getMinRam() != vmSpec.getMaxRam()) {
+              s_logger.warn("memory overprovisioning factor is set to "+ 
(vmSpec.getMaxRam()/vmSpec.getMinRam())+" ignoring the flag 
vmware.reserve.mem");
+              return  (int) (vmSpec.getMinRam() / (1024 * 1024));
+        }
+        return 0;
+    }
+
+    int getReservedCpuMHZ(VirtualMachineTO vmSpec) {
+         if 
(vmSpec.getDetails().get(Config.VmwareReserveCpu.key()).equalsIgnoreCase("true"))
 {
+              return vmSpec.getMinSpeed();
+         }else if (vmSpec.getMinSpeed().intValue() != 
vmSpec.getMaxSpeed().intValue()) {
+              s_logger.warn("cpu overprovisioning factor is set to "+ 
(vmSpec.getMaxSpeed().intValue()/vmSpec.getMinSpeed().intValue())+" ignoring 
the flag vmware.reserve.cpu");
+              return vmSpec.getMinSpeed();
+         }
+         return 0;
+    }
+
     // return the finalized disk chain for startup, from top to bottom
     private String[] syncDiskChain(DatacenterMO dcMo, VirtualMachineMO vmMo, 
VirtualMachineTO vmSpec, 
        DiskTO vol, VirtualMachineDiskInfoBuilder diskInfoBuilder,
@@ -6623,18 +6640,10 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                    _privateNetworkVSwitchName = (String) 
params.get("private.network.vswitch.name");
                }
        
-               String value = (String) params.get("vmware.reserve.cpu");
-               if(value != null && value.equalsIgnoreCase("true"))
-                   _reserveCpu = true;
-       
-               value = (String) params.get("vmware.recycle.hung.wokervm");
+               String value = (String) 
params.get("vmware.recycle.hung.wokervm");
                if(value != null && value.equalsIgnoreCase("true"))
                    _recycleHungWorker = true;
-       
-               value = (String) params.get("vmware.reserve.mem");
-               if(value != null && value.equalsIgnoreCase("true"))
-                   _reserveMem = true;
-       
+
                value = (String)params.get("vmware.root.disk.controller");
                if(value != null && value.equalsIgnoreCase("scsi"))
                    _rootDiskController = DiskControllerType.scsi;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f7018317/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 1cc31b6..8dd5c8b 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -293,8 +293,8 @@ public enum Config {
     VmwareAdditionalVncPortRangeStart("Advanced", ManagementServer.class, 
Integer.class, "vmware.additional.vnc.portrange.start", "50000", "Start port 
number of additional VNC port range", null),
     VmwareAdditionalVncPortRangeSize("Advanced", ManagementServer.class, 
Integer.class, "vmware.additional.vnc.portrange.size", "1000", "Start port 
number of additional VNC port range", null),
     //VmwareGuestNicDeviceType("Advanced", ManagementServer.class, 
String.class, "vmware.guest.nic.device.type", "E1000", "Ethernet card type used 
in guest VM, valid values are E1000, PCNet32, Vmxnet2, Vmxnet3", null),
-    VmwareReserveCpu("Advanced", ManagementServer.class, Boolean.class, 
"vmware.reserve.cpu", "false", "Specify whether or not to reserve CPU based on 
CPU overprovisioning factor", null),
-    VmwareReserveMem("Advanced", ManagementServer.class, Boolean.class, 
"vmware.reserve.mem", "false", "Specify whether or not to reserve memory based 
on memory overprovisioning factor", null),
+    VmwareReserveCpu("Advanced", ManagementServer.class, Boolean.class, 
"vmware.reserve.cpu", "false", "Specify whether or not to reserve CPU when not 
overprovisioning, In case of cpu overprovisioning we will always reserve cpu", 
null, ConfigurationParameterScope.cluster.toString()),
+    VmwareReserveMem("Advanced", ManagementServer.class, Boolean.class, 
"vmware.reserve.mem", "false", "Specify whether or not to reserve memory when 
not overprovisioning, In case of memory overprovisioning we will always reserve 
memory", null, ConfigurationParameterScope.cluster.toString()),
     VmwareRootDiskControllerType("Advanced", ManagementServer.class, 
String.class, "vmware.root.disk.controller", "ide", "Specify the default disk 
controller for root volumes, valid values are scsi, ide", null),
     VmwareSystemVmNicDeviceType("Advanced", ManagementServer.class, 
String.class, "vmware.systemvm.nic.device.type", "E1000", "Specify the default 
network device type for system VMs, valid values are E1000, PCNet32, Vmxnet2, 
Vmxnet3", null),
     VmwareRecycleHungWorker("Advanced", ManagementServer.class, Boolean.class, 
"vmware.recycle.hung.wokervm", "false", "Specify whether or not to recycle hung 
worker VMs", null),

Reply via email to