Updated Branches: refs/heads/vmsync d52e0c2eb -> aff0220d4
removed some unused files Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fbe76f0b Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fbe76f0b Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fbe76f0b Branch: refs/heads/vmsync Commit: fbe76f0b0f44e1bbf9f1e2e6586644c4de2fc128 Parents: d52e0c2 Author: Alex Huang <[email protected]> Authored: Wed Jun 12 16:36:46 2013 -0700 Committer: Alex Huang <[email protected]> Committed: Thu Jun 13 13:48:41 2013 -0700 ---------------------------------------------------------------------- .../engine/vm/VirtualMachineEntityImpl2.java | 283 ------------ .../engine/vm/VirtualMachineOrchestrator.java | 436 ------------------- .../com/cloud/vm/VirtualMachineManagerImpl.java | 52 +-- 3 files changed, 26 insertions(+), 745 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fbe76f0b/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineEntityImpl2.java ---------------------------------------------------------------------- diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineEntityImpl2.java b/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineEntityImpl2.java deleted file mode 100644 index 614b709..0000000 --- a/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineEntityImpl2.java +++ /dev/null @@ -1,283 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package org.apache.cloudstack.engine.vm; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.apache.cloudstack.engine.cloud.entity.VMEntityVO; -import org.apache.cloudstack.engine.cloud.entity.api.NetworkEntity; -import org.apache.cloudstack.engine.cloud.entity.api.NicEntity; -import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity; -import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity; -import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity; -import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; -import org.apache.cloudstack.engine.subsystem.api.storage.StorageOrchestrator; -import org.apache.cloudstack.network.NetworkOrchestrator; - -import com.cloud.dao.EntityManager; -import com.cloud.deploy.DeployDestination; -import com.cloud.deploy.DeploymentPlan; -import com.cloud.deploy.DeploymentPlanner.ExcludeList; -import com.cloud.exception.AgentUnavailableException; -import com.cloud.exception.CloudException; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.storage.VolumeVO; -import com.cloud.utils.db.GenericSearchBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.SearchCriteria.Op; -import com.cloud.vm.NicVO; -import com.cloud.vm.VirtualMachineProfile.Param; - -public class VirtualMachineEntityImpl2 implements VirtualMachineEntity { - - private static EntityManager s_entityMgr; - private static VirtualMachineOrchestrator s_vmOrchestrator; - private static NetworkOrchestrator s_networkOrchestrator; - private static StorageOrchestrator s_storageOrchestrator; - - private static GenericSearchBuilder<VolumeVO, String> VolumeUuidSB; - private static SearchBuilder<VolumeVO> VolumeSB; - private static GenericSearchBuilder<NicVO, String> NicUuidSB; - private static SearchBuilder<NicVO> NicSB; - - public static void init( - EntityManager entityMgr, - VirtualMachineOrchestrator vmOrchestrator, - NetworkOrchestrator networkOrchestrator, - StorageOrchestrator storageOrchestrator) { - s_entityMgr = entityMgr; - s_vmOrchestrator = vmOrchestrator; - s_networkOrchestrator = networkOrchestrator; - s_storageOrchestrator = storageOrchestrator; - - VolumeUuidSB = s_entityMgr.createGenericSearchBuilder(VolumeVO.class, String.class); - VolumeVO vol = VolumeUuidSB.entity(); - VolumeUuidSB.selectField(vol.getUuid()).and("vm", vol.getInstanceId(), Op.EQ).done(); - - VolumeSB = s_entityMgr.createSearchBuilder(VolumeVO.class); - vol = VolumeSB.entity(); - VolumeSB.and("vm", vol.getInstanceId(), Op.EQ).done(); - - NicUuidSB = s_entityMgr.createGenericSearchBuilder(NicVO.class, String.class); - NicVO nic = NicUuidSB.entity(); - NicUuidSB.selectField(nic.getUuid()).and("vm", nic.getInstanceId(), Op.EQ).done(); - - NicSB = s_entityMgr.createSearchBuilder(NicVO.class); - nic = NicSB.entity(); - NicSB.and("vm", nic.getInstanceId(), Op.EQ).done(); - } - - VMEntityVO _vm; - DeployDestination _dest; - - public VirtualMachineEntityImpl2(VMEntityVO vm) { - _vm = vm; - } - - @Override - public String getUuid() { - return _vm.getUuid(); - } - - @Override - public long getId() { - return _vm.getId(); - } - - @Override - public String getCurrentState() { - return _vm.getState().toString(); - } - - @Override - public String getDesiredState() { - return null; - } - - @Override - public Date getCreatedTime() { - return _vm.getCreated(); - } - - @Override - public Date getLastUpdatedTime() { - return _vm.getUpdateTime(); - } - - @Override - public String getOwner() { - return _vm.getOwner(); - } - - @Override - public Map<String, String> getDetails() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void addDetail(String name, String value) { - } - - @Override - public void delDetail(String name, String value) { - } - - @Override - public void updateDetail(String name, String value) { - } - - @Override - public List<Method> getApplicableActions() { - // TODO Auto-generated method stub - return null; - } - - @Override - public List<String> listVolumeIds() { - SearchCriteria<String> sc = VolumeUuidSB.create(); - sc.setParameters("vm", _vm.getId()); - - return s_entityMgr.search(VolumeVO.class, sc); - } - - @Override - public List<VolumeEntity> listVolumes() { - SearchCriteria<VolumeVO> sc = VolumeSB.create(); - sc.setParameters("vm", _vm.getId()); - - List<VolumeVO> vols = s_entityMgr.search(VolumeVO.class, sc); - List<VolumeEntity> entities = new ArrayList<VolumeEntity>(vols.size()); - for (VolumeVO vol : vols) { - entities.add(null); - } - - return entities; - } - - @Override - public List<String> listNicUuids() { - SearchCriteria<String> sc = NicUuidSB.create(); - sc.setParameters("vm", _vm.getId()); - - return s_entityMgr.search(NicVO.class, sc); - } - - @Override - public List<NicEntity> listNics() { - return null; - } - - @Override - public TemplateEntity getTemplate() { - return null; - } - - @Override - public List<String> listTags() { - return null; - } - - @Override - public void addTag() { - } - - @Override - public void delTag() { - // TODO Auto-generated method stub - - } - - @Override - public String reserve(String plannerToUse, DeploymentPlan plan, ExcludeList exclude, String caller) - throws InsufficientCapacityException, ResourceUnavailableException { - return null; - } - - @Override - public void migrateTo(String reservationId, String caller) { - // TODO Auto-generated method stub - - } - - @Override - public void deploy(String reservationId, String caller, Map<Param, Object> params) throws InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - @Override - public boolean stop(String caller) throws ResourceUnavailableException, CloudException { - // TODO Auto-generated method stub - return false; - } - - @Override - public void cleanup() { - // TODO Auto-generated method stub - - } - - @Override - public boolean destroy(String caller) throws AgentUnavailableException, CloudException, ConcurrentOperationException { - // TODO Auto-generated method stub - return false; - } - - @Override - public VirtualMachineEntity duplicate(String externalId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public SnapshotEntity takeSnapshotOf() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void attach(VolumeEntity volume, short deviceId) { - // TODO Auto-generated method stub - - } - - @Override - public void detach(VolumeEntity volume) { - // TODO Auto-generated method stub - - } - - @Override - public void connectTo(NetworkEntity network, short nicId) { - // TODO Auto-generated method stub - - } - - @Override - public void disconnectFrom(NetworkEntity netowrk, short nicId) { - // TODO Auto-generated method stub - - } -} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fbe76f0b/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineOrchestrator.java ---------------------------------------------------------------------- diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineOrchestrator.java deleted file mode 100644 index 1c5356e..0000000 --- a/engine/orchestration/src/org/apache/cloudstack/engine/vm/VirtualMachineOrchestrator.java +++ /dev/null @@ -1,436 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package org.apache.cloudstack.engine.vm; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.config.ConfigRepo; -import org.apache.cloudstack.config.ConfigValue; -import org.apache.cloudstack.engine.cloud.entity.VMEntityVO; -import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity; -import org.apache.cloudstack.engine.config.Configs; -import org.apache.cloudstack.engine.subsystem.api.storage.StorageOrchestrator; -import org.apache.cloudstack.network.NetworkOrchestrator; -import org.apache.cloudstack.vm.jobs.VmWorkJobDao; - -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.cluster.ManagementServerNode; -import com.cloud.dao.EntityManager; -import com.cloud.deploy.DeploymentPlan; -import com.cloud.domain.dao.DomainDao; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.ConnectionException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.host.HostVO; -import com.cloud.host.Status; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.NetworkManager; -import com.cloud.network.dao.NetworkVO; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.service.dao.ServiceOfferingDao; -import com.cloud.storage.DiskOfferingVO; -import com.cloud.storage.Storage.ImageFormat; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.Volume.Type; -import com.cloud.storage.VolumeManager; -import com.cloud.storage.dao.VMTemplateDao; -import com.cloud.user.AccountVO; -import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserDao; -import com.cloud.utils.DateUtil; -import com.cloud.utils.Pair; -import com.cloud.utils.component.ManagerBase; -import com.cloud.utils.concurrency.NamedThreadFactory; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.vm.NicProfile; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachineManager; -import com.cloud.vm.VirtualMachineProfileImpl; - -/** - * VirtualMachineOrchestrator orchestrates virtual machine operations. - * - */ -public class VirtualMachineOrchestrator extends ManagerBase { - private final static Logger s_logger = Logger.getLogger(VirtualMachineOrchestrator.class); - @Inject - EntityManager _entityMgr; - @Inject - ConfigRepo _configRepo; - @Inject - NetworkOrchestrator _networkOrchestrator; - @Inject - StorageOrchestrator _storageOrchestrator; - @Inject - AgentManager _agentMgr; - @Inject - VmWorkJobDao _workJobDao; - @Inject - VolumeManager _volMgr; - - protected ConfigValue<Integer> _retry; - protected ConfigValue<Integer> _cancelWait; - protected ConfigValue<Long> _cleanupWait; - protected ConfigValue<Long> _cleanupInterval; - protected ConfigValue<Long> _opWaitInterval; - protected ConfigValue<Integer> _lockStateRetry; - protected ConfigValue<Integer> _operationTimeout; - protected ConfigValue<Boolean> _forceStop; - - // FIXME: Hopefully these can be temporary for now - @Inject - UserDao _userDao; - @Inject - DomainDao _domainDao; - @Inject - AccountDao _accountDao; - @Inject - ServiceOfferingDao _offeringDao; - @Inject - VMTemplateDao _templateDao; - @Inject - VirtualMachineManager _itMgr; - @Inject - NetworkManager _networkMgr; - // FIXME: Hopefully we can remove the above stuff. - - long _nodeId; - - ScheduledExecutorService _executor = null; - - public VirtualMachineEntity create( - String id, - String owner, - String templateId, - String hostName, - String displayName, - Hypervisor.HypervisorType hypervisor, - int cpu, - int speed, - long memory, - Long diskSize, - List<String> computeTags, - List<String> rootDiskTags, - Map<String, NicProfile> networkNicMap, - DeploymentPlan plan) throws InsufficientCapacityException { - - List<Pair<NetworkVO, NicProfile>> networkIpMap = new ArrayList<Pair<NetworkVO, NicProfile>>(); - for (String uuid : networkNicMap.keySet()) { - NetworkVO network = _entityMgr.findByUuid(NetworkVO.class, uuid); - if (network != null) { - networkIpMap.add(new Pair<NetworkVO, NicProfile>(network, networkNicMap.get(uuid))); - } - } - - //load vm instance and offerings and call virtualMachineManagerImpl - VMEntityVO vm = _entityMgr.findByUuid(VMEntityVO.class, id); - - // If the template represents an ISO, a disk offering must be passed in, and will be used to create the root disk - // Else, a disk offering is optional, and if present will be used to create the data disk - - Pair<DiskOfferingVO, Long> rootDiskOffering = new Pair<DiskOfferingVO, Long>(null, null); - List<Pair<DiskOfferingVO, Long>> dataDiskOfferings = new ArrayList<Pair<DiskOfferingVO, Long>>(); - - ServiceOfferingVO offering = _entityMgr.findById(ServiceOfferingVO.class, vm.getServiceOfferingId()); - rootDiskOffering.first(offering); - - if (vm.getDiskOfferingId() != null) { - DiskOfferingVO diskOffering = _entityMgr.findById(DiskOfferingVO.class, vm.getDiskOfferingId()); - if (diskOffering == null) { - throw new InvalidParameterValueException("Unable to find disk offering " + vm.getDiskOfferingId()); - } - Long size = null; - if (diskOffering.getDiskSize() == 0) { - size = diskSize; - if (size == null) { - throw new InvalidParameterValueException( - "Disk offering " + diskOffering - + " requires size parameter."); - } - } - dataDiskOfferings.add(new Pair<DiskOfferingVO, Long>(diskOffering, size)); - } - - VMTemplateVO template = _entityMgr.findByUuid(VMTemplateVO.class, templateId); - - vm = createDbEntities(vm, plan, template, offering, rootDiskOffering, dataDiskOfferings, networkIpMap, hypervisor, owner); - if (vm == null) { - return null; - } - - return new VirtualMachineEntityImpl2(vm); - } - - public VirtualMachineEntity createFromScratch( - String id, - String owner, - String isoId, - String hostName, - String displayName, - Hypervisor.HypervisorType hypervisorType, - String os, - int cpu, - int speed, - long memory, - Long diskSize, - List<String> computeTags, - List<String> rootDiskTags, - Map<String, NicProfile> networkNicMap, - DeploymentPlan plan) throws InsufficientCapacityException { - - VMEntityVO vm = _entityMgr.findByUuid(VMEntityVO.class, id); - - Pair<DiskOfferingVO, Long> rootDiskOffering = new Pair<DiskOfferingVO, Long>(null, null); - ServiceOfferingVO offering = _entityMgr.findById(ServiceOfferingVO.class, vm.getServiceOfferingId()); - rootDiskOffering.first(offering); - - List<Pair<DiskOfferingVO, Long>> dataDiskOfferings = new ArrayList<Pair<DiskOfferingVO, Long>>(); - Long diskOfferingId = vm.getDiskOfferingId(); - DiskOfferingVO diskOffering = _entityMgr.findById(DiskOfferingVO.class, diskOfferingId); - if (diskOffering == null) { - throw new InvalidParameterValueException("Unable to find disk offering " + diskOfferingId); - } - Long size = null; - if (diskOffering.getDiskSize() == 0) { - size = diskSize; - if (size == null) { - throw new InvalidParameterValueException("Disk offering " + diskOffering + " requires size parameter."); - } - } - rootDiskOffering.first(diskOffering); - rootDiskOffering.second(size); - - List<Pair<NetworkVO, NicProfile>> networkIpMap = new ArrayList<Pair<NetworkVO, NicProfile>>(); - for (String uuid : networkNicMap.keySet()) { - NetworkVO network = _entityMgr.findByUuid(NetworkVO.class, uuid); - if (network != null) { - networkIpMap.add(new Pair<NetworkVO, NicProfile>(network, networkNicMap.get(uuid))); - } - } - - VMTemplateVO template = _entityMgr.findByUuid(VMTemplateVO.class, isoId); - - vm = createDbEntities(vm, plan, template, offering, rootDiskOffering, dataDiskOfferings, networkIpMap, hypervisorType, owner); - if (vm == null) { - return null; - } - - return new VirtualMachineEntityImpl2(vm); - } - - @DB - protected VMEntityVO createDbEntities(VMEntityVO vm1, DeploymentPlan plan, VMTemplateVO template, ServiceOfferingVO serviceOffering, - Pair<? extends DiskOfferingVO, Long> rootDiskOffering, - List<Pair<DiskOfferingVO, Long>> dataDiskOfferings, List<Pair<NetworkVO, NicProfile>> networks, - Hypervisor.HypervisorType hyperType, String ownerRef) throws InsufficientCapacityException { - assert (plan.getClusterId() == null && plan.getPoolId() == null) : "We currently don't support cluster and pool preset yet"; - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Allocating entries for VM: " + vm1); - } - - AccountVO owner = _entityMgr.findById(AccountVO.class, new Long(ownerRef)); - - VMInstanceVO vm = _entityMgr.findById(VMInstanceVO.class, vm1.getId()); - VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vm); - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - try { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Allocating nics for " + vm); - } - - _networkMgr.allocate(vmProfile, networks); - } catch (ConcurrentOperationException e) { - throw new CloudRuntimeException("Concurrent operation while trying to allocate resources for the VM", e); - } - - if (dataDiskOfferings == null) { - dataDiskOfferings = new ArrayList<Pair<DiskOfferingVO, Long>>(0); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Allocaing disks for " + vm); - } - - if (template.getFormat() == ImageFormat.ISO) { - _volMgr.allocateRawVolume(Type.ROOT, "ROOT-" + vm.getId(), rootDiskOffering.first(), rootDiskOffering.second(), vm, owner); - } else if (template.getFormat() == ImageFormat.BAREMETAL) { - // Do nothing - } else { - _volMgr.allocateTemplatedVolume(Type.ROOT, "ROOT-" + vm.getId(), rootDiskOffering.first(), template, vm, owner); - } - - for (Pair<DiskOfferingVO, Long> offering : dataDiskOfferings) { - _volMgr.allocateRawVolume(Type.DATADISK, "DATA-" + vm.getId(), offering.first(), offering.second(), vm, owner); - } - - vm1.setDataCenterId(plan.getDataCenterId()); - if (plan.getPodId() != null) { - vm1.setPodId(plan.getPodId()); - } - - vm1 = _entityMgr.persist(vm1); - txn.commit(); - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Allocation completed for VM: " + vm); - } - - return vm1; - } - - public VirtualMachineEntity get(String uuid) { - VMEntityVO vo = _entityMgr.findByUuid(VMEntityVO.class, uuid); - return new VirtualMachineEntityImpl2(vo); - } - - public VirtualMachineEntity get(long id) { - VMEntityVO vo = _entityMgr.findById(VMEntityVO.class, id); - return new VirtualMachineEntityImpl2(vo); - } - - @Override - public boolean configure(String name, Map<String, Object> params) throws ConfigurationException { - super.configure(name, params); - - _retry = _configRepo.get(Configs.StartRetry); - - _cancelWait = _configRepo.get(Configs.VmOpCancelInterval); - _cleanupWait = _configRepo.get(Configs.VmOpCleanupWait); - _cleanupInterval = _configRepo.get(Configs.VmOpCleanupInterval).setMultiplier(1000); - _opWaitInterval = _configRepo.get(Configs.VmOpWaitInterval).setMultiplier(1000); - _lockStateRetry = _configRepo.get(Configs.VmOpLockStateRetry); - _operationTimeout = _configRepo.get(Configs.Wait).setMultiplier(2); - _forceStop = _configRepo.get(Configs.VmDestroyForcestop); - - _nodeId = ManagementServerNode.getManagementServerId(); - - _agentMgr.registerForHostEvents(new AgentListener(), true, true, true); - - _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Vm-Operations-Cleanup")); - -// ReservationContextImpl.setComponents(_userDao, _domainDao, _accountDao); - VirtualMachineProfileImpl.setComponents(_entityMgr); - VirtualMachineEntityImpl2.init(_entityMgr, this, _networkOrchestrator, _storageOrchestrator); - - return true; - } - - @Override - public boolean start() { - _executor.scheduleAtFixedRate(new CleanupTask(), _cleanupInterval.value(), _cleanupInterval.value(), TimeUnit.SECONDS); - return super.start(); - } - - @Override - public boolean stop() { - _executor.shutdownNow(); - try { - _executor.awaitTermination(30, TimeUnit.SECONDS); - } catch (InterruptedException e) { - s_logger.warn("Interrupted while waiting for executor shutdown"); - } - if (!_executor.isShutdown()) { - s_logger.warn("Not all background tasks are shutdown."); - } - if (!_executor.isTerminated()) { - s_logger.warn("Not all background tasks are terminated."); - } - return super.stop(); - } - - protected class CleanupTask implements Runnable { - - @Override - public void run() { - s_logger.info("VM Operation Thread Running"); - - try { - Date cutDate = DateUtil.currentGMTTime(); - cutDate = new Date(cutDate.getTime() - 60000); - _workJobDao.expungeCompletedWorkJobs(cutDate); - } catch (Throwable e) { - s_logger.error("Unexpected exception", e); - } - } - } - - private class AgentListener implements Listener { - - @Override - public boolean processAnswers(long agentId, long seq, Answer[] answers) { - return false; - } - - @Override - public boolean processCommands(long agentId, long seq, Command[] commands) { - return false; - } - - @Override - public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) { - return null; - } - - @Override - public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException { - } - - @Override - public boolean processDisconnect(long agentId, Status state) { - return false; - } - - @Override - public boolean isRecurring() { - return false; - } - - @Override - public int getTimeout() { - return 0; - } - - @Override - public boolean processTimeout(long agentId, long seq) { - return false; - } - } -} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fbe76f0b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index e50027d..2a8d5c3 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -35,7 +35,10 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; +import org.apache.cloudstack.config.ConfigRepo; +import org.apache.cloudstack.config.ConfigValue; import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.engine.config.Configs; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; import org.apache.cloudstack.framework.jobs.AsyncJobConstants; @@ -79,8 +82,6 @@ import com.cloud.agent.manager.allocator.HostAllocator; import com.cloud.alert.AlertManager; import com.cloud.api.ApiSerializerHelper; import com.cloud.async.AsyncJobExecutionContext; -import com.cloud.cluster.ManagementServerNode; -import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dao.EntityManager; @@ -145,7 +146,6 @@ import com.cloud.user.AccountManager; import com.cloud.user.User; import com.cloud.utils.DateUtil; import com.cloud.utils.Journal; -import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Predicate; import com.cloud.utils.Ternary; @@ -174,7 +174,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac @Inject protected EntityManager _entityMgr; - + @Inject + ConfigRepo _configRepo; @Inject protected StorageManager _storageMgr; @Inject @@ -260,16 +261,16 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac protected StateMachine2<State, VirtualMachine.Event, VirtualMachine> _stateMachine; ScheduledExecutorService _executor = null; - protected int _operationTimeout; - protected int _retry; + protected ConfigValue<Integer> _retry; + protected ConfigValue<Integer> _cancelWait; + protected ConfigValue<Long> _cleanupWait; + protected ConfigValue<Long> _cleanupInterval; + protected ConfigValue<Long> _opWaitInterval; + protected ConfigValue<Integer> _lockStateRetry; + protected ConfigValue<Integer> _operationTimeout; + protected ConfigValue<Boolean> _forceStop; protected long _nodeId; - protected long _cleanupWait; - protected long _cleanupInterval; - protected long _cancelWait; - protected long _opWaitInterval; - protected int _lockStateRetry; - protected boolean _forceStop; SearchBuilder<VolumeVO> RootVolumeSearch; @@ -437,7 +438,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac @Override public boolean start() { - _executor.scheduleAtFixedRate(new CleanupTask(), _cleanupInterval, _cleanupInterval, TimeUnit.SECONDS); + _executor.scheduleAtFixedRate(new CleanupTask(), _cleanupInterval.value(), _cleanupInterval.value(), TimeUnit.SECONDS); cancelWorkItems(_nodeId); return true; @@ -452,21 +453,20 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac public boolean configure(String name, Map<String, Object> xmlParams) throws ConfigurationException { Map<String, String> params = _configDao.getConfiguration(xmlParams); - _retry = NumbersUtil.parseInt(params.get(Config.StartRetry.key()), 10); + _retry = _configRepo.get(Configs.StartRetry); + + _cancelWait = _configRepo.get(Configs.VmOpCancelInterval); + _cleanupWait = _configRepo.get(Configs.VmOpCleanupWait); + _cleanupInterval = _configRepo.get(Configs.VmOpCleanupInterval).setMultiplier(1000); + _opWaitInterval = _configRepo.get(Configs.VmOpWaitInterval).setMultiplier(1000); + _lockStateRetry = _configRepo.get(Configs.VmOpLockStateRetry); + _operationTimeout = _configRepo.get(Configs.Wait).setMultiplier(2); + _forceStop = _configRepo.get(Configs.VmDestroyForcestop); ReservationContextImpl.setComponents(_entityMgr); VirtualMachineProfileImpl.setComponents(_entityMgr); - _cancelWait = NumbersUtil.parseLong(params.get(Config.VmOpCancelInterval.key()), 3600); - _cleanupWait = NumbersUtil.parseLong(params.get(Config.VmOpCleanupWait.key()), 3600); - _cleanupInterval = NumbersUtil.parseLong(params.get(Config.VmOpCleanupInterval.key()), 86400) * 1000; - _opWaitInterval = NumbersUtil.parseLong(params.get(Config.VmOpWaitInterval.key()), 120) * 1000; - _lockStateRetry = NumbersUtil.parseInt(params.get(Config.VmOpLockStateRetry.key()), 5); - _operationTimeout = NumbersUtil.parseInt(params.get(Config.Wait.key()), 1800) * 2; - _forceStop = Boolean.parseBoolean(params.get(Config.VmDestroyForcestop.key())); - _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Vm-Operations-Cleanup")); - _nodeId = ManagementServerNode.getManagementServerId(); _agentMgr.registerForHostEvents(this, true, true, true); @@ -862,7 +862,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac boolean reuseVolume = true; DeploymentPlan plan = planRequested; - int retry = _retry; + int retry = _retry.value(); while (retry-- != 0) { // It's != so that it can match -1. VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vm, template, offering, account, params); @@ -1370,7 +1370,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac return true; } - advanceStop(vmUuid, _forceStop); + advanceStop(vmUuid, _forceStop.value()); vm = _vmDao.findById(vm.getId()); @@ -2759,7 +2759,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } try { lock.addRef(); - List<VMInstanceVO> instances = _vmDao.findVMInTransition(new Date(new Date().getTime() - (_operationTimeout * 1000)), State.Starting, State.Stopping); + List<VMInstanceVO> instances = _vmDao.findVMInTransition(new Date(new Date().getTime() - (_operationTimeout.value() * 1000)), State.Starting, State.Stopping); for (VMInstanceVO instance : instances) { State state = instance.getState(); if (state == State.Stopping) {
