diff --git a/server/src/com/cloud/agent/AgentManager.java b/server/src/com/cloud/agent/AgentManager.java index ad406d8797d..91ade974382 100755 --- a/server/src/com/cloud/agent/AgentManager.java +++ b/server/src/com/cloud/agent/AgentManager.java @@ -41,21 +41,18 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.offering.ServiceOffering; import com.cloud.resource.ServerResource; import com.cloud.service.ServiceOfferingVO; -import com.cloud.storage.StoragePoolVO; -import com.cloud.storage.VMTemplateVO; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.User; import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.utils.component.Manager; -import com.cloud.vm.VMInstanceVO; /** * AgentManager manages hosts. It directly coordinates between the DAOs and the connections it manages. */ public interface AgentManager extends Manager { public enum OnError { - Revert, Continue, Stop + Continue, Stop } /** @@ -186,13 +183,6 @@ public interface AgentManager extends Manager { String getHostTags(long hostId); - /** - * Find a host based on the type needed, data center to deploy in, pod to deploy in, service offering, template, and list of - * host to avoid. - */ - - Host findHost(Host.Type type, DataCenterVO dc, HostPodVO pod, StoragePoolVO sp, ServiceOfferingVO offering, VMTemplateVO template, VMInstanceVO vm, Host currentHost, Set avoid); - List listByDataCenter(long dcId); List listByPod(long podId); diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index b299a23387c..6078818d0b1 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -87,6 +87,7 @@ import com.cloud.api.commands.UpdateHostPasswordCmd; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; +import com.cloud.cluster.ManagementServerNode; import com.cloud.cluster.StackMaid; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterDetailsDao; @@ -100,17 +101,11 @@ import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.DataCenterIpAddressDao; import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DataCenterDeployment; -import com.cloud.deploy.DeployDestination; -import com.cloud.deploy.DeploymentPlanner; -import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.event.dao.EventDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConnectionException; import com.cloud.exception.DiscoveredWithErrorException; import com.cloud.exception.DiscoveryException; -import com.cloud.exception.InsufficientServerCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.OperationTimedoutException; import com.cloud.exception.PermissionDeniedException; @@ -131,9 +126,7 @@ import com.cloud.host.dao.HostTagsDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase; -import com.cloud.maint.UpgradeManager; import com.cloud.network.IPAddressVO; -import com.cloud.network.NetworkManager; import com.cloud.network.dao.IPAddressDao; import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; @@ -148,20 +141,16 @@ import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolHostVO; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateVO; import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; -import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; -import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.resource.DummySecondaryStorageResource; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.User; import com.cloud.user.UserContext; -import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; import com.cloud.utils.ActionDelegate; import com.cloud.utils.NumbersUtil; @@ -178,7 +167,6 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; -import com.cloud.utils.net.MacAddress; import com.cloud.utils.net.NetUtils; import com.cloud.utils.nio.HandlerFactory; import com.cloud.utils.nio.Link; @@ -187,7 +175,6 @@ import com.cloud.utils.nio.Task; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineManager; -import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.VMInstanceDao; /** @@ -218,12 +205,8 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS @Inject protected HostDao _hostDao = null; @Inject - protected UserStatisticsDao _userStatsDao = null; - @Inject protected DataCenterDao _dcDao = null; @Inject - protected VlanDao _vlanDao = null; - @Inject protected DataCenterIpAddressDao _privateIPAddressDao = null; @Inject protected IPAddressDao _publicIPAddressDao = null; @@ -236,8 +219,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS @Inject protected VMInstanceDao _vmDao = null; @Inject - protected VolumeDao _volDao = null; - @Inject protected CapacityDao _capacityDao = null; @Inject protected ConfigurationDao _configDao = null; @@ -256,9 +237,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS @Inject protected HostTagsDao _hostTagsDao = null; - @Inject(adapter = DeploymentPlanner.class) - private Adapters _planners; - protected Adapters _discoverers = null; protected int _port; @@ -267,12 +245,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS @Inject protected AlertManager _alertMgr = null; - @Inject - protected NetworkManager _networkMgr = null; - - @Inject - protected UpgradeManager _upgradeMgr = null; - @Inject protected StorageManager _storageMgr = null; @@ -291,8 +263,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS protected int _updateWait; protected int _alertWait; protected long _nodeId = -1; - protected float _overProvisioningFactor = 1; - protected float _cpuOverProvisioningFactor = 1; protected Random _rand = new Random(System.currentTimeMillis()); @@ -302,8 +272,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS protected ExecutorService _executor; - @Inject - protected VMTemplateDao _tmpltDao; @Inject protected VMTemplateHostDao _vmTemplateHostDao; @@ -358,28 +326,15 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS _discoverers = locator.getAdapters(Discoverer.class); - if (_nodeId == -1) { - // FIXME: We really should not do this like this. It should be done - // at config time and is stored as a config variable. - _nodeId = MacAddress.getMacAddress().toLong(); - } + _nodeId = ManagementServerNode.getManagementServerId(); _hostDao.markHostsAsDisconnected(_nodeId, Status.Up, Status.Connecting, Status.Updating, Status.Disconnected, Status.Down); - _monitor = new AgentMonitor(_nodeId, _hostDao, _volDao, _vmDao, _dcDao, _podDao, this, _alertMgr, _pingTimeout); + _monitor = new AgentMonitor(_nodeId, _hostDao, _vmDao, _dcDao, _podDao, this, _alertMgr, _pingTimeout); registerForHostEvents(_monitor, true, true, false); _executor = new ThreadPoolExecutor(10, 100, 60l, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("AgentTaskPool")); - String overProvisioningFactorStr = configs.get("storage.overprovisioning.factor"); - _overProvisioningFactor = NumbersUtil.parseFloat(overProvisioningFactorStr, 1); - - String cpuOverProvisioningFactorStr = configs.get("cpu.overprovisioning.factor"); - _cpuOverProvisioningFactor = NumbersUtil.parseFloat(cpuOverProvisioningFactorStr, 1); - if (_cpuOverProvisioningFactor < 1) { - _cpuOverProvisioningFactor = 1; - } - _connection = new NioServer("AgentManager", _port, workers + 10, this); s_logger.info("Listening on " + _port + " with " + workers + " workers"); @@ -502,32 +457,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS return result; } - @Override - public Host findHost(final Host.Type type, final DataCenterVO dc, final HostPodVO pod, final StoragePoolVO sp, final ServiceOfferingVO offering, final VMTemplateVO template, VMInstanceVO vm, - Host currentHost, final Set avoid) { - VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vm, template, offering, null, null); - DeployDestination dest = null; - DataCenterDeployment plan = new DataCenterDeployment(dc.getId(), pod.getId(), sp.getClusterId(), null, null); - ExcludeList avoids = new ExcludeList(); - for (Host h : avoid) { - avoids.addHost(h.getId()); - } - - for (DeploymentPlanner planner : _planners) { - try { - dest = planner.plan(vmProfile, plan, avoids); - if (dest != null) { - return dest.getHost(); - } - } catch (InsufficientServerCapacityException e) { - - } - } - - s_logger.warn("findHost() could not find a non-null host."); - return null; - } - @Override public List listByDataCenter(long dcId) { List pods = _podDao.listByDataCenterId(dcId); @@ -1431,7 +1360,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS @Override public Answer send(Long hostId, Command cmd, int timeout) throws AgentUnavailableException, OperationTimedoutException { - Commands cmds = new Commands(OnError.Revert); + Commands cmds = new Commands(OnError.Stop); cmds.addCommand(cmd); send(hostId, cmds, timeout); Answer[] answers = cmds.getAnswers(); @@ -1460,8 +1389,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS throw new AgentUnavailableException(-1); } - // assert noDbTxn() : - // "I know, I know. Why are we so strict as to not allow txn across an agent call? ... Why are we so cruel ... Why are we such a dictator .... Too bad... Sorry...but NO AGENT COMMANDS WRAPPED WITHIN DB TRANSACTIONS!"; + assert noDbTxn() : "I know, I know. Why are we so strict as to not allow txn across an agent call? ... Why are we so cruel ... Why are we such a dictator .... Too bad... Sorry...but NO AGENT COMMANDS WRAPPED WITHIN DB TRANSACTIONS!"; Command[] cmds = commands.toCommands(); @@ -1477,7 +1405,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS } long seq = _hostDao.getNextSequence(hostId); - Request req = new Request(seq, hostId, _nodeId, cmds, commands.stopOnError(), true, commands.revertOnError()); + Request req = new Request(seq, hostId, _nodeId, cmds, commands.stopOnError(), true, false); Answer[] answers = agent.send(req, timeout); notifyAnswersToMonitors(hostId, seq, answers); commands.setAnswers(answers); @@ -1538,7 +1466,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS return -1; } long seq = _hostDao.getNextSequence(hostId); - Request req = new Request(seq, hostId, _nodeId, cmds, commands.stopOnError(), true, commands.revertOnError()); + Request req = new Request(seq, hostId, _nodeId, cmds, commands.stopOnError(), true, false); agent.send(req, listener); return seq; } @@ -2519,7 +2447,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS } s_logger.info("Old " + server.getType().toString() + " host reconnected w/ id =" + id); } - createCapacityEntry(startup, server); return server; } @@ -2843,85 +2770,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS return _hostDao.findById(hostId); } - // create capacity entries if none exist for this server - private void createCapacityEntry(final StartupCommand startup, HostVO server) { - SearchCriteria capacitySC = _capacityDao.createSearchCriteria(); - capacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, server.getId()); - capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, server.getDataCenterId()); - capacitySC.addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); - List capacities = _capacityDao.search(capacitySC, null); - - // remove old entries, we'll recalculate them anyway - if (startup instanceof StartupStorageCommand) { - if ((capacities != null) && !capacities.isEmpty()) { - for (CapacityVO capacity : capacities) { - _capacityDao.remove(capacity.getId()); - } - } - } - - if (startup instanceof StartupStorageCommand) { - StartupStorageCommand ssCmd = (StartupStorageCommand) startup; - if (ssCmd.getResourceType() == Storage.StorageResourceType.STORAGE_HOST) { - CapacityVO capacity = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), server.getClusterId(), 0L, (long) (server.getTotalSize() * _overProvisioningFactor), - CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED); - _capacityDao.persist(capacity); - } - } else if (startup instanceof StartupRoutingCommand) { - SearchCriteria capacityCPU = _capacityDao.createSearchCriteria(); - capacityCPU.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, server.getId()); - capacityCPU.addAnd("dataCenterId", SearchCriteria.Op.EQ, server.getDataCenterId()); - capacityCPU.addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); - capacityCPU.addAnd("capacityType", SearchCriteria.Op.EQ, CapacityVO.CAPACITY_TYPE_CPU); - List capacityVOCpus = _capacityDao.search(capacityCPU, null); - - if (capacityVOCpus != null && !capacityVOCpus.isEmpty()) { - CapacityVO CapacityVOCpu = capacityVOCpus.get(0); - long newTotalCpu = (server.getCpus().longValue() * server.getSpeed().longValue()); - if ((CapacityVOCpu.getTotalCapacity() <= newTotalCpu) || ((CapacityVOCpu.getUsedCapacity() + CapacityVOCpu.getReservedCapacity()) <= newTotalCpu)) { - CapacityVOCpu.setTotalCapacity(newTotalCpu); - } else if ((CapacityVOCpu.getUsedCapacity() + CapacityVOCpu.getReservedCapacity() > newTotalCpu) && (CapacityVOCpu.getUsedCapacity() < newTotalCpu)) { - CapacityVOCpu.setReservedCapacity(0); - CapacityVOCpu.setTotalCapacity(newTotalCpu); - } else { - s_logger.debug("What? new cpu is :" + newTotalCpu + ", old one is " + CapacityVOCpu.getUsedCapacity() + "," + CapacityVOCpu.getReservedCapacity() + "," - + CapacityVOCpu.getTotalCapacity()); - } - _capacityDao.update(CapacityVOCpu.getId(), CapacityVOCpu); - } else { - CapacityVO capacity = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), server.getClusterId(), 0L, (server.getCpus().longValue() * server.getSpeed() - .longValue()), CapacityVO.CAPACITY_TYPE_CPU); - _capacityDao.persist(capacity); - } - - SearchCriteria capacityMem = _capacityDao.createSearchCriteria(); - capacityMem.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, server.getId()); - capacityMem.addAnd("dataCenterId", SearchCriteria.Op.EQ, server.getDataCenterId()); - capacityMem.addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); - capacityMem.addAnd("capacityType", SearchCriteria.Op.EQ, CapacityVO.CAPACITY_TYPE_MEMORY); - List capacityVOMems = _capacityDao.search(capacityMem, null); - - if (capacityVOMems != null && !capacityVOMems.isEmpty()) { - CapacityVO CapacityVOMem = capacityVOMems.get(0); - long newTotalMem = server.getTotalMemory(); - if (CapacityVOMem.getTotalCapacity() <= newTotalMem || (CapacityVOMem.getUsedCapacity() + CapacityVOMem.getReservedCapacity() <= newTotalMem)) { - CapacityVOMem.setTotalCapacity(newTotalMem); - } else if (CapacityVOMem.getUsedCapacity() + CapacityVOMem.getReservedCapacity() > newTotalMem && CapacityVOMem.getUsedCapacity() < newTotalMem) { - CapacityVOMem.setReservedCapacity(0); - CapacityVOMem.setTotalCapacity(newTotalMem); - } else { - s_logger.debug("What? new cpu is :" + newTotalMem + ", old one is " + CapacityVOMem.getUsedCapacity() + "," + CapacityVOMem.getReservedCapacity() + "," - + CapacityVOMem.getTotalCapacity()); - } - _capacityDao.update(CapacityVOMem.getId(), CapacityVOMem); - } else { - CapacityVO capacity = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), server.getClusterId(), 0L, server.getTotalMemory(), CapacityVO.CAPACITY_TYPE_MEMORY); - _capacityDao.persist(capacity); - } - } - - } - // protected void upgradeAgent(final Link link, final byte[] request, final // String reason) { // diff --git a/server/src/com/cloud/agent/manager/AgentMonitor.java b/server/src/com/cloud/agent/manager/AgentMonitor.java index 9fb09539303..392c6c8469a 100755 --- a/server/src/com/cloud/agent/manager/AgentMonitor.java +++ b/server/src/com/cloud/agent/manager/AgentMonitor.java @@ -38,7 +38,6 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.Status.Event; import com.cloud.host.dao.HostDao; -import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.db.GlobalLock; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.VMInstanceDao; @@ -50,13 +49,12 @@ public class AgentMonitor extends Thread implements Listener { private boolean _stop; private final AgentManagerImpl _agentMgr; private final VMInstanceDao _vmDao; - private final VolumeDao _volDao; private DataCenterDao _dcDao = null; private HostPodDao _podDao = null; private final AlertManager _alertMgr; private final long _msId; - public AgentMonitor(long msId, HostDao hostDao, VolumeDao volDao, VMInstanceDao vmDao, DataCenterDao dcDao, HostPodDao podDao, AgentManagerImpl agentMgr, AlertManager alertMgr, long pingTimeout) { + public AgentMonitor(long msId, HostDao hostDao, VMInstanceDao vmDao, DataCenterDao dcDao, HostPodDao podDao, AgentManagerImpl agentMgr, AlertManager alertMgr, long pingTimeout) { super("AgentMonitor"); _msId = msId; _pingTimeout = pingTimeout; @@ -64,7 +62,6 @@ public class AgentMonitor extends Thread implements Listener { _agentMgr = agentMgr; _stop = false; _vmDao = vmDao; - _volDao = volDao; _dcDao = dcDao; _podDao = podDao; _alertMgr = alertMgr; diff --git a/server/src/com/cloud/agent/manager/Commands.java b/server/src/com/cloud/agent/manager/Commands.java index 32ab36edbe9..b34751889fa 100644 --- a/server/src/com/cloud/agent/manager/Commands.java +++ b/server/src/com/cloud/agent/manager/Commands.java @@ -37,7 +37,7 @@ public class Commands implements Iterable { } public Commands(Command cmd) { - this(OnError.Revert); + this(OnError.Stop); addCommand(cmd); } @@ -109,11 +109,7 @@ public class Commands implements Iterable { } public boolean stopOnError() { - return _handler == OnError.Revert || _handler == OnError.Stop; - } - - public boolean revertOnError() { - return _handler == OnError.Revert; + return _handler == OnError.Stop; } public Answer[] getAnswers() { diff --git a/server/src/com/cloud/agent/manager/DirectAgentAttache.java b/server/src/com/cloud/agent/manager/DirectAgentAttache.java index 2c0e7a9c6c8..eebdb878589 100644 --- a/server/src/com/cloud/agent/manager/DirectAgentAttache.java +++ b/server/src/com/cloud/agent/manager/DirectAgentAttache.java @@ -19,9 +19,9 @@ package com.cloud.agent.manager; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; @@ -44,7 +44,7 @@ public class DirectAgentAttache extends AgentAttache { private final static Logger s_logger = Logger.getLogger(DirectAgentAttache.class); ServerResource _resource; - static ScheduledExecutorService _executor = Executors.newScheduledThreadPool(100, new NamedThreadFactory("DirectAgent")); + static ScheduledExecutorService _executor = new ScheduledThreadPoolExecutor(100, new NamedThreadFactory("DirectAgent")); List> _futures = new ArrayList>(); AgentManagerImpl _mgr; long _seq = 0; @@ -78,7 +78,7 @@ public class DirectAgentAttache extends AgentAttache { if (!(obj instanceof DirectAgentAttache)) { return false; } - return super.equals(obj) && _executor == ((DirectAgentAttache)obj)._executor; + return super.equals(obj); } @Override diff --git a/server/src/com/cloud/capacity/CapacityManagerImpl.java b/server/src/com/cloud/capacity/CapacityManagerImpl.java index 02d1af20629..994b4c7ea68 100644 --- a/server/src/com/cloud/capacity/CapacityManagerImpl.java +++ b/server/src/com/cloud/capacity/CapacityManagerImpl.java @@ -30,13 +30,20 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; +import com.cloud.agent.Listener; +import com.cloud.agent.api.AgentControlAnswer; +import com.cloud.agent.api.AgentControlCommand; +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.Command; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.exception.ConnectionException; import com.cloud.host.Host; import com.cloud.host.HostVO; +import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.offering.ServiceOffering; import com.cloud.service.ServiceOfferingVO; @@ -55,16 +62,22 @@ import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.VMInstanceDao; -@Local(value=CapacityManager.class) -public class CapacityManagerImpl implements CapacityManager , StateListener{ +@Local(value = CapacityManager.class) +public class CapacityManagerImpl implements CapacityManager, StateListener, Listener { private static final Logger s_logger = Logger.getLogger(CapacityManagerImpl.class); String _name; - @Inject CapacityDao _capacityDao; - @Inject ConfigurationDao _configDao; - @Inject ServiceOfferingDao _offeringsDao; - @Inject HostDao _hostDao; - @Inject VMInstanceDao _vmDao; - @Inject AgentManager _agentManager; + @Inject + CapacityDao _capacityDao; + @Inject + ConfigurationDao _configDao; + @Inject + ServiceOfferingDao _offeringsDao; + @Inject + HostDao _hostDao; + @Inject + VMInstanceDao _vmDao; + @Inject + AgentManager _agentManager; private int _hostCapacityCheckerDelay; private int _hostCapacityCheckerInterval; @@ -74,7 +87,6 @@ public class CapacityManagerImpl implements CapacityManager , StateListener params) throws ConfigurationException { _name = name; @@ -97,7 +109,7 @@ public class CapacityManagerImpl implements CapacityManager , StateListener= vmCPU) { capacityCpu.setUsedCapacity(usedCpu - vmCPU); } @@ -158,28 +170,28 @@ public class CapacityManagerImpl implements CapacityManager , StateListener= vmCPU) { - capacityCpu.setReservedCapacity(reservedCpu - vmCPU); + capacityCpu.setReservedCapacity(reservedCpu - vmCPU); } if (reservedMem >= vmMem) { capacityMemory.setReservedCapacity(reservedMem - vmMem); } } - s_logger.debug("release cpu from host: " + hostId + ", old used: " + usedCpu + ",reserved: " + reservedCpu + ", actual total: " + actualTotalCpu + ", total with overprovisioning: " + totalCpu + - "; new used: " + capacityCpu.getUsedCapacity() + ",reserved:" + capacityCpu.getReservedCapacity() + - "; movedfromreserved: " + moveFromReserved + ",moveToReservered" + moveToReservered); + s_logger.debug("release cpu from host: " + hostId + ", old used: " + usedCpu + ",reserved: " + reservedCpu + ", actual total: " + + actualTotalCpu + ", total with overprovisioning: " + totalCpu + "; new used: " + capacityCpu.getUsedCapacity() + ",reserved:" + + capacityCpu.getReservedCapacity() + "; movedfromreserved: " + moveFromReserved + ",moveToReservered" + moveToReservered); - s_logger.debug("release mem from host: " + hostId + ", old used: " + usedMem + ",reserved: " + reservedMem + ", total: " + totalMem + - "; new used: " + capacityMemory.getUsedCapacity() + ",reserved:" + capacityMemory.getReservedCapacity() + - "; movedfromreserved: " + moveFromReserved + ",moveToReservered" + moveToReservered); + s_logger.debug("release mem from host: " + hostId + ", old used: " + usedMem + ",reserved: " + reservedMem + ", total: " + totalMem + + "; new used: " + capacityMemory.getUsedCapacity() + ",reserved:" + capacityMemory.getReservedCapacity() + + "; movedfromreserved: " + moveFromReserved + ",moveToReservered" + moveToReservered); _capacityDao.update(capacityCpu.getId(), capacityCpu); _capacityDao.update(capacityMemory.getId(), capacityMemory); @@ -225,7 +237,7 @@ public class CapacityManagerImpl implements CapacityManager , StateListener= cpu && reservedMem >= ram) { capacityCpu.setReservedCapacity(reservedCpu - cpu); - capacityMem.setReservedCapacity(reservedMem - ram); + capacityMem.setReservedCapacity(reservedMem - ram); } } else { - /*alloc from free resource*/ + /* alloc from free resource */ if (!((reservedCpu + usedCpu + cpu <= totalCpu) && (reservedMem + usedMem + ram <= totalMem))) { if (s_logger.isDebugEnabled()) { s_logger.debug("Host doesnt seem to have enough free capacity, but increasing the used capacity anyways, since the VM is already starting on this host "); @@ -262,14 +274,14 @@ public class CapacityManagerImpl implements CapacityManager , StateListener= cpu){ - if(reservedMem >= ram) { + s_logger.debug("Reserved CPU: " + freeCpu + " , Requested CPU: " + cpu); + s_logger.debug("Reserved RAM: " + freeMem + " , Requested RAM: " + ram); + } + /* alloc from reserved */ + if (reservedCpu >= cpu) { + if (reservedMem >= ram) { hasCapacity = true; - }else{ + } else { failureReason = "Host does not have enough reserved RAM available"; } - }else{ + } else { failureReason = "Host does not have enough reserved CPU available"; - } + } } else { long freeCpu = totalCpu - (reservedCpu + usedCpu); long freeMem = totalMem - (reservedMem + usedMem); if (s_logger.isDebugEnabled()) { - s_logger.debug("Free CPU: "+freeCpu + " , Requested CPU: "+cpu); - s_logger.debug("Free RAM: "+freeMem + " , Requested RAM: "+ram); - } - /*alloc from free resource*/ + s_logger.debug("Free CPU: " + freeCpu + " , Requested CPU: " + cpu); + s_logger.debug("Free RAM: " + freeMem + " , Requested RAM: " + ram); + } + /* alloc from free resource */ if ((reservedCpu + usedCpu + cpu <= totalCpu)) { - if((reservedMem + usedMem + ram <= totalMem)){ + if ((reservedMem + usedMem + ram <= totalMem)) { hasCapacity = true; - }else{ + } else { failureReason = "Host does not have enough RAM available"; } - }else{ + } else { failureReason = "Host does not have enough CPU available"; } } @@ -364,21 +376,21 @@ public class CapacityManagerImpl implements CapacityManager , StateListener capacitySC = _capacityDao - .createSearchCriteria(); + // TODO: Get rid of this case once we've determined that the capacity listeners above have all the changes + // create capacity entries if none exist for this server + private void createCapacityEntry(StartupCommand startup, HostVO server) { + SearchCriteria capacitySC = _capacityDao.createSearchCriteria(); capacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, server.getId()); - capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, - server.getDataCenterId()); + capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, server.getDataCenterId()); capacitySC.addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); - if (startup instanceof StartupRoutingCommand) { - SearchCriteria capacityCPU = _capacityDao - .createSearchCriteria(); - capacityCPU.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, - server.getId()); - capacityCPU.addAnd("dataCenterId", SearchCriteria.Op.EQ, - server.getDataCenterId()); - capacityCPU - .addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); - capacityCPU.addAnd("capacityType", SearchCriteria.Op.EQ, - CapacityVO.CAPACITY_TYPE_CPU); - List capacityVOCpus = _capacityDao.search(capacitySC, - null); + SearchCriteria capacityCPU = _capacityDao.createSearchCriteria(); + capacityCPU.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, server.getId()); + capacityCPU.addAnd("dataCenterId", SearchCriteria.Op.EQ, server.getDataCenterId()); + capacityCPU.addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); + capacityCPU.addAnd("capacityType", SearchCriteria.Op.EQ, CapacityVO.CAPACITY_TYPE_CPU); + List capacityVOCpus = _capacityDao.search(capacitySC, null); if (capacityVOCpus != null && !capacityVOCpus.isEmpty()) { CapacityVO CapacityVOCpu = capacityVOCpus.get(0); - long newTotalCpu = (long) (server.getCpus().longValue() - * server.getSpeed().longValue() * _cpuOverProvisioningFactor); + long newTotalCpu = (long) (server.getCpus().longValue() * server.getSpeed().longValue() * _cpuOverProvisioningFactor); if ((CapacityVOCpu.getTotalCapacity() <= newTotalCpu) - || ((CapacityVOCpu.getUsedCapacity() + CapacityVOCpu - .getReservedCapacity()) <= newTotalCpu)) { + || ((CapacityVOCpu.getUsedCapacity() + CapacityVOCpu.getReservedCapacity()) <= newTotalCpu)) { CapacityVOCpu.setTotalCapacity(newTotalCpu); - } else if ((CapacityVOCpu.getUsedCapacity() - + CapacityVOCpu.getReservedCapacity() > newTotalCpu) + } else if ((CapacityVOCpu.getUsedCapacity() + CapacityVOCpu.getReservedCapacity() > newTotalCpu) && (CapacityVOCpu.getUsedCapacity() < newTotalCpu)) { CapacityVOCpu.setReservedCapacity(0); CapacityVOCpu.setTotalCapacity(newTotalCpu); } else { - s_logger.debug("What? new cpu is :" + newTotalCpu - + ", old one is " + CapacityVOCpu.getUsedCapacity() - + "," + CapacityVOCpu.getReservedCapacity() + "," - + CapacityVOCpu.getTotalCapacity()); + s_logger.debug("What? new cpu is :" + newTotalCpu + ", old one is " + CapacityVOCpu.getUsedCapacity() + "," + + CapacityVOCpu.getReservedCapacity() + "," + CapacityVOCpu.getTotalCapacity()); } _capacityDao.update(CapacityVOCpu.getId(), CapacityVOCpu); } else { - CapacityVO capacity = new CapacityVO( - server.getId(), - server.getDataCenterId(), - server.getPodId(), - server.getClusterId(), - 0L, - (long) (server.getCpus().longValue() - * server.getSpeed().longValue() * _cpuOverProvisioningFactor), + CapacityVO capacity = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), server.getClusterId(), 0L, + (long) (server.getCpus().longValue() * server.getSpeed().longValue() * _cpuOverProvisioningFactor), CapacityVO.CAPACITY_TYPE_CPU); _capacityDao.persist(capacity); } - SearchCriteria capacityMem = _capacityDao - .createSearchCriteria(); - capacityMem.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, - server.getId()); - capacityMem.addAnd("dataCenterId", SearchCriteria.Op.EQ, - server.getDataCenterId()); - capacityMem - .addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); - capacityMem.addAnd("capacityType", SearchCriteria.Op.EQ, - CapacityVO.CAPACITY_TYPE_MEMORY); - List capacityVOMems = _capacityDao.search(capacityMem, - null); + SearchCriteria capacityMem = _capacityDao.createSearchCriteria(); + capacityMem.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, server.getId()); + capacityMem.addAnd("dataCenterId", SearchCriteria.Op.EQ, server.getDataCenterId()); + capacityMem.addAnd("podId", SearchCriteria.Op.EQ, server.getPodId()); + capacityMem.addAnd("capacityType", SearchCriteria.Op.EQ, CapacityVO.CAPACITY_TYPE_MEMORY); + List capacityVOMems = _capacityDao.search(capacityMem, null); if (capacityVOMems != null && !capacityVOMems.isEmpty()) { CapacityVO CapacityVOMem = capacityVOMems.get(0); long newTotalMem = server.getTotalMemory(); if (CapacityVOMem.getTotalCapacity() <= newTotalMem - || (CapacityVOMem.getUsedCapacity() - + CapacityVOMem.getReservedCapacity() <= newTotalMem)) { + || (CapacityVOMem.getUsedCapacity() + CapacityVOMem.getReservedCapacity() <= newTotalMem)) { CapacityVOMem.setTotalCapacity(newTotalMem); - } else if (CapacityVOMem.getUsedCapacity() - + CapacityVOMem.getReservedCapacity() > newTotalMem + } else if (CapacityVOMem.getUsedCapacity() + CapacityVOMem.getReservedCapacity() > newTotalMem && CapacityVOMem.getUsedCapacity() < newTotalMem) { CapacityVOMem.setReservedCapacity(0); CapacityVOMem.setTotalCapacity(newTotalMem); } else { - s_logger.debug("What? new cpu is :" + newTotalMem - + ", old one is " + CapacityVOMem.getUsedCapacity() - + "," + CapacityVOMem.getReservedCapacity() + "," - + CapacityVOMem.getTotalCapacity()); + s_logger.debug("What? new cpu is :" + newTotalMem + ", old one is " + CapacityVOMem.getUsedCapacity() + "," + + CapacityVOMem.getReservedCapacity() + "," + CapacityVOMem.getTotalCapacity()); } _capacityDao.update(CapacityVOMem.getId(), CapacityVOMem); } else { - CapacityVO capacity = new CapacityVO(server.getId(), - server.getDataCenterId(), server.getPodId(), server.getClusterId(), 0L, - server.getTotalMemory(), - CapacityVO.CAPACITY_TYPE_MEMORY); + CapacityVO capacity = new CapacityVO(server.getId(), server.getDataCenterId(), server.getPodId(), server.getClusterId(), 0L, + server.getTotalMemory(), CapacityVO.CAPACITY_TYPE_MEMORY); _capacityDao.persist(capacity); } } } - + @Override + public boolean processAnswers(long agentId, long seq, Answer[] answers) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean processCommands(long agentId, long seq, Command[] commands) { + // TODO Auto-generated method stub + return false; + } + + @Override + public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void processConnect(HostVO host, StartupCommand cmd) throws ConnectionException { + // TODO Auto-generated method stub + + } + + @Override + public boolean processDisconnect(long agentId, Status state) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isRecurring() { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getTimeout() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean processTimeout(long agentId, long seq) { + // TODO Auto-generated method stub + return false; + } } diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 0972e3aec7f..a4d2f158e88 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -657,7 +657,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene VirtualMachineTO vmTO = hvGuru.implement(vmProfile); - Commands cmds = new Commands(OnError.Revert); + Commands cmds = new Commands(OnError.Stop); cmds.addCommand(new StartCommand(vmTO)); vmGuru.finalizeDeployment(cmds, vmProfile, dest, ctx); @@ -1291,7 +1291,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene try { - Commands cmds = new Commands(OnError.Revert); + Commands cmds = new Commands(OnError.Stop); cmds.addCommand(new RebootCommand(vm.getInstanceName())); _agentMgr.send(host.getId(), cmds); @@ -1487,7 +1487,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene profile.addNic(nicProfile); } - Commands cmds = new Commands(OnError.Revert); + Commands cmds = new Commands(OnError.Stop); s_logger.debug("Finalizing commands that need to be send to complete Start process for the vm " + vm); if (vmGuru.finalizeCommandsOnStart(cmds, profile)) {