From d4b56e89c3387813555f6ee6e302ee23ee0911a9 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Thu, 30 Dec 2010 06:51:08 -0800 Subject: [PATCH] changed expunge to do stop earlier. --- .../src/com/cloud/vm/UserVmManagerImpl.java | 73 +------------------ .../cloud/vm/VirtualMachineManagerImpl.java | 29 ++------ 2 files changed, 11 insertions(+), 91 deletions(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 1ed83e62a5c..94967815753 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -23,12 +23,8 @@ import java.util.Enumeration; import java.util.Formatter; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.TreeSet; import java.util.UUID; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -262,20 +258,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager ScheduledExecutorService _executor = null; int _expungeInterval; int _expungeDelay; - int _retry = 2; String _name; String _instance; String _zone; String _defaultNetworkDomain; - Random _rand = new Random(System.currentTimeMillis()); - private ConfigurationDao _configDao; - int _userVMCap = 0; - final int _maxWeight = 256; - @Override public UserVmVO getVirtualMachine(long vmId) { return _vmDao.findById(vmId); @@ -928,57 +918,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager return vmStatsById; } - @DB - protected String acquireGuestIpAddress(long dcId, long accountId, UserVmVO userVm) throws CloudRuntimeException { - boolean routerLock = false; - DomainRouterVO router = _routerDao.findBy(accountId, dcId); - long routerId = router.getId(); - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - router = _routerDao.acquireInLockTable(routerId); - if (router == null) { - throw new CloudRuntimeException("Unable to lock up the router:" + routerId); - } - routerLock = true; - List userVms = _vmDao.listByAccountAndDataCenter(accountId, dcId); - Set allPossibleIps = NetUtils.getAllIpsFromCidr(router.getGuestIpAddress(), NetUtils.getCidrSize(router.getGuestNetmask())); - Set usedIps = new TreeSet (); - for (UserVmVO vm: userVms) { - if (vm.getGuestIpAddress() != null) { - usedIps.add(NetUtils.ip2Long(vm.getGuestIpAddress())); - } - } - if (usedIps.size() != 0) { - allPossibleIps.removeAll(usedIps); - } - if (allPossibleIps.isEmpty()) { - return null; - } - Iterator iterator = allPossibleIps.iterator(); - long ipAddress = iterator.next().longValue(); - String ipAddressStr = NetUtils.long2Ip(ipAddress); - userVm.setGuestIpAddress(ipAddressStr); - userVm.setGuestNetmask(router.getGuestNetmask()); - String vmMacAddress = NetUtils.long2Mac( - (NetUtils.mac2Long(router.getGuestMacAddress()) & 0xffffffff0000L) | (ipAddress & 0xffff) - ); - userVm.setGuestMacAddress(vmMacAddress); - _vmDao.update(userVm.getId(), userVm); - txn.commit(); - if (routerLock) { - _routerDao.releaseFromLockTable(routerId); - routerLock = false; - } - return ipAddressStr; - }finally { - if (routerLock) { - _routerDao.releaseFromLockTable(routerId); - } - } - } - - @Override public void releaseGuestIpAddress(UserVmVO userVm) { ServiceOffering offering = _offeringDao.findById(userVm.getServiceOfferingId()); @@ -1118,9 +1057,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager _defaultNetworkDomain = "." + _defaultNetworkDomain; } - String value = configs.get("start.retry"); - _retry = NumbersUtil.parseInt(value, 2); - _instance = configs.get("instance.name"); if (_instance == null) { _instance = "DEFAULT"; @@ -1135,10 +1071,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager time = configs.get("expunge.delay"); _expungeDelay = NumbersUtil.parseInt(time, _expungeInterval); - String maxCap = configs.get("cpu.uservm.cap"); - _userVMCap = NumbersUtil.parseInt(maxCap, 0); - - _executor = Executors.newScheduledThreadPool(wrks, new NamedThreadFactory("UserVm-Scavenger")); _haMgr.registerHandler(Type.User, this); @@ -1776,8 +1708,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager privateTemplate.setFormat(ImageFormat.RAW); } - if(snapshot != null) - privateTemplate.setHypervisorType(snapshot.getHypervisorType()); + if(snapshot != null) { + privateTemplate.setHypervisorType(snapshot.getHypervisorType()); + } _templateDao.update(templateId, privateTemplate); diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 0928645d328..fa1f0817b69 100644 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -49,8 +49,6 @@ import com.cloud.deploy.DeploymentPlanner; import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.domain.dao.DomainDao; import com.cloud.event.EventTypes; -import com.cloud.event.EventUtils; -import com.cloud.event.EventVO; import com.cloud.event.UsageEventVO; import com.cloud.event.dao.UsageEventDao; import com.cloud.exception.AgentUnavailableException; @@ -253,6 +251,12 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Cluster } return true; } + + if (!this.advanceStop(vm, caller, account)) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Unable to stop the VM so we can't expunge it."); + } + } if (!stateTransitTo(vm, VirtualMachine.Event.ExpungeOperation, vm.getHostId())) { s_logger.debug("Unable to destroy the vm because it is not in the correct state: " + vm.toString()); @@ -262,16 +266,6 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Cluster if (s_logger.isDebugEnabled()) { s_logger.debug("Destroying vm " + vm); } - long userId = caller.getId(); - long startEventId = EventUtils.saveStartedEvent(userId, vm.getAccountId(), EventTypes.EVENT_VM_STOP, "stopping Vm with Id: "+vm.getId()); - - if (!stop(vm, caller, account)) { - s_logger.error("Unable to stop vm so we can't destroy it: " + vm); - EventUtils.saveEvent(userId, vm.getAccountId(), EventVO.LEVEL_ERROR, EventTypes.EVENT_VM_STOP, "Error stopping VM instance : " + vm.getId(), startEventId); - return false; - } else { - EventUtils.saveEvent(userId, vm.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_VM_STOP, "Successfully stopped VM instance : " + vm.getId(), startEventId); - } VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm); @@ -279,15 +273,8 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Cluster //Clean up volumes based on the vm's instance id _storageMgr.cleanupVolumes(vm.getId()); - VirtualMachineGuru guru = getVmGuru(vm); - vm = guru.findById(vm.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Destroying vm " + vm); - } - if (!stateTransitTo(vm, VirtualMachine.Event.DestroyRequested, vm.getHostId())) { - s_logger.debug("Unable to destroy the vm because it is not in the correct state: " + vm.toString()); - return false; + s_logger.debug("Expunged " + vm); } return true; @@ -499,7 +486,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Cluster } if (state == State.Creating || state == State.Destroyed || state == State.Expunging || state == State.Error) { - s_logger.warn("Stopped called on " + vm.toString() + " but the state is " + state.toString()); + s_logger.debug("Stopped called on " + vm + " but the state is " + state); return true; }