diff --git a/build/package.xml b/build/package.xml index 2715f7e995e..87f5e1d7484 100755 --- a/build/package.xml +++ b/build/package.xml @@ -195,6 +195,10 @@ + + + + diff --git a/core/src/com/cloud/capacity/CapacityVO.java b/core/src/com/cloud/capacity/CapacityVO.java index 34d8ef06b52..90e79add76d 100644 --- a/core/src/com/cloud/capacity/CapacityVO.java +++ b/core/src/com/cloud/capacity/CapacityVO.java @@ -105,7 +105,7 @@ public class CapacityVO implements Capacity { return reservedCapacity; } public void setReservedCapacity(long reservedCapacity) { - this.usedCapacity = reservedCapacity; + this.reservedCapacity = reservedCapacity; } @Override public long getTotalCapacity() { diff --git a/core/src/com/cloud/vm/VirtualMachineName.java b/core/src/com/cloud/vm/VirtualMachineName.java index a5d85170417..e1a1eabf56f 100755 --- a/core/src/com/cloud/vm/VirtualMachineName.java +++ b/core/src/com/cloud/vm/VirtualMachineName.java @@ -127,7 +127,7 @@ public class VirtualMachineName { public static boolean isValidRouterName(String name, String instance) { String[] tokens = name.split(SEPARATOR); - if (tokens.length != 4) { + if (tokens.length != 3) { return false; } @@ -137,9 +137,6 @@ public class VirtualMachineName { try { Long.parseLong(tokens[1]); - if (!Vlan.UNTAGGED.equalsIgnoreCase(tokens[3])) { - Long.parseLong(tokens[3], 16); - } } catch (NumberFormatException ex) { return false; } diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java b/server/src/com/cloud/alert/AlertManagerImpl.java index 5efbff1fefa..cd2771ceecd 100644 --- a/server/src/com/cloud/alert/AlertManagerImpl.java +++ b/server/src/com/cloud/alert/AlertManagerImpl.java @@ -73,6 +73,7 @@ import com.cloud.utils.db.Transaction; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.SecondaryStorageVmVO; +import com.cloud.vm.State; import com.cloud.vm.UserVmVO; import com.cloud.vm.dao.ConsoleProxyDao; import com.cloud.vm.dao.DomainRouterDao; @@ -318,6 +319,136 @@ public class AlertManagerImpl implements AlertManager { newCapacities.add(newMemoryCapacity); newCapacities.add(newCPUCapacity); } + } { + /*Add a checker here, 50% for debug purpose, */ + for (HostVO host : hosts) { + if (host.getType() != Host.Type.Routing) { + continue; + } + + long usedCpu = 0; + long usedMemory = 0; + long reservedMemory = 0; + long reservedCpu = 0; + List domainRouters = _routerDao.listUpByHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + domainRouters.size() + " router domains on host " + host.getId()); + } + for (DomainRouterVO router : domainRouters) { + ServiceOffering so = offeringsMap.get(router.getServiceOfferingId()); + if (router.getState() == State.Running) { + usedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + } + + List domainRoutersByLastHostId = _routerDao.listByLastHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + domainRoutersByLastHostId.size() + " router domains, not running on host " + host.getId()); + } + for (DomainRouterVO router : domainRoutersByLastHostId) { + ServiceOffering so = offeringsMap.get(router.getServiceOfferingId()); + reservedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + + List proxys = _consoleProxyDao.listUpByHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + proxys.size() + " console proxy on host " + host.getId()); + } + for(ConsoleProxyVO proxy : proxys) { + ServiceOffering so = offeringsMap.get(proxy.getServiceOfferingId()); + if (proxy.getState() == State.Running) { + usedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + } + + List proxysByLastHostId = _consoleProxyDao.listByLastHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + proxysByLastHostId.size() + " console proxy, not running on host " + host.getId()); + } + for (ConsoleProxyVO proxy : proxysByLastHostId) { + ServiceOffering so = offeringsMap.get(proxy.getServiceOfferingId()); + reservedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + + List secStorageVms = _secStorgaeVmDao.listUpByHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + secStorageVms.size() + " secondary storage VM on host " + host.getId()); + } + for(SecondaryStorageVmVO secStorageVm : secStorageVms) { + ServiceOffering so = offeringsMap.get(secStorageVm.getServiceOfferingId()); + if (secStorageVm.getState() == State.Running) { + usedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + } + + List secStorageVmsByLastHostId = _secStorgaeVmDao.listByLastHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + secStorageVmsByLastHostId.size() + " secondary storage VM, not running on host " + host.getId()); + } + for (SecondaryStorageVmVO secStorageVm : secStorageVmsByLastHostId) { + ServiceOffering so = offeringsMap.get(secStorageVm.getServiceOfferingId()); + reservedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + + List vms = _userVmDao.listUpByHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + vms.size() + " user VM on host " + host.getId()); + } + + for (UserVmVO vm : vms) { + ServiceOffering so = offeringsMap.get(vm.getServiceOfferingId()); + if (vm.getState() == State.Running) { + usedMemory += so.getRamSize() * 1024L * 1024L; + usedCpu += so.getCpu() * so.getSpeed(); + } + } + + List vmsByLastHostId = _userVmDao.listByLastHostId(host.getId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Found " + secStorageVmsByLastHostId.size() + " user VM, not running on host " + host.getId()); + } + for (UserVmVO vm : vmsByLastHostId) { + ServiceOffering so = offeringsMap.get(vm.getServiceOfferingId()); + reservedMemory += so.getRamSize() * 1024L * 1024L; + reservedCpu += so.getCpu() * so.getSpeed(); + } + + CapacityVO cpuCap = _capacityDao.findByHostIdType(host.getId(), CapacityVO.CAPACITY_TYPE_CPU); + CapacityVO memCap = _capacityDao.findByHostIdType(host.getId(), CapacityVO.CAPACITY_TYPE_MEMORY); + + if (cpuCap.getUsedCapacity() == usedCpu && cpuCap.getReservedCapacity() == reservedCpu) { + s_logger.debug("Cool, no need to calibrate cpu capacity, host:" + host.getId() + " usedCpu: " + cpuCap.getUsedCapacity() + " reservedCpu: " + cpuCap.getReservedCapacity()); + } else if (cpuCap.getReservedCapacity() != reservedCpu) { + s_logger.debug("Calibrate reserved cpu for host: " + host.getId() + " old reservedCpu:" + cpuCap.getReservedCapacity() + " new reservedCpu:" + reservedCpu); + cpuCap.setReservedCapacity(reservedCpu); + } else { + /*Didn't calibrate for used cpu, because VMs can be in state(starting/migrating) that I don't know on which host they are allocated*/ + s_logger.debug("host: " + host.getId() + ", old usedCpu: " + cpuCap.getUsedCapacity() + ", new usedCpu: " + usedCpu + ", no calibration"); + } + + if (memCap.getUsedCapacity() == usedMemory && memCap.getReservedCapacity() == reservedMemory) { + s_logger.debug("Cool, no need to calibrate memory capacity, host:" + host.getId() + " usedMem: " + memCap.getUsedCapacity() + " reservedMem: " + memCap.getReservedCapacity()); + } else if (memCap.getReservedCapacity() != reservedMemory) { + s_logger.debug("Calibrate reserved memory for host: " + host.getId() + " old reservedMem:" + memCap.getReservedCapacity() + " new reservedMem:" + reservedMemory); + memCap.setReservedCapacity(reservedMemory); + } else { + /*Didn't calibrate for used memory, because VMs can be in state(starting/migrating) that I don't know on which host they are allocated*/ + s_logger.debug("host: " + host.getId() + ", old usedMem: " + memCap.getUsedCapacity() + ", new nesedMem: " + usedMemory + ", no calibration"); + } + + try { + _capacityDao.update(cpuCap.getId(), cpuCap); + _capacityDao.update(memCap.getId(), memCap); + } catch (Exception e) { + + } + } } // Calculate storage pool capacity diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 43e3459a962..87af95d70a1 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -2457,7 +2457,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx String multicastRateStr = _configDao.getValue("multicast.throttling.rate"); _networkRate = ((networkRateStr == null) ? 200 : Integer.parseInt(networkRateStr)); _multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr)); - _serviceOffering = new ServiceOfferingVO("System Offering For Console Proxy", 1, _proxyRamSize, 256, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, + _serviceOffering = new ServiceOfferingVO("System Offering For Console Proxy", 1, _proxyRamSize, 0, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); _serviceOffering.setUniqueName("Cloud.com-ConsoleProxy"); _serviceOffering = _offeringDao.persistSystemServiceOffering(_serviceOffering); diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/com/cloud/deploy/FirstFitPlanner.java index 93f7d2a09ca..bed78437a19 100644 --- a/server/src/com/cloud/deploy/FirstFitPlanner.java +++ b/server/src/com/cloud/deploy/FirstFitPlanner.java @@ -160,50 +160,49 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { protected boolean deployToHost(HostVO host, Integer cpu, long ram, boolean fromLastHost, ExcludeList avoid) { if (avoid.shouldAvoid(host)) { return false; - } - - CapacityVO capacityCpu = _capacityDao.findByHostIdType(host.getId(), CapacityVO.CAPACITY_TYPE_CPU); - CapacityVO capacityMem = _capacityDao.findByHostIdType(host.getId(), CapacityVO.CAPACITY_TYPE_MEMORY); - - capacityCpu = _capacityDao.lockRow(capacityCpu.getId(), true); - capacityMem = _capacityDao.lockRow(capacityMem.getId(), true); - - Transaction txn = Transaction.currentTxn(); - - try { - txn.start(); - - long usedCpu = capacityCpu.getUsedCapacity(); + } + + CapacityVO capacityCpu = _capacityDao.findByHostIdType(host.getId(), CapacityVO.CAPACITY_TYPE_CPU); + CapacityVO capacityMem = _capacityDao.findByHostIdType(host.getId(), CapacityVO.CAPACITY_TYPE_MEMORY); + + Transaction txn = Transaction.currentTxn(); + + try { + txn.start(); + capacityCpu = _capacityDao.lockRow(capacityCpu.getId(), true); + capacityMem = _capacityDao.lockRow(capacityMem.getId(), true); + + long usedCpu = capacityCpu.getUsedCapacity(); long usedMem = capacityMem.getUsedCapacity(); long reservedCpu = capacityCpu.getReservedCapacity(); long reservedMem = capacityMem.getReservedCapacity(); long totalCpu = capacityCpu.getTotalCapacity(); long totalMem = capacityMem.getTotalCapacity(); - + boolean success = false; - if (fromLastHost) { - /*alloc from reserved*/ - if (reservedCpu >= cpu && reservedMem >= ram) { - capacityCpu.setReservedCapacity(reservedCpu - cpu); - capacityMem.setReservedCapacity(reservedMem - ram); - capacityCpu.setUsedCapacity(usedCpu + cpu); - capacityMem.setUsedCapacity(usedMem + ram); - success = true; - } - } else { - /*alloc from free resource*/ - if ((reservedCpu + usedCpu + cpu <= totalCpu) && (reservedMem + usedMem + ram <= totalMem)) { - capacityCpu.setUsedCapacity(usedCpu + cpu); - capacityMem.setUsedCapacity(usedMem + ram); - success = true; - } - } - - if (success) { - s_logger.debug("alloc cpu from host: " + host.getId() + ", old used: " + usedCpu + ", old reserved: " + - reservedCpu + ", old total: " + totalCpu + - "; new used:" + capacityCpu.getUsedCapacity() + ", reserved:" + capacityCpu.getReservedCapacity() + ", total: " + capacityCpu.getTotalCapacity() + - "; requested cpu:" + cpu + ",alloc_from_last:" + fromLastHost); + if (fromLastHost) { + /*alloc from reserved*/ + if (reservedCpu >= cpu && reservedMem >= ram) { + capacityCpu.setReservedCapacity(reservedCpu - cpu); + capacityMem.setReservedCapacity(reservedMem - ram); + capacityCpu.setUsedCapacity(usedCpu + cpu); + capacityMem.setUsedCapacity(usedMem + ram); + success = true; + } + } else { + /*alloc from free resource*/ + if ((reservedCpu + usedCpu + cpu <= totalCpu) && (reservedMem + usedMem + ram <= totalMem)) { + capacityCpu.setUsedCapacity(usedCpu + cpu); + capacityMem.setUsedCapacity(usedMem + ram); + success = true; + } + } + + if (success) { + s_logger.debug("alloc cpu from host: " + host.getId() + ", old used: " + usedCpu + ", old reserved: " + + reservedCpu + ", old total: " + totalCpu + + "; new used:" + capacityCpu.getUsedCapacity() + ", reserved:" + capacityCpu.getReservedCapacity() + ", total: " + capacityCpu.getTotalCapacity() + + "; requested cpu:" + cpu + ",alloc_from_last:" + fromLastHost); s_logger.debug("alloc mem from host: " + host.getId() + ", old used: " + usedMem + ", old reserved: " + reservedMem + ", old total: " + totalMem + "; new used: " + capacityMem.getUsedCapacity() + ", reserved: " + @@ -211,7 +210,16 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { _capacityDao.update(capacityCpu.getId(), capacityCpu); _capacityDao.update(capacityMem.getId(), capacityMem); - } + } else { + if (fromLastHost) { + s_logger.debug("Failed to alloc resource from host: " + host.getId() + " reservedCpu: " + reservedCpu + ", requested cpu: " + cpu + + ", reservedMem: " + reservedMem + ", requested mem: " + ram); + } else { + s_logger.debug("Failed to alloc resource from host: " + host.getId() + " reservedCpu: " + reservedCpu + ", used cpu: " + usedCpu + ", requested cpu: " + cpu + + ", total cpu: " + totalCpu + + ", reservedMem: " + reservedMem + ", used Mem: " + usedMem + ", requested mem: " + ram + ", total Mem:" + totalMem); + } + } txn.commit(); return success; diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java index 6dc31a64f0f..be4f671c5d3 100644 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java @@ -267,7 +267,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, } private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) { - for (int i = 0; i < _waitTime; i++) { + for (int i = 0; i < _waitTime *2; i++) { List hosts = _hostDao.listBy(Host.Type.Routing, clusterId, podId, dcId); for (HostVO host : hosts) { if (host.getGuid().equalsIgnoreCase(guid)) { @@ -275,7 +275,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, } } try { - Thread.sleep(60000); + Thread.sleep(30000); } catch (InterruptedException e) { s_logger.debug("Failed to sleep: " + e.toString()); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 09672d48abe..af634cc853b 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -377,7 +377,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag vmGuestAddress = _vmDao.findById(vmId).getGuestIpAddress(); } - cmds.addCommand(new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ip.getAddress(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress)); + cmds.addCommand("IPAssocCommand", new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ip.getAddress(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress)); firstIP = false; } diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java index db46b55f33a..cd473fc7cbe 100644 --- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java +++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java @@ -1529,7 +1529,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute String multicastRateStr = _configDao.getValue("multicast.throttling.rate"); _networkRate = ((networkRateStr == null) ? 200 : Integer.parseInt(networkRateStr)); _multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr)); - _offering = new ServiceOfferingVO("System Offering For Software Router", 1, _routerRamSize, 256, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); + _offering = new ServiceOfferingVO("System Offering For Software Router", 1, _routerRamSize, 0, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); _offering.setUniqueName("Cloud.Com-SoftwareRouter"); _offering = _serviceOfferingDao.persistSystemServiceOffering(_offering); _template = _templateDao.findRoutingTemplate(); @@ -2296,6 +2296,8 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute return false; } + // FIXME: Need to check return values from ipassoc command + return true; } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index a653171d0de..17a4558a9f3 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -1529,7 +1529,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V String multicastRateStr = _configDao.getValue("multicast.throttling.rate"); _networkRate = ((networkRateStr == null) ? 200 : Integer.parseInt(networkRateStr)); _multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr)); - _serviceOffering = new ServiceOfferingVO("System Offering For Secondary Storage VM", 1, _secStorageVmRamSize, 256, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); + _serviceOffering = new ServiceOfferingVO("System Offering For Secondary Storage VM", 1, _secStorageVmRamSize, 0, 0, 0, false, null, NetworkOffering.GuestIpType.Virtual, useLocalStorage, true, null, true); _serviceOffering.setUniqueName("Cloud.com-SecondaryStorage"); _serviceOffering = _offeringDao.persistSystemServiceOffering(_serviceOffering); _template = _templateDao.findConsoleProxyTemplate(); diff --git a/server/src/com/cloud/vm/VMStateListener.java b/server/src/com/cloud/vm/VMStateListener.java index b828234d3ec..97b1eb0678a 100644 --- a/server/src/com/cloud/vm/VMStateListener.java +++ b/server/src/com/cloud/vm/VMStateListener.java @@ -65,7 +65,9 @@ public class VMStateListener implements StateListener, State public List getProxyListInStates(State... states); public List listByHostId(long hostId); + public List listByLastHostId(long hostId); public List listUpByHostId(long hostId); public List getDatacenterProxyLoadMatrix(); diff --git a/server/src/com/cloud/vm/dao/ConsoleProxyDaoImpl.java b/server/src/com/cloud/vm/dao/ConsoleProxyDaoImpl.java index 45a6a564c35..f369f24bd07 100644 --- a/server/src/com/cloud/vm/dao/ConsoleProxyDaoImpl.java +++ b/server/src/com/cloud/vm/dao/ConsoleProxyDaoImpl.java @@ -112,6 +112,7 @@ public class ConsoleProxyDaoImpl extends GenericDaoBase im protected SearchBuilder DataCenterStatusSearch; protected SearchBuilder StateSearch; protected SearchBuilder HostSearch; + protected SearchBuilder LastHostSearch; protected SearchBuilder HostUpSearch; protected SearchBuilder StateChangeSearch; @@ -129,7 +130,12 @@ public class ConsoleProxyDaoImpl extends GenericDaoBase im HostSearch = createSearchBuilder(); HostSearch.and("host", HostSearch.entity().getHostId(), SearchCriteria.Op.EQ); - HostSearch.done(); + HostSearch.done(); + + LastHostSearch = createSearchBuilder(); + LastHostSearch.and("lastHost", LastHostSearch.entity().getLastHostId(), SearchCriteria.Op.EQ); + LastHostSearch.and("state", LastHostSearch.entity().getState(), SearchCriteria.Op.EQ); + LastHostSearch.done(); HostUpSearch = createSearchBuilder(); HostUpSearch.and("host", HostUpSearch.entity().getHostId(), SearchCriteria.Op.EQ); @@ -423,5 +429,13 @@ public class ConsoleProxyDaoImpl extends GenericDaoBase im s_logger.debug(str.toString()); } return result > 0; + } + + @Override + public List listByLastHostId(long hostId) { + SearchCriteria sc = LastHostSearch.create(); + sc.setParameters("lastHost", hostId); + sc.setParameters("state", State.Stopped); + return listBy(sc); } } diff --git a/server/src/com/cloud/vm/dao/DomainRouterDao.java b/server/src/com/cloud/vm/dao/DomainRouterDao.java index 0d31cf935a4..dddb3ed65f6 100755 --- a/server/src/com/cloud/vm/dao/DomainRouterDao.java +++ b/server/src/com/cloud/vm/dao/DomainRouterDao.java @@ -75,6 +75,7 @@ public interface DomainRouterDao extends GenericDao, State * @return list of DomainRouterVO */ public List listByHostId(Long hostId); + public List listByLastHostId(Long hostId); /** * list virtual machine routers by host id. exclude destroyed, stopped, expunging VM, diff --git a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java index 1157f159194..3c1b925fa57 100755 --- a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java +++ b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java @@ -59,6 +59,7 @@ public class DomainRouterDaoImpl extends GenericDaoBase im protected final SearchBuilder DcSearch; protected final SearchBuilder IpSearch; protected final SearchBuilder HostSearch; + protected final SearchBuilder LastHostSearch; protected final SearchBuilder HostUpSearch; protected final SearchBuilder DomainIdSearch; protected final SearchBuilder VlanDbIdSearch; @@ -98,6 +99,11 @@ public class DomainRouterDaoImpl extends GenericDaoBase im HostSearch = createSearchBuilder(); HostSearch.and("host", HostSearch.entity().getHostId(), SearchCriteria.Op.EQ); HostSearch.done(); + + LastHostSearch = createSearchBuilder(); + LastHostSearch.and("lastHost", LastHostSearch.entity().getLastHostId(), SearchCriteria.Op.EQ); + LastHostSearch.and("state", LastHostSearch.entity().getState(), SearchCriteria.Op.EQ); + LastHostSearch.done(); HostUpSearch = createSearchBuilder(); HostUpSearch.and("host", HostUpSearch.entity().getHostId(), SearchCriteria.Op.EQ); @@ -345,4 +351,12 @@ public class DomainRouterDaoImpl extends GenericDaoBase im } return result > 0; } + + @Override + public List listByLastHostId(Long hostId) { + SearchCriteria sc = LastHostSearch.create(); + sc.setParameters("lastHost", hostId); + sc.setParameters("state", State.Stopped); + return listBy(sc); + } } diff --git a/server/src/com/cloud/vm/dao/SecondaryStorageVmDao.java b/server/src/com/cloud/vm/dao/SecondaryStorageVmDao.java index cd67c6ce389..f33a71322f9 100644 --- a/server/src/com/cloud/vm/dao/SecondaryStorageVmDao.java +++ b/server/src/com/cloud/vm/dao/SecondaryStorageVmDao.java @@ -33,6 +33,7 @@ public interface SecondaryStorageVmDao extends GenericDao getSecStorageVmListInStates(State... states); public List listByHostId(long hostId); + public List listByLastHostId(long hostId); public List listUpByHostId(long hostId); diff --git a/server/src/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java b/server/src/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java index f35c5ca5d5e..20908e2c781 100644 --- a/server/src/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java +++ b/server/src/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java @@ -48,6 +48,7 @@ public class SecondaryStorageVmDaoImpl extends GenericDaoBase DataCenterStatusSearch; protected SearchBuilder StateSearch; protected SearchBuilder HostSearch; + protected SearchBuilder LastHostSearch; protected SearchBuilder HostUpSearch; protected SearchBuilder ZoneSearch; protected SearchBuilder StateChangeSearch; @@ -68,6 +69,11 @@ public class SecondaryStorageVmDaoImpl extends GenericDaoBase 0; + } + + @Override + public List listByLastHostId(long hostId) { + SearchCriteria sc = LastHostSearch.create(); + sc.setParameters("lastHost", hostId); + sc.setParameters("state", State.Stopped); + return listBy(sc); } } diff --git a/server/src/com/cloud/vm/dao/UserVmDao.java b/server/src/com/cloud/vm/dao/UserVmDao.java index 69120eae2d0..da3a1c44d99 100755 --- a/server/src/com/cloud/vm/dao/UserVmDao.java +++ b/server/src/com/cloud/vm/dao/UserVmDao.java @@ -34,6 +34,7 @@ public interface UserVmDao extends GenericDao, StateDao listByAccountAndPod(long accountId, long podId); List listByAccountAndDataCenter(long accountId, long dcId); List listByHostId(Long hostId); + List listByLastHostId(Long hostId); List listUpByHostId(Long hostId); /** diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java index 03f7648d01b..7e1647b99a7 100755 --- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -49,6 +49,7 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use protected final SearchBuilder AccountDataCenterSearch; protected final SearchBuilder AccountSearch; protected final SearchBuilder HostSearch; + protected final SearchBuilder LastHostSearch; protected final SearchBuilder HostUpSearch; protected final SearchBuilder HostRunningSearch; protected final SearchBuilder NameSearch; @@ -69,6 +70,11 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use HostSearch.and("host", HostSearch.entity().getHostId(), SearchCriteria.Op.EQ); HostSearch.done(); + LastHostSearch = createSearchBuilder(); + LastHostSearch.and("lastHost", LastHostSearch.entity().getLastHostId(), SearchCriteria.Op.EQ); + LastHostSearch.and("state", LastHostSearch.entity().getState(), SearchCriteria.Op.EQ); + LastHostSearch.done(); + HostUpSearch = createSearchBuilder(); HostUpSearch.and("host", HostUpSearch.entity().getHostId(), SearchCriteria.Op.EQ); HostUpSearch.and("states", HostUpSearch.entity().getState(), SearchCriteria.Op.NIN); @@ -346,4 +352,12 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use } return result > 0; } + + @Override + public List listByLastHostId(Long hostId) { + SearchCriteria sc = LastHostSearch.create(); + sc.setParameters("lastHost", hostId); + sc.setParameters("state", State.Stopped); + return listBy(sc); + } }