}
// we don't need to check host capacity now, since hostAllocators will do that anyway
private boolean hostHasCpuMemoryCapacity(long hostId, List<Long> vmOnHost, VMInstanceVO vm) {
ServiceOffering so = _offeringDao.findById(vm.getServiceOfferingId());
long usedMemory = calcHostAllocatedCpuMemoryCapacity(vmOnHost, CapacityVO.CAPACITY_TYPE_MEMORY);
if (s_logger.isDebugEnabled()) {
s_logger.debug("Calculated static-allocated memory for VMs on host " + hostId + ": " + usedMemory + " bytes, requesting memory: " + (so != null ? so.getRamSize() * 1024L * 1024L : "")
+ " bytes");
}
SearchCriteria<CapacityVO> sc = _capacityDao.createSearchCriteria();
sc.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, hostId);
sc.addAnd("capacityType", SearchCriteria.Op.EQ, CapacityVO.CAPACITY_TYPE_MEMORY);
List<CapacityVO> capacities = _capacityDao.search(sc, null);
if (capacities.size() > 0) {
if (capacities.get(0).getTotalCapacity() < usedMemory + (so != null ? so.getRamSize() * 1024L * 1024L : 0)) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Host " + hostId + " runs out of memory capacity");
}
return false;
}
} else {
s_logger.warn("Host " + hostId + " has not reported memory capacity yet");
return false;
}
long usedCpu = calcHostAllocatedCpuMemoryCapacity(vmOnHost, CapacityVO.CAPACITY_TYPE_CPU);
if (s_logger.isDebugEnabled()) {
s_logger.debug("Calculated static-allocated CPU for VMs on host " + hostId + ": " + usedCpu + " GHz, requesting cpu: " + (so != null ? so.getCpu() * so.getSpeed() : "") + " GHz");
}
sc = _capacityDao.createSearchCriteria();
sc.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, hostId);
sc.addAnd("capacityType", SearchCriteria.Op.EQ, CapacityVO.CAPACITY_TYPE_CPU);
capacities = _capacityDao.search(sc, null);
if (capacities.size() > 0) {
if (capacities.get(0).getTotalCapacity() < usedCpu + (so != null ? so.getCpu() * so.getSpeed() : 0)) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Host " + hostId + " runs out of CPU capacity");
}
return false;
}