From e2664197ecbc63f7a24a82faf1ccb2e776a961cf Mon Sep 17 00:00:00 2001 From: Rakesh Date: Wed, 17 Mar 2021 13:12:02 +0100 Subject: [PATCH] server: Fix NPE while cloudstack agent failed to connect to mgt server (#4779) * Fix NPE while cloudstack agent failed to connect to mgt server If `ramOvercommitRatio` field is missing in user_vm_details table is missing then agent throws NPE after restarting It is because in user_vm_details, there are 'cpuOvercommitRatio' for all vms, but for vms the field 'ramOvercommitRatio' is missing in the table. * code feedback --- .../main/java/com/cloud/capacity/CapacityManagerImpl.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java index fba24e0a8c7..4761349f9f7 100644 --- a/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java +++ b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java @@ -665,11 +665,9 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager, Map vmDetails = _userVmDetailsDao.listDetailsKeyPairs(vm.getId()); String vmDetailCpu = vmDetails.get("cpuOvercommitRatio"); String vmDetailRam = vmDetails.get("memoryOvercommitRatio"); - if (vmDetailCpu != null) { - //if vmDetail_cpu is not null it means it is running in a overcommited cluster. - cpuOvercommitRatio = Float.parseFloat(vmDetailCpu); - ramOvercommitRatio = Float.parseFloat(vmDetailRam); - } + // if vmDetailCpu or vmDetailRam is not null it means it is running in a overcommitted cluster. + cpuOvercommitRatio = (vmDetailCpu != null) ? Float.parseFloat(vmDetailCpu) : clusterCpuOvercommitRatio; + ramOvercommitRatio = (vmDetailRam != null) ? Float.parseFloat(vmDetailRam) : clusterRamOvercommitRatio; ServiceOffering so = offeringsMap.get(vm.getServiceOfferingId()); if (so == null) { so = _offeringsDao.findByIdIncludingRemoved(vm.getServiceOfferingId());