You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by we...@apache.org on 2015/01/16 10:57:23 UTC
git commit: updated refs/heads/master to 7110377
Repository: cloudstack
Updated Branches:
refs/heads/master 5028874e1 -> 71103772b
CLOUDSTACK-7219: Cannot display Cluster Settings for missing commit 95e41fdf0da50c165a9317847058fce4efeddbcf
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/71103772
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/71103772
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/71103772
Branch: refs/heads/master
Commit: 71103772b7502ff3a9f9af101652fe431cb8f630
Parents: 5028874
Author: Wei Zhou <w....@tech.leaseweb.com>
Authored: Fri Jan 16 10:56:25 2015 +0100
Committer: Wei Zhou <w....@tech.leaseweb.com>
Committed: Fri Jan 16 10:56:25 2015 +0100
----------------------------------------------------------------------
.../cloud/agent/api/to/VirtualMachineTO.java | 9 ++++++
.../src/com/cloud/hypervisor/XenServerGuru.java | 29 +++++++++++++++++++-
.../xenserver/resource/CitrixResourceBase.java | 17 ++++++------
3 files changed, 45 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/71103772/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
index 4b36df5..3e508ee 100644
--- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
+++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
@@ -61,6 +61,7 @@ public class VirtualMachineTO {
DiskTO[] disks;
NicTO[] nics;
GPUDeviceTO gpuDevice;
+ Integer vcpuMaxLimit;
public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer speed, long minRam, long maxRam, BootloaderType bootloader,
String os, boolean enableHA, boolean limitCpuUse, String vncPassword) {
@@ -283,4 +284,12 @@ public class VirtualMachineTO {
this.platformEmulator = platformEmulator;
}
+ public Integer getVcpuMaxLimit() {
+ return vcpuMaxLimit;
+ }
+
+ public void setVcpuMaxLimit(Integer vcpuMaxLimit) {
+ this.vcpuMaxLimit = vcpuMaxLimit;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/71103772/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java
index 7ee7c88..f8aabff 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java
@@ -27,12 +27,14 @@ import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
+import org.apache.cloudstack.framework.config.Configurable;
import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
import org.apache.cloudstack.storage.command.CopyCommand;
import org.apache.cloudstack.storage.command.DettachCommand;
import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.apache.cloudstack.framework.config.ConfigKey;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.to.DataObjectType;
@@ -52,11 +54,13 @@ import com.cloud.storage.dao.GuestOSHypervisorDao;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.template.VirtualMachineTemplate.BootloaderType;
import com.cloud.utils.Pair;
+import com.cloud.vm.UserVmVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.dao.UserVmDao;
@Local(value = HypervisorGuru.class)
-public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru {
+public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru, Configurable {
@Inject
GuestOSDao _guestOsDao;
@Inject
@@ -71,6 +75,11 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
PrimaryDataStoreDao _storagePoolDao;
@Inject
VolumeDataFactory _volFactory;
+ @Inject
+ UserVmDao _userVmDao;
+
+ static final ConfigKey<Integer> MaxNumberOfVCPUSPerVM = new ConfigKey<Integer>("Advanced", Integer.class, "xen.vm.vcpu.max", "16",
+ "Maximum number of VCPUs that VM can get in XenServer.", true, ConfigKey.Scope.Cluster);
protected XenServerGuru() {
super();
@@ -88,6 +97,14 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
bt = vm.getBootLoaderType();
}
VirtualMachineTO to = toVirtualMachineTO(vm);
+ UserVmVO userVmVO = _userVmDao.findById(vm.getId());
+ if (userVmVO != null) {
+ HostVO host = hostDao.findById(userVmVO.getHostId());
+ if (host != null) {
+ to.setVcpuMaxLimit(MaxNumberOfVCPUSPerVM.valueIn(host.getClusterId()));
+ }
+ }
+
to.setBootloader(bt);
// Determine the VM's OS description
@@ -182,4 +199,14 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
}
return new Pair<Boolean, Long>(Boolean.FALSE, new Long(hostId));
}
+
+ @Override
+ public String getConfigComponentName() {
+ return XenServerGuru.class.getSimpleName();
+ }
+
+ @Override
+ public ConfigKey<?>[] getConfigKeys() {
+ return new ConfigKey<?>[] {MaxNumberOfVCPUSPerVM};
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/71103772/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
index ccf4626..07318b8 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
@@ -1325,6 +1325,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
vmr.otherConfig.put("vm_uuid", vmSpec.getUuid());
+ vmr.VCPUsMax = (long) vmSpec.getCpus(); // FIX ME: In case of dynamic scaling this VCPU max should be the minumum of
+ // recommended value for that template and capacity remaining on host
if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
//scaling is allowed
@@ -1333,13 +1335,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vmr.memoryDynamicMin = vmSpec.getMinRam();
vmr.memoryDynamicMax = vmSpec.getMaxRam();
if (guestOsTypeName.toLowerCase().contains("windows")) {
- vmr.VCPUsMax = (long)vmSpec.getCpus();
+ vmr.VCPUsMax = (long) vmSpec.getCpus();
} else {
- // XenServer has a documented limit of 16 vcpus per vm
- vmr.VCPUsMax = 2L * vmSpec.getCpus();
- if (vmr.VCPUsMax > 16)
- {
- vmr.VCPUsMax = 16L;
+ if (vmSpec.getVcpuMaxLimit() != null) {
+ vmr.VCPUsMax = (long) vmSpec.getVcpuMaxLimit();
}
}
} else {
@@ -1351,11 +1350,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vmr.memoryStaticMax = vmSpec.getMaxRam();
vmr.memoryDynamicMin = vmSpec.getMaxRam();;
vmr.memoryDynamicMax = vmSpec.getMaxRam();
- vmr.VCPUsMax = (long)vmSpec.getCpus();
- }
+ vmr.VCPUsMax = (long) vmSpec.getCpus();
+ }
- vmr.VCPUsAtStartup = (long)vmSpec.getCpus();
+ vmr.VCPUsAtStartup = (long) vmSpec.getCpus();
vmr.consoles.clear();
VM vm = VM.create(conn, vmr);