diff --git a/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java b/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java index 98287bb279d..8827ca41d3c 100644 --- a/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java +++ b/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java @@ -16,10 +16,13 @@ // under the License. package com.cloud.capacity; +import java.util.Map; + import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import com.cloud.host.Host; +import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.VMTemplateVO; import com.cloud.vm.VirtualMachine; @@ -99,6 +102,8 @@ public interface CapacityManager { void updateCapacityForHost(Host host); + void updateCapacityForHost(Host host, Map offeringsMap); + /** * @param pool storage pool * @param templateForVmCreation template that will be used for vm creation diff --git a/server/src/main/java/com/cloud/alert/AlertManagerImpl.java b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java index 5a7a8b436e0..75b8cc7f3b4 100644 --- a/server/src/main/java/com/cloud/alert/AlertManagerImpl.java +++ b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java @@ -75,6 +75,8 @@ import com.cloud.host.HostVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.org.Grouping.AllocationState; import com.cloud.resource.ResourceManager; +import com.cloud.service.ServiceOfferingVO; +import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.StorageManager; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ManagerBase; @@ -121,6 +123,8 @@ public class AlertManagerImpl extends ManagerBase implements AlertManager, Confi private ConfigurationManager _configMgr; @Inject protected ConfigDepot _configDepot; + @Inject + ServiceOfferingDao _offeringsDao; private Timer _timer = null; private long _capacityCheckPeriod = 60L * 60L * 1000L; // One hour by default. @@ -275,8 +279,14 @@ public class AlertManagerImpl extends ManagerBase implements AlertManager, Confi // get all hosts...even if they are not in 'UP' state List hosts = _resourceMgr.listAllNotInMaintenanceHostsInOneZone(Host.Type.Routing, null); if (hosts != null) { + // prepare the service offerings + List offerings = _offeringsDao.listAllIncludingRemoved(); + Map offeringsMap = new HashMap(); + for (ServiceOfferingVO offering : offerings) { + offeringsMap.put(offering.getId(), offering); + } for (HostVO host : hosts) { - _capacityMgr.updateCapacityForHost(host); + _capacityMgr.updateCapacityForHost(host, offeringsMap); } } if (s_logger.isDebugEnabled()) { diff --git a/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java index 5530e53fdc4..f851471b0e0 100644 --- a/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java +++ b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java @@ -627,7 +627,12 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager, for (ServiceOfferingVO offering : offerings) { offeringsMap.put(offering.getId(), offering); } + updateCapacityForHost(host, offeringsMap); + } + @DB + @Override + public void updateCapacityForHost(final Host host, final Map offeringsMap) { long usedCpuCore = 0; long reservedCpuCore = 0; long usedCpu = 0; @@ -664,6 +669,9 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager, ramOvercommitRatio = Float.parseFloat(vmDetailRam); } ServiceOffering so = offeringsMap.get(vm.getServiceOfferingId()); + if (so == null) { + so = _offeringsDao.findByIdIncludingRemoved(vm.getServiceOfferingId()); + } if (so.isDynamic()) { usedMemory += ((Integer.parseInt(vmDetails.get(UsageEventVO.DynamicParameters.memory.name())) * 1024L * 1024L) / ramOvercommitRatio) * @@ -703,6 +711,9 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager, } ServiceOffering so = offeringsMap.get(vm.getServiceOfferingId()); Map vmDetails = _userVmDetailsDao.listDetailsKeyPairs(vm.getId()); + if (so == null) { + so = _offeringsDao.findByIdIncludingRemoved(vm.getServiceOfferingId()); + } if (so.isDynamic()) { reservedMemory += ((Integer.parseInt(vmDetails.get(UsageEventVO.DynamicParameters.memory.name())) * 1024L * 1024L) / ramOvercommitRatio) *