diff --git a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/XenServerGuru.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/XenServerGuru.java index 2ef942cd53a3..e8cea266af76 100644 --- a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/XenServerGuru.java +++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/XenServerGuru.java @@ -98,7 +98,19 @@ public VirtualMachineTO implement(VirtualMachineProfile vm) { if (userVmVO != null) { HostVO host = hostDao.findById(userVmVO.getHostId()); if (host != null) { - to.setVcpuMaxLimit(MaxNumberOfVCPUSPerVM.valueIn(host.getClusterId())); + // Max cpu cannot be more than host capability + if (host.getCpus() < MaxNumberOfVCPUSPerVM.valueIn(host.getClusterId())) { + String message = String.valueOf(new StringBuilder() + .append("Ignoring global max vCPUs limit (from global setting xen.vm.vcpu.max) on vm ") + .append(vm.getUuid()).append(" and setting VM max vCPU to host pCPU max: ") + .append(host.getCpus()) + .append(". Requested number of virtual CPUs exceeds number of host physical CPUs")); + logger.info(message); + to.setVcpuMaxLimit(host.getCpus()); + } else { + logger.info("Setting vm: " + vm.getUuid() + " max vCPU limit (from global setting xen.vm.vcpu.max) to: " + MaxNumberOfVCPUSPerVM.valueIn(host.getClusterId())); + to.setVcpuMaxLimit(MaxNumberOfVCPUSPerVM.valueIn(host.getClusterId())); + } } }