diff --git a/agent/src/com/cloud/agent/resource/DummyResource.java b/agent/src/com/cloud/agent/resource/DummyResource.java index 73f8ef1a1e9..ea23f96d741 100755 --- a/agent/src/com/cloud/agent/resource/DummyResource.java +++ b/agent/src/com/cloud/agent/resource/DummyResource.java @@ -32,7 +32,6 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.agent.api.StartupRoutingCommand.VmState; import com.cloud.agent.api.StartupStorageCommand; import com.cloud.agent.api.StoragePoolInfo; import com.cloud.host.Host; @@ -147,13 +146,11 @@ public class DummyResource implements ServerResource { @Override public StartupCommand[] initialize() { - Map changes = null; - final List info = getHostInfo(); final StartupRoutingCommand cmd = new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), HypervisorType.KVM, - RouterPrivateIpStrategy.HostLocal, changes, null); + RouterPrivateIpStrategy.HostLocal); fillNetworkInformation(cmd); cmd.getHostDetails().putAll(getVersionStrings()); cmd.setCluster(getConfiguredProperty("cluster", "1")); diff --git a/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java b/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java index 539d18a4efc..a6b8bd91040 100644 --- a/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java +++ b/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java @@ -19,23 +19,23 @@ package com.cloud.agent.api; -import com.cloud.vm.VirtualMachine.State; +import com.cloud.vm.VirtualMachine.PowerState; public class CheckVirtualMachineAnswer extends Answer { Integer vncPort; - State state; + PowerState state; protected CheckVirtualMachineAnswer() { } - public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, State state, Integer vncPort, String detail) { + public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, PowerState state, Integer vncPort, String detail) { super(cmd, true, detail); this.state = state; this.vncPort = vncPort; } - public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, State state, Integer vncPort) { + public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, PowerState state, Integer vncPort) { this(cmd, state, vncPort, null); } @@ -47,7 +47,7 @@ public class CheckVirtualMachineAnswer extends Answer { return vncPort; } - public State getState() { + public PowerState getState() { return state; } } diff --git a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java b/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java index c1d2561a075..ab4edafa484 100644 --- a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java +++ b/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java @@ -23,23 +23,10 @@ import java.util.List; import org.apache.cloudstack.storage.to.VolumeObjectTO; -import com.cloud.vm.VirtualMachine; public class CreateVMSnapshotCommand extends VMSnapshotBaseCommand { - public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType, VirtualMachine.State vmState) { + public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { super(vmName, snapshot, volumeTOs, guestOSType); - this.vmState = vmState; } - - private VirtualMachine.State vmState; - - public VirtualMachine.State getVmState() { - return vmState; - } - - public void setVmState(VirtualMachine.State vmState) { - this.vmState = vmState; - } - } diff --git a/core/src/com/cloud/agent/api/PingRoutingCommand.java b/core/src/com/cloud/agent/api/PingRoutingCommand.java index 3e68ab40125..d7733ee9197 100755 --- a/core/src/com/cloud/agent/api/PingRoutingCommand.java +++ b/core/src/com/cloud/agent/api/PingRoutingCommand.java @@ -22,14 +22,9 @@ package com.cloud.agent.api; import java.util.Map; import com.cloud.host.Host; -import com.cloud.vm.VirtualMachine.State; public class PingRoutingCommand extends PingCommand { - // TODO vmsync { - Map newStates; - // TODO vmsync } - Map _hostVmStateReport; boolean _gatewayAccessible = true; @@ -38,16 +33,11 @@ public class PingRoutingCommand extends PingCommand { protected PingRoutingCommand() { } - public PingRoutingCommand(Host.Type type, long id, Map states, Map hostVmStateReport) { + public PingRoutingCommand(Host.Type type, long id, Map hostVmStateReport) { super(type, id); - this.newStates = states; this._hostVmStateReport = hostVmStateReport; } - public Map getNewStates() { - return newStates; - } - public Map getHostVmStateReport() { return this._hostVmStateReport; } diff --git a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java b/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java index 6526748f940..c92407cf8b3 100644 --- a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java +++ b/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java @@ -24,7 +24,6 @@ import java.util.Map; import com.cloud.host.Host; import com.cloud.utils.Pair; -import com.cloud.vm.VirtualMachine.State; public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand { HashMap> newGroupStates; @@ -33,9 +32,9 @@ public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand { super(); } - public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map states, Map hostVmStateReport, + public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map hostVmStateReport, HashMap> nwGrpStates) { - super(type, id, states, hostVmStateReport); + super(type, id, hostVmStateReport); newGroupStates = nwGrpStates; } diff --git a/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java b/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java index b415ac7f9bb..aecbc635092 100644 --- a/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java +++ b/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java @@ -24,7 +24,6 @@ import java.util.Map; import com.cloud.host.Host; import com.cloud.utils.Pair; -import com.cloud.vm.VirtualMachine.State; public class PingRoutingWithOvsCommand extends PingRoutingCommand { List> states; @@ -33,9 +32,9 @@ public class PingRoutingWithOvsCommand extends PingRoutingCommand { super(); } - public PingRoutingWithOvsCommand(Host.Type type, long id, Map states, Map hostVmStateReport, + public PingRoutingWithOvsCommand(Host.Type type, long id, Map hostVmStateReport, List> ovsStates) { - super(type, id, states, hostVmStateReport); + super(type, id, hostVmStateReport); this.states = ovsStates; } diff --git a/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java b/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java index b67d9dd3cc3..572dff401f7 100644 --- a/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java +++ b/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java @@ -28,7 +28,7 @@ import com.cloud.vm.VirtualMachine; public class RevertToVMSnapshotAnswer extends Answer { private List volumeTOs; - private VirtualMachine.State vmState; + private VirtualMachine.PowerState vmState; public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, boolean result, String message) { super(cmd, result, message); @@ -38,13 +38,13 @@ public class RevertToVMSnapshotAnswer extends Answer { super(); } - public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, List volumeTOs, VirtualMachine.State vmState) { + public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, List volumeTOs, VirtualMachine.PowerState vmState) { super(cmd, true, ""); this.volumeTOs = volumeTOs; this.vmState = vmState; } - public VirtualMachine.State getVmState() { + public VirtualMachine.PowerState getVmState() { return vmState; } @@ -56,7 +56,7 @@ public class RevertToVMSnapshotAnswer extends Answer { this.volumeTOs = volumeTOs; } - public void setVmState(VirtualMachine.State vmState) { + public void setVmState(VirtualMachine.PowerState vmState) { this.vmState = vmState; } diff --git a/core/src/com/cloud/agent/api/StartupRoutingCommand.java b/core/src/com/cloud/agent/api/StartupRoutingCommand.java index 8601e92e196..834d0768297 100755 --- a/core/src/com/cloud/agent/api/StartupRoutingCommand.java +++ b/core/src/com/cloud/agent/api/StartupRoutingCommand.java @@ -25,31 +25,8 @@ import java.util.Map; import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Networks.RouterPrivateIpStrategy; -import com.cloud.utils.Pair; -import com.cloud.vm.VirtualMachine.State; public class StartupRoutingCommand extends StartupCommand { - public static class VmState { - State state; - String host; - - public VmState() { - } - - public VmState(State state, String host) { - this.state = state; - this.host = host; - } - - public State getState() { - return state; - } - - public String getHost() { - return host; - } - } - Integer cpuSockets; int cpus; long speed; @@ -57,16 +34,6 @@ public class StartupRoutingCommand extends StartupCommand { long dom0MinMemory; boolean poolSync; - // VM power state report is added in a side-by-side way as old VM state report - // this is to allow a graceful migration from the old VM state sync model to the new model - // - // side-by-side addition of power state sync - Map _hostVmStateReport; - - // TODO vmsync - // deprecated, will delete after full replacement - Map vms; - HashMap> _clusterVMStates; String caps; String pool; @@ -82,68 +49,30 @@ public class StartupRoutingCommand extends StartupCommand { } - public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, String caps, HypervisorType hypervisorType, - RouterPrivateIpStrategy privIpStrategy, Map vms, Map hostVmStateReport) { - this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType, vms, hostVmStateReport); - getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStrategy.toString()); - } - - public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, String caps, HypervisorType hypervisorType, RouterPrivateIpStrategy privIpStrategy) { - this(cpus, - speed, - memory, - dom0MinMemory, - caps, - hypervisorType, - new HashMap(), - new HashMap(), - new HashMap()); - - getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStrategy.toString()); - } - public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, final String caps, final HypervisorType hypervisorType, - final Map hostDetails, Map vms, Map hostVmStateReport) { + final Map hostDetails) { super(Host.Type.Routing); this.cpus = cpus; this.speed = speed; this.memory = memory; this.dom0MinMemory = dom0MinMemory; - this.vms = vms; - this._hostVmStateReport = hostVmStateReport; this.hypervisorType = hypervisorType; this.hostDetails = hostDetails; this.caps = caps; this.poolSync = false; } - public StartupRoutingCommand(int cpus2, long speed2, long memory2, long dom0MinMemory2, String caps2, HypervisorType hypervisorType2, Map vms2, - Map hostVmStateReport) { - this(cpus2, speed2, memory2, dom0MinMemory2, caps2, hypervisorType2, new HashMap(), vms2, hostVmStateReport); + public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, String caps, HypervisorType hypervisorType, + RouterPrivateIpStrategy privIpStrategy) { + this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType); + getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStrategy.toString()); } - public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, final String caps, final HypervisorType hypervisorType, - final Map hostDetails, Map vms, Map vmPowerStates, String hypervisorVersion) { - this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType, hostDetails, vms, vmPowerStates); - this.hypervisorVersion = hypervisorVersion; + + public StartupRoutingCommand(int cpus2, long speed2, long memory2, long dom0MinMemory2, String caps2, HypervisorType hypervisorType2) { + this(cpus2, speed2, memory2, dom0MinMemory2, caps2, hypervisorType2, new HashMap()); } - public void setChanges(Map vms) { - this.vms = vms; - } - - public void setStateChanges(Map vms) { - for (String vm_name : vms.keySet()) { - if (this.vms == null) { - this.vms = new HashMap(); - } - this.vms.put(vm_name, new VmState(vms.get(vm_name), null)); - } - } - - public void setClusterVMStateChanges(HashMap> allStates) { - _clusterVMStates = allStates; - } public Integer getCpuSockets() { return cpuSockets; @@ -169,14 +98,6 @@ public class StartupRoutingCommand extends StartupCommand { return dom0MinMemory; } - public Map getVmStates() { - return vms; - } - - public HashMap> getClusterVMStateChanges() { - return _clusterVMStates; - } - public void setSpeed(long speed) { this.speed = speed; } @@ -241,14 +162,6 @@ public class StartupRoutingCommand extends StartupCommand { this.hypervisorVersion = hypervisorVersion; } - public Map getHostVmStateReport() { - return this._hostVmStateReport; - } - - public void setHostVmStateReport(Map hostVmStateReport) { - this._hostVmStateReport = hostVmStateReport; - } - public HashMap> getGpuGroupDetails() { return groupDetails; } diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java index fdb88d05f60..af2d1b94399 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -1184,13 +1184,9 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl if (s_logger.isDebugEnabled()) { if (cmd instanceof PingRoutingCommand) { final PingRoutingCommand ping = (PingRoutingCommand)cmd; - if (ping.getNewStates().size() > 0) { - s_logger.debug("SeqA " + hostId + "-" + request.getSequence() + ": Processing " + request); - } else { - logD = false; - s_logger.debug("Ping from " + hostId); - s_logger.trace("SeqA " + hostId + "-" + request.getSequence() + ": Processing " + request); - } + logD = false; + s_logger.debug("Ping from " + hostId); + s_logger.trace("SeqA " + hostId + "-" + request.getSequence() + ": Processing " + request); } else if (cmd instanceof PingCommand) { logD = false; s_logger.debug("Ping from " + hostId); diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 19f29ecfdd8..29430472626 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -22,15 +22,12 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.TimeZone; import java.util.UUID; import java.util.concurrent.Executors; @@ -96,7 +93,6 @@ import com.cloud.agent.api.StartAnswer; import com.cloud.agent.api.StartCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.agent.api.StartupRoutingCommand.VmState; import com.cloud.agent.api.StopAnswer; import com.cloud.agent.api.StopCommand; import com.cloud.agent.api.UnPlugNicAnswer; @@ -206,9 +202,7 @@ import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; -import com.cloud.vm.snapshot.VMSnapshot; import com.cloud.vm.snapshot.VMSnapshotManager; -import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; @Local(value = VirtualMachineManager.class) @@ -350,9 +344,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac static final ConfigKey ClusterVMMetaDataSyncInterval = new ConfigKey("Advanced", Integer.class, "vmmetadata.sync.interval", "180", "Cluster VM metadata sync interval in seconds", false); - static final ConfigKey VmJobEnabled = new ConfigKey("Advanced", - Boolean.class, "vm.job.enabled", "true", - "True to enable new VM sync model. false to use the old way", false); static final ConfigKey VmJobCheckInterval = new ConfigKey("Advanced", Long.class, "vm.job.check.interval", "3000", "Interval in milliseconds to check if the job is complete", false); @@ -596,9 +587,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac _agentMgr.registerForHostEvents(this, true, true, true); - if (VmJobEnabled.value()) { - _messageBus.subscribe(VirtualMachineManager.Topics.VM_POWER_STATE, MessageDispatcher.getDispatcher(this)); - } + _messageBus.subscribe(VirtualMachineManager.Topics.VM_POWER_STATE, MessageDispatcher.getDispatcher(this)); return true; } @@ -766,13 +755,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if ( jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateStart(vmUuid, params, planToDeploy, planner); } finally { @@ -1343,14 +1330,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateStop(vmUuid, cleanUpEvenIfUnableToStop); } finally { @@ -1662,7 +1647,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac protected boolean checkVmOnHost(VirtualMachine vm, long hostId) throws AgentUnavailableException, OperationTimedoutException { CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer)_agentMgr.send(hostId, new CheckVirtualMachineCommand(vm.getInstanceName())); - if (!answer.getResult() || answer.getState() == State.Stopped) { + if (!answer.getResult() || answer.getState() == PowerState.PowerOff) { return false; } @@ -1672,13 +1657,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac @Override public void storageMigration(String vmUuid, StoragePool destPool) { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateStorageMigration(vmUuid, destPool); } finally { @@ -1767,13 +1750,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws ResourceUnavailableException, ConcurrentOperationException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateMigrate(vmUuid, srcHostId, dest); } finally { @@ -2073,14 +2054,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws ResourceUnavailableException, ConcurrentOperationException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateMigrateWithStorage(vmUuid, srcHostId, destHostId, volumeToPool); } finally { @@ -2257,14 +2236,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac @Override public void migrateAway(String vmUuid, long srcHostId) throws InsufficientServerCapacityException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { try { orchestrateMigrateAway(vmUuid, srcHostId, null); @@ -2273,8 +2250,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac orchestrateMigrateAway(vmUuid, srcHostId, _haMgr.getHAPlanner()); } } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { Outcome outcome = migrateVmAwayThroughJobQueue(vmUuid, srcHostId); @@ -2421,13 +2397,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if ( jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateReboot(vmUuid, params); } finally { @@ -2502,92 +2476,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } - public Commands fullHostSync(final long hostId, StartupRoutingCommand startup) { - Commands commands = new Commands(Command.OnError.Continue); - - Map infos = convertToInfos(startup); - - final List vms = _vmDao.listByHostId(hostId); - s_logger.debug("Found " + vms.size() + " VMs for host " + hostId); - for (VMInstanceVO vm : vms) { - AgentVmInfo info = infos.remove(vm.getId()); - - // sync VM Snapshots related transient states - List vmSnapshotsInTrasientStates = - _vmSnapshotDao.listByInstanceId(vm.getId(), VMSnapshot.State.Expunging, VMSnapshot.State.Reverting, VMSnapshot.State.Creating); - if (vmSnapshotsInTrasientStates.size() > 1) { - s_logger.info("Found vm " + vm.getInstanceName() + " with VM snapshots in transient states, needs to sync VM snapshot state"); - if (!_vmSnapshotMgr.syncVMSnapshot(vm, hostId)) { - s_logger.warn("Failed to sync VM in a transient snapshot related state: " + vm.getInstanceName()); - continue; - } else { - s_logger.info("Successfully sync VM with transient snapshot: " + vm.getInstanceName()); - } - } - - if (info == null) { - info = new AgentVmInfo(vm.getInstanceName(), vm, State.Stopped); - } - - HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType()); - Command command = compareState(hostId, vm, info, true, hvGuru.trackVmHostChange()); - if (command != null) { - commands.addCommand(command); - } - } - - for (final AgentVmInfo left : infos.values()) { - boolean found = false; - VMInstanceVO vm = _vmDao.findVMByInstanceName(left.name); - if (vm != null) { - found = true; - HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType()); - if (hvGuru.trackVmHostChange()) { - Command command = compareState(hostId, vm, left, true, true); - if (command != null) { - commands.addCommand(command); - } - } else { - s_logger.warn("Stopping a VM, VM " + left.name + " migrate from Host " + vm.getHostId() + " to Host " + hostId); - commands.addCommand(cleanup(left.name)); - } - } - if (!found) { - s_logger.warn("Stopping a VM that we have no record of : " + left.name); - commands.addCommand(cleanup(left.name)); - } - } - - return commands; - } - - public Commands deltaHostSync(long hostId, Map newStates) { - Map states = convertDeltaToInfos(newStates); - Commands commands = new Commands(Command.OnError.Continue); - - for (Map.Entry entry : states.entrySet()) { - AgentVmInfo info = entry.getValue(); - - VMInstanceVO vm = info.vm; - - Command command = null; - if (vm != null) { - HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType()); - command = compareState(hostId, vm, info, false, hvGuru.trackVmHostChange()); - } else { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Cleaning up a VM that is no longer found: " + info.name); - } - command = cleanup(info.name); - } - - if (command != null) { - commands.addCommand(command); - } - } - - return commands; - } // this is XenServer specific public void syncVMMetaData(Map vmMetadatum) { @@ -2628,376 +2516,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } } - public void fullSync(final long clusterId, Map> newStates) { - if (newStates == null) - return; - Map infos = convertToInfos(newStates); - Set set_vms = Collections.synchronizedSet(new HashSet()); - set_vms.addAll(_vmDao.listByClusterId(clusterId)); - set_vms.addAll(_vmDao.listLHByClusterId(clusterId)); - - for (VMInstanceVO vm : set_vms) { - AgentVmInfo info = infos.remove(vm.getId()); - - // sync VM Snapshots related transient states - List vmSnapshotsInExpungingStates = - _vmSnapshotDao.listByInstanceId(vm.getId(), VMSnapshot.State.Expunging, VMSnapshot.State.Creating, VMSnapshot.State.Reverting); - if (vmSnapshotsInExpungingStates.size() > 0) { - s_logger.info("Found vm " + vm.getInstanceName() + " in state. " + vm.getState() + ", needs to sync VM snapshot state"); - Long hostId = null; - Host host = null; - if (info != null && info.getHostUuid() != null) { - host = _hostDao.findByGuid(info.getHostUuid()); - } - hostId = host == null ? (vm.getHostId() == null ? vm.getLastHostId() : vm.getHostId()) : host.getId(); - if (!_vmSnapshotMgr.syncVMSnapshot(vm, hostId)) { - s_logger.warn("Failed to sync VM with transient snapshot: " + vm.getInstanceName()); - continue; - } else { - s_logger.info("Successfully sync VM with transient snapshot: " + vm.getInstanceName()); - } - } - - if ((info == null && (vm.getState() == State.Running || vm.getState() == State.Starting)) || - (info != null && (info.state == State.Running && vm.getState() == State.Starting))) { - s_logger.info("Found vm " + vm.getInstanceName() + " in inconsistent state. " + vm.getState() + " on CS while " + (info == null ? "Stopped" : "Running") + - " on agent"); - info = new AgentVmInfo(vm.getInstanceName(), vm, State.Stopped); - - // Bug 13850- grab outstanding work item if any for this VM state so that we mark it as DONE after we change VM state, else it will remain pending - ItWorkVO work = _workDao.findByOutstandingWork(vm.getId(), vm.getState()); - if (work != null) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Found an outstanding work item for this vm " + vm + " in state:" + vm.getState() + ", work id:" + work.getId()); - } - } - vm.setState(State.Running); // set it as running and let HA take care of it - _vmDao.persist(vm); - - if (work != null) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Updating outstanding work item to Done, id:" + work.getId()); - } - work.setStep(Step.Done); - _workDao.update(work.getId(), work); - } - - try { - Host host = _hostDao.findByGuid(info.getHostUuid()); - long hostId = host == null ? (vm.getHostId() == null ? vm.getLastHostId() : vm.getHostId()) : host.getId(); - HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType()); - Command command = compareState(hostId, vm, info, true, hvGuru.trackVmHostChange()); - if (command != null) { - Answer answer = _agentMgr.send(hostId, command); - if (!answer.getResult()) { - s_logger.warn("Failed to update state of the VM due to " + answer.getDetails()); - } - } - } catch (Exception e) { - s_logger.warn("Unable to update state of the VM due to exception " + e.getMessage()); - e.printStackTrace(); - } - } else if (info != null && - (vm.getState() == State.Stopped || vm.getState() == State.Stopping || vm.isRemoved() || vm.getState() == State.Destroyed || vm.getState() == State.Expunging)) { - Host host = _hostDao.findByGuid(info.getHostUuid()); - if (host != null) { - s_logger.warn("Stopping a VM which is stopped/stopping/destroyed/expunging " + info.name); - if (vm.getState() == State.Stopped || vm.getState() == State.Stopping) { - vm.setState(State.Stopped); // set it as stop and clear it from host - vm.setHostId(null); - _vmDao.persist(vm); - } - try { - Answer answer = _agentMgr.send(host.getId(), cleanup(info.name)); - if (!answer.getResult()) { - s_logger.warn("Unable to stop a VM due to " + answer.getDetails()); - } - } catch (Exception e) { - s_logger.warn("Unable to stop a VM due to " + e.getMessage()); - } - } - } else - // host id can change - if (info != null && vm.getState() == State.Running) { - // check for host id changes - Host host = _hostDao.findByGuid(info.getHostUuid()); - if (host != null && (vm.getHostId() == null || host.getId() != vm.getHostId())) { - s_logger.info("Found vm " + vm.getInstanceName() + " with inconsistent host in db, new host is " + host.getId()); - try { - stateTransitTo(vm, VirtualMachine.Event.AgentReportMigrated, host.getId()); - } catch (NoTransitionException e) { - s_logger.warn(e.getMessage()); - } - } - } - /* else if(info == null && vm.getState() == State.Stopping) { //Handling CS-13376 - s_logger.warn("Marking the VM as Stopped as it was still stopping on the CS" +vm.getName()); - vm.setState(State.Stopped); // Setting the VM as stopped on the DB and clearing it from the host - vm.setLastHostId(vm.getHostId()); - vm.setHostId(null); - _vmDao.persist(vm); - }*/ - } - - for (final AgentVmInfo left : infos.values()) { - if (!VirtualMachineName.isValidVmName(left.name)) - continue; // if the vm doesn't follow CS naming ignore it for stopping - try { - Host host = _hostDao.findByGuid(left.getHostUuid()); - if (host != null) { - s_logger.warn("Stopping a VM which we do not have any record of " + left.name); - Answer answer = _agentMgr.send(host.getId(), cleanup(left.name)); - if (!answer.getResult()) { - s_logger.warn("Unable to stop a VM due to " + answer.getDetails()); - } - } - } catch (Exception e) { - s_logger.warn("Unable to stop a VM due to " + e.getMessage()); - } - } - - } - - protected Map convertToInfos(final Map> newStates) { - final HashMap map = new HashMap(); - if (newStates == null) { - return map; - } - boolean is_alien_vm = true; - long alien_vm_count = -1; - for (Map.Entry> entry : newStates.entrySet()) { - is_alien_vm = true; - String name = entry.getKey(); - VMInstanceVO vm = _vmDao.findVMByInstanceName(name); - if (vm != null) { - map.put(vm.getId(), new AgentVmInfo(entry.getKey(), vm, entry.getValue().second(), entry.getValue().first())); - is_alien_vm = false; - } - // alien VMs - if (is_alien_vm) { - map.put(alien_vm_count--, new AgentVmInfo(entry.getKey(), null, entry.getValue().second(), entry.getValue().first())); - s_logger.warn("Found an alien VM " + entry.getKey()); - } - } - return map; - } - - protected Map convertToInfos(StartupRoutingCommand cmd) { - final Map states = cmd.getVmStates(); - final HashMap map = new HashMap(); - if (states == null) { - return map; - } - - for (Map.Entry entry : states.entrySet()) { - String name = entry.getKey(); - VMInstanceVO vm = _vmDao.findVMByInstanceName(name); - if (vm != null) { - map.put(vm.getId(), new AgentVmInfo(entry.getKey(), vm, entry.getValue().getState(), entry.getValue().getHost())); - } - } - - return map; - } - - protected Map convertDeltaToInfos(final Map states) { - final HashMap map = new HashMap(); - - if (states == null) { - return map; - } - - for (Map.Entry entry : states.entrySet()) { - String name = entry.getKey(); - VMInstanceVO vm = _vmDao.findVMByInstanceName(name); - if (vm != null) { - map.put(vm.getId(), new AgentVmInfo(entry.getKey(), vm, entry.getValue())); - } - } - - return map; - } - - /** - * compareState does as its name suggests and compares the states between - * management server and agent. It returns whether something should be - * cleaned up - * - */ - protected Command compareState(long hostId, VMInstanceVO vm, final AgentVmInfo info, final boolean fullSync, boolean trackExternalChange) { - State agentState = info.state; - final State serverState = vm.getState(); - final String serverName = vm.getInstanceName(); - - Command command = null; - s_logger.debug("VM " + serverName + ": cs state = " + serverState + " and realState = " + agentState); - if (s_logger.isDebugEnabled()) { - s_logger.debug("VM " + serverName + ": cs state = " + serverState + " and realState = " + agentState); - } - - if (agentState == State.Error) { - agentState = State.Stopped; - - AlertManager.AlertType alertType = AlertManager.AlertType.ALERT_TYPE_USERVM; - if (VirtualMachine.Type.DomainRouter.equals(vm.getType())) { - alertType = AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER; - } else if (VirtualMachine.Type.ConsoleProxy.equals(vm.getType())) { - alertType = AlertManager.AlertType.ALERT_TYPE_CONSOLE_PROXY; - } else if (VirtualMachine.Type.SecondaryStorageVm.equals(vm.getType())) { - alertType = AlertManager.AlertType.ALERT_TYPE_SSVM; - } - - HostPodVO podVO = _podDao.findById(vm.getPodIdToDeployIn()); - DataCenterVO dcVO = _dcDao.findById(vm.getDataCenterId()); - HostVO hostVO = _hostDao.findById(vm.getHostId()); - - String hostDesc = "name: " + hostVO.getName() + " (id:" + hostVO.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName(); - _alertMgr.sendAlert(alertType, vm.getDataCenterId(), vm.getPodIdToDeployIn(), "VM (name: " + vm.getInstanceName() + ", id: " + vm.getId() + - ") stopped on host " + hostDesc + " due to storage failure", "Virtual Machine " + vm.getInstanceName() + " (id: " + vm.getId() + ") running on host [" + - vm.getHostId() + "] stopped due to storage failure."); - } - - if (trackExternalChange) { - if (serverState == State.Starting) { - if (vm.getHostId() != null && vm.getHostId() != hostId) { - s_logger.info("CloudStack is starting VM on host " + vm.getHostId() + ", but status report comes from a different host " + hostId + - ", skip status sync for vm: " + vm.getInstanceName()); - return null; - } - } - if (vm.getHostId() == null || hostId != vm.getHostId()) { - try { - ItWorkVO workItem = _workDao.findByOutstandingWork(vm.getId(), State.Migrating); - if (workItem == null) { - stateTransitTo(vm, VirtualMachine.Event.AgentReportMigrated, hostId); - } - } catch (NoTransitionException e) { - } - } - } - - // during VM migration time, don't sync state will agent status update - if (serverState == State.Migrating) { - s_logger.debug("Skipping vm in migrating state: " + vm); - return null; - } - - if (trackExternalChange) { - if (serverState == State.Starting) { - if (vm.getHostId() != null && vm.getHostId() != hostId) { - s_logger.info("CloudStack is starting VM on host " + vm.getHostId() + ", but status report comes from a different host " + hostId + - ", skip status sync for vm: " + vm.getInstanceName()); - return null; - } - } - - if (serverState == State.Running) { - try { - // - // we had a bug that sometimes VM may be at Running State - // but host_id is null, we will cover it here. - // means that when CloudStack DB lost of host information, - // we will heal it with the info reported from host - // - if (vm.getHostId() == null || hostId != vm.getHostId()) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("detected host change when VM " + vm + " is at running state, VM could be live-migrated externally from host " + - vm.getHostId() + " to host " + hostId); - } - - stateTransitTo(vm, VirtualMachine.Event.AgentReportMigrated, hostId); - } - } catch (NoTransitionException e) { - s_logger.warn(e.getMessage()); - } - } - } - - if (agentState == serverState) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Both states are " + agentState + " for " + vm); - } - assert (agentState == State.Stopped || agentState == State.Running) : "If the states we send up is changed, this must be changed."; - if (agentState == State.Running) { - try { - stateTransitTo(vm, VirtualMachine.Event.AgentReportRunning, hostId); - } catch (NoTransitionException e) { - s_logger.warn(e.getMessage()); - } - // FIXME: What if someone comes in and sets it to stopping? Then - // what? - return null; - } - - s_logger.debug("State matches but the agent said stopped so let's send a cleanup command anyways."); - return cleanup(vm); - } - - if (agentState == State.Shutdowned) { - if (serverState == State.Running || serverState == State.Starting || serverState == State.Stopping) { - try { - advanceStop(vm.getUuid(), true); - } catch (AgentUnavailableException e) { - assert (false) : "How do we hit this with forced on?"; - return null; - } catch (OperationTimedoutException e) { - assert (false) : "How do we hit this with forced on?"; - return null; - } catch (ConcurrentOperationException e) { - assert (false) : "How do we hit this with forced on?"; - return null; - } - } else { - s_logger.debug("Sending cleanup to a shutdowned vm: " + vm.getInstanceName()); - command = cleanup(vm); - } - } else if (agentState == State.Stopped) { - // This state means the VM on the agent was detected previously - // and now is gone. This is slightly different than if the VM - // was never completed but we still send down a Stop Command - // to ensure there's cleanup. - if (serverState == State.Running) { - // Our records showed that it should be running so let's restart - // it. - _haMgr.scheduleRestart(vm, false); - } else if (serverState == State.Stopping) { - _haMgr.scheduleStop(vm, hostId, WorkType.ForceStop); - s_logger.debug("Scheduling a check stop for VM in stopping mode: " + vm); - } else if (serverState == State.Starting) { - s_logger.debug("Ignoring VM in starting mode: " + vm.getInstanceName()); - _haMgr.scheduleRestart(vm, false); - } - command = cleanup(vm); - } else if (agentState == State.Running) { - if (serverState == State.Starting) { - if (fullSync) { - try { - ensureVmRunningContext(hostId, vm, Event.AgentReportRunning); - } catch (OperationTimedoutException e) { - s_logger.error("Exception during update for running vm: " + vm, e); - return null; - } catch (ResourceUnavailableException e) { - s_logger.error("Exception during update for running vm: " + vm, e); - return null; - } catch (InsufficientAddressCapacityException e) { - s_logger.error("Exception during update for running vm: " + vm, e); - return null; - } catch (NoTransitionException e) { - s_logger.warn(e.getMessage()); - } - } - } else if (serverState == State.Stopped) { - s_logger.debug("Scheduling a stop command for " + vm); - _haMgr.scheduleStop(vm, hostId, WorkType.Stop); - } else { - s_logger.debug("server VM state " + serverState + " does not meet expectation of a running VM report from agent"); - - // just be careful not to stop VM for things we don't handle - // command = cleanup(vm); - } - } - return command; - } private void ensureVmRunningContext(long hostId, VMInstanceVO vm, Event cause) throws OperationTimedoutException, ResourceUnavailableException, NoTransitionException, InsufficientAddressCapacityException { @@ -3095,22 +2613,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac for (Command cmd : cmds) { if (cmd instanceof PingRoutingCommand) { PingRoutingCommand ping = (PingRoutingCommand)cmd; - if (ping.getNewStates() != null && ping.getNewStates().size() > 0) { - if (!VmJobEnabled.value()) { - Commands commands = deltaHostSync(agentId, ping.getNewStates()); - if (commands.size() > 0) { - try { - _agentMgr.send(agentId, commands, this); - } catch (final AgentUnavailableException e) { - s_logger.warn("Agent is now unavailable", e); - } - } - } - } - if(VmJobEnabled.value()) { - if (ping.getHostVmStateReport() != null) { - _syncMgr.processHostVmStatePingReport(agentId, ping.getHostVmStateReport()); - } + if (ping.getHostVmStateReport() != null) { + _syncMgr.processHostVmStatePingReport(agentId, ping.getHostVmStateReport()); } // take the chance to scan VMs that are stuck in transitional states @@ -3141,9 +2645,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac if(s_logger.isDebugEnabled()) s_logger.debug("Received startup command from hypervisor host. host id: " + agent.getId()); - if(VmJobEnabled.value()) { - _syncMgr.resetHostSyncState(agent.getId()); - } + _syncMgr.resetHostSyncState(agent.getId()); if (forRebalance) { s_logger.debug("Not processing listener " + this + " as connect happens on rebalance process"); @@ -3159,13 +2661,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac long agentId = agent.getId(); if (agent.getHypervisorType() == HypervisorType.XenServer) { // only for Xen - if (!VmJobEnabled.value()) { - StartupRoutingCommand startup = (StartupRoutingCommand)cmd; - HashMap> allStates = startup.getClusterVMStateChanges(); - if (allStates != null) { - fullSync(clusterId, allStates); - } - } // initiate the cron job ClusterVMMetaDataSyncCommand syncVMMetaDataCmd = new ClusterVMMetaDataSyncCommand(ClusterVMMetaDataSyncInterval.value(), clusterId); try { @@ -3174,35 +2669,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } catch (AgentUnavailableException e) { s_logger.fatal("The Cluster VM metadata sync process failed for cluster id " + clusterId + " with ", e); } - } else { // for others KVM and VMWare - if (!VmJobEnabled.value()) { - StartupRoutingCommand startup = (StartupRoutingCommand)cmd; - Commands commands = fullHostSync(agentId, startup); - - if (commands.size() > 0) { - s_logger.debug("Sending clean commands to the agent"); - - try { - boolean error = false; - Answer[] answers = _agentMgr.send(agentId, commands); - for (Answer answer : answers) { - if (!answer.getResult()) { - s_logger.warn("Unable to stop a VM due to " + answer.getDetails()); - error = true; - } - } - if (error) { - throw new ConnectionException(true, "Unable to stop VMs"); - } - } catch (final AgentUnavailableException e) { - s_logger.warn("Agent is unavailable now", e); - throw new ConnectionException(true, "Unable to sync", e); - } catch (final OperationTimedoutException e) { - s_logger.warn("Agent is unavailable now", e); - throw new ConnectionException(true, "Unable to sync", e); - } - } - } } } @@ -3239,28 +2705,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } } - protected class AgentVmInfo { - public String name; - public State state; - public String hostUuid; - public VMInstanceVO vm; - - public AgentVmInfo(String name, VMInstanceVO vm, State state, String host) { - this.name = name; - this.state = state; - this.vm = vm; - hostUuid = host; - } - - public AgentVmInfo(String name, VMInstanceVO vm, State state) { - this(name, vm, state, null); - } - - public String getHostUuid() { - return hostUuid; - } - } - @Override public VMInstanceVO findById(long vmId) { return _vmDao.findById(vmId); @@ -3345,12 +2789,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vm.getId()); - } + placeHolder = createPlaceHolderWork(vm.getId()); try { return orchestrateAddVmToNetwork(vm, network, requested); } finally { @@ -3460,12 +2902,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws ConcurrentOperationException, ResourceUnavailableException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vm.getId()); - } + placeHolder = createPlaceHolderWork(vm.getId()); try { return orchestrateRemoveNicFromVm(vm, nic); } finally { @@ -3712,13 +3152,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac public void migrateForScale(String vmUuid, long srcHostId, DeployDestination dest, Long oldSvcOfferingId) throws ResourceUnavailableException, ConcurrentOperationException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { orchestrateMigrateForScale(vmUuid, srcHostId, dest, oldSvcOfferingId); } finally { @@ -3977,13 +3415,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac throws ResourceUnavailableException, InsufficientServerCapacityException, ConcurrentOperationException { AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - VirtualMachine vm = _vmDao.findByUuid(vmUuid); - placeHolder = createPlaceHolderWork(vm.getId()); - } + VirtualMachine vm = _vmDao.findByUuid(vmUuid); + placeHolder = createPlaceHolderWork(vm.getId()); try { return orchestrateReConfigureVm(vmUuid, oldServiceOffering, reconfiguringOnExistingHost); } finally { diff --git a/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java index ae074552036..865b0662ec0 100644 --- a/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java +++ b/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java @@ -102,6 +102,7 @@ import com.cloud.utils.db.EntityManager; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachine.State; +import com.cloud.vm.VirtualMachine.PowerState; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; @@ -397,7 +398,7 @@ public class VirtualMachineManagerImplTest { CheckVirtualMachineAnswer checkVmAnswerMock = mock(CheckVirtualMachineAnswer.class); when(checkVmAnswerMock.getResult()).thenReturn(true); - when(checkVmAnswerMock.getState()).thenReturn(State.Running); + when(checkVmAnswerMock.getState()).thenReturn(PowerState.PowerOn); when(_agentMgr.send(anyLong(), isA(CheckVirtualMachineCommand.class))).thenReturn(checkVmAnswerMock); // Mock the state transitions of vm. diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java index 17a9f790d23..c204d29c296 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java @@ -137,7 +137,7 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot HostVO host = hostDao.findById(hostId); GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion()); - CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), target, volumeTOs, guestOS.getDisplayName(), userVm.getState()); + CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), target, volumeTOs, guestOS.getDisplayName()); if (guestOsMapping == null) { ccmd.setPlatformEmulator(null); } else { diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java index ff62fb86805..e90770e8e35 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java @@ -124,7 +124,7 @@ public class HypervisorHelperImpl implements HypervisorHelper { GuestOSVO guestOS = guestOSDao.findById(virtualMachine.getGuestOSId()); List volumeTOs = vmSnapshotHelper.getVolumeTOList(virtualMachine.getId()); CreateVMSnapshotCommand ccmd = - new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName(), virtualMachine.getState()); + new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName()); HostVO host = hostDao.findById(hostId); GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion()); ccmd.setPlatformEmulator(guestOsMapping.getGuestOsName()); diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java index 828533708ef..fedfb8bd9f6 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java @@ -67,9 +67,7 @@ import com.cloud.utils.script.Script; import com.cloud.utils.script.Script2; import com.cloud.utils.script.Script2.ParamType; import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.PowerState; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.VMInstanceDao; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -85,7 +83,6 @@ import java.util.concurrent.TimeUnit; @Local(value = ServerResource.class) public class BareMetalResourceBase extends ManagerBase implements ServerResource { private static final Logger s_logger = Logger.getLogger(BareMetalResourceBase.class); - protected HashMap _vms = new HashMap(2); protected String _name; protected String _uuid; protected String _zone; @@ -116,17 +113,6 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource protected ConfigurationDao configDao; protected VMInstanceDao vmDao; - private void changeVmState(String vmName, VirtualMachine.State state) { - synchronized (_vms) { - _vms.put(vmName, state); - } - } - - private State removeVmState(String vmName) { - synchronized (_vms) { - return _vms.remove(vmName); - } - } @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -341,37 +327,6 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource return com.cloud.host.Host.Type.Routing; } - protected State getVmState() { - OutputInterpreter.AllLinesParser interpreter = new OutputInterpreter.AllLinesParser(); - if (!doScript(_getStatusCommand, interpreter)) { - s_logger.warn("Cannot get power status of " + _name + ", assume VM state was not changed"); - return null; - } - if (isPowerOn(interpreter.getLines())) { - return State.Running; - } else { - return State.Stopped; - } - } - - protected Map fullSync() { - Map states = new HashMap(); - if (hostId != null) { - final List vms = vmDao.listByHostId(hostId); - for (VMInstanceVO vm : vms) { - states.put(vm.getInstanceName(), vm.getState()); - } - } - /* - * Map changes = new HashMap(); - * - * if (_vmName != null) { State state = getVmState(); if (state != null) - * { changes.put(_vmName, state); } } - */ - - return states; - } - protected Map getHostVmStateReport() { Map states = new HashMap(); if (hostId != null) { @@ -380,25 +335,18 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource states.put( vm.getInstanceName(), new HostVmStateReportEntry( - vm.getState() == State.Running ? PowerState.PowerOn : PowerState.PowerOff, "host-" + hostId + vm.getPowerState(), "host-" + hostId ) ); } } - /* - * Map changes = new HashMap(); - * - * if (_vmName != null) { State state = getVmState(); if (state != null) - * { changes.put(_vmName, state); } } - */ - return states; } @Override public StartupCommand[] initialize() { StartupRoutingCommand cmd = new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.BareMetal, - new HashMap(), null, null); + new HashMap()); cmd.setDataCenter(_zone); cmd.setPod(_pod); @@ -413,7 +361,6 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource cmd.setMemory(_memCapacity); cmd.setPrivateMacAddress(_mac); cmd.setPublicMacAddress(_mac); - cmd.setStateChanges(fullSync()); return new StartupCommand[] { cmd }; } @@ -439,15 +386,15 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource if (hostId != null) { final List vms = vmDao.listByHostId(hostId); if (vms.isEmpty()) { - return new PingRoutingCommand(getType(), id, deltaSync(), getHostVmStateReport()); + return new PingRoutingCommand(getType(), id, getHostVmStateReport()); } else { VMInstanceVO vm = vms.get(0); SecurityGroupHttpClient client = new SecurityGroupHttpClient(); HashMap> nwGrpStates = client.sync(vm.getInstanceName(), vm.getId(), vm.getPrivateIpAddress()); - return new PingRoutingWithNwGroupsCommand(getType(), id, null, getHostVmStateReport(), nwGrpStates); + return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(), nwGrpStates); } } else { - return new PingRoutingCommand(getType(), id, deltaSync(), getHostVmStateReport()); + return new PingRoutingCommand(getType(), id, getHostVmStateReport()); } } @@ -487,7 +434,7 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource } protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) { - return new CheckVirtualMachineAnswer(cmd, State.Stopped, null); + return new CheckVirtualMachineAnswer(cmd, PowerState.PowerOff, null); } protected Answer execute(IpmiBootorResetCommand cmd) { @@ -608,85 +555,33 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource protected StartAnswer execute(StartCommand cmd) { VirtualMachineTO vm = cmd.getVirtualMachine(); - State state = State.Stopped; - try { - changeVmState(vm.getName(), State.Starting); + OutputInterpreter.AllLinesParser interpreter = new OutputInterpreter.AllLinesParser(); + if (!doScript(_getStatusCommand, interpreter)) { + return new StartAnswer(cmd, "Cannot get current power status of " + _name); + } - OutputInterpreter.AllLinesParser interpreter = new OutputInterpreter.AllLinesParser(); - if (!doScript(_getStatusCommand, interpreter)) { - return new StartAnswer(cmd, "Cannot get current power status of " + _name); + if (isPowerOn(interpreter.getLines())) { + if (!doScript(_rebootCommand)) { + return new StartAnswer(cmd, "IPMI reboot failed"); } - - if (isPowerOn(interpreter.getLines())) { - if (!doScript(_rebootCommand)) { - return new StartAnswer(cmd, "IPMI reboot failed"); - } - } else { - if (!doScript(_powerOnCommand)) { - return new StartAnswer(cmd, "IPMI power on failed"); - } - } - - if (_isEchoScAgent) { - SecurityGroupHttpClient hc = new SecurityGroupHttpClient(); - boolean echoRet = hc.echo(vm.getNics()[0].getIp(), TimeUnit.MINUTES.toMillis(30), TimeUnit.MINUTES.toMillis(1)); - if (!echoRet) { - return new StartAnswer(cmd, String.format("Call security group agent on vm[%s] timeout", vm.getNics()[0].getIp())); - } - } - - s_logger.debug("Start bare metal vm " + vm.getName() + "successfully"); - state = State.Running; - _vmName = vm.getName(); - return new StartAnswer(cmd); - } finally { - if (state != State.Stopped) { - changeVmState(vm.getName(), state); - } else { - removeVmState(vm.getName()); + } else { + if (!doScript(_powerOnCommand)) { + return new StartAnswer(cmd, "IPMI power on failed"); } } - } - protected HashMap deltaSync() { - final HashMap changes = new HashMap(); - /* - * Disable sync until we find a way that only tracks status but not does - * action - * - * The scenario is: Baremetal will reboot host when creating template. - * Given most servers take a long time to boot up, there would be a - * period that mgmt server finds the host is stopped through fullsync. - * Then mgmt server updates database with marking the host as stopped, - * after that, the host comes up and full sync then indicates it's - * running. Because in database the host is already stopped, mgmt server - * sends out a stop command. As a result, creating image gets never - * happened. - * - * if (_vmName == null) { return null; } - * - * State newState = getVmState(); if (newState == null) { - * s_logger.warn("Cannot get power state of VM " + _vmName); return - * null; } - * - * final State oldState = removeVmState(_vmName); if (oldState == null) - * { changeVmState(_vmName, newState); changes.put(_vmName, newState); } - * else if (oldState == State.Starting) { if (newState == State.Running) - * { changeVmState(_vmName, newState); } else if (newState == - * State.Stopped) { s_logger.debug("Ignoring vm " + _vmName + - * " because of a lag in starting the vm."); } } else if (oldState == - * State.Migrating) { - * s_logger.warn("How can baremetal VM get into migrating state???"); } - * else if (oldState == State.Stopping) { if (newState == State.Stopped) - * { changeVmState(_vmName, newState); } else if (newState == - * State.Running) { s_logger.debug("Ignoring vm " + _vmName + - * " because of a lag in stopping the vm. "); } } else if (oldState != - * newState) { changeVmState(_vmName, newState); changes.put(_vmName, - * newState); } - */ - return changes; + if (_isEchoScAgent) { + SecurityGroupHttpClient hc = new SecurityGroupHttpClient(); + boolean echoRet = hc.echo(vm.getNics()[0].getIp(), TimeUnit.MINUTES.toMillis(30), TimeUnit.MINUTES.toMillis(1)); + if (!echoRet) { + return new StartAnswer(cmd, String.format("Call security group agent on vm[%s] timeout", vm.getNics()[0].getIp())); + } + } + s_logger.debug("Start bare metal vm " + vm.getName() + "successfully"); + _vmName = vm.getName(); + return new StartAnswer(cmd); } protected ReadyAnswer execute(ReadyCommand cmd) { diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java index 8e7acdef7d9..0d3cdce74e8 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java @@ -42,7 +42,6 @@ import com.cloud.agent.api.StartupExternalDhcpCommand; import com.cloud.host.Host.Type; import com.cloud.resource.ServerResource; import com.cloud.utils.component.ManagerBase; -import com.cloud.vm.VirtualMachine.State; public class BaremetalDhcpResourceBase extends ManagerBase implements ServerResource { private static final Logger s_logger = Logger.getLogger(BaremetalDhcpResourceBase.class); @@ -126,7 +125,7 @@ public class BaremetalDhcpResourceBase extends ManagerBase implements ServerReso @Override public PingCommand getCurrentStatus(long id) { //TODO: check server - return new PingRoutingCommand(getType(), id, new HashMap(), new HashMap()); + return new PingRoutingCommand(getType(), id, new HashMap()); } protected ReadyAnswer execute(ReadyCommand cmd) { diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java index aab936ce205..8fd2c35ced9 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java @@ -39,7 +39,6 @@ import com.cloud.agent.api.PingRoutingCommand; import com.cloud.agent.api.routing.DhcpEntryCommand; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SSHCmdHelper; -import com.cloud.vm.VirtualMachine.State; public class BaremetalDhcpdResource extends BaremetalDhcpResourceBase { private static final Logger s_logger = Logger.getLogger(BaremetalDhcpdResource.class); @@ -107,7 +106,7 @@ public class BaremetalDhcpdResource extends BaremetalDhcpResourceBase { return null; } else { SSHCmdHelper.releaseSshConnection(sshConnection); - return new PingRoutingCommand(getType(), id, new HashMap(), new HashMap()); + return new PingRoutingCommand(getType(), id, new HashMap()); } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java index 19c1f19021c..79f23cc46db 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java @@ -39,7 +39,6 @@ import com.cloud.agent.api.PingRoutingCommand; import com.cloud.agent.api.routing.DhcpEntryCommand; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SSHCmdHelper; -import com.cloud.vm.VirtualMachine.State; public class BaremetalDnsmasqResource extends BaremetalDhcpResourceBase { private static final Logger s_logger = Logger.getLogger(BaremetalDnsmasqResource.class); @@ -99,7 +98,7 @@ public class BaremetalDnsmasqResource extends BaremetalDhcpResourceBase { return null; } else { SSHCmdHelper.releaseSshConnection(sshConnection); - return new PingRoutingCommand(getType(), id, new HashMap(), new HashMap()); + return new PingRoutingCommand(getType(), id, new HashMap()); } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java index b677a63b03e..260f4f16e87 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java @@ -38,7 +38,6 @@ import com.cloud.agent.api.routing.VmDataCommand; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SSHCmdHelper; -import com.cloud.vm.VirtualMachine.State; public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase { private static final Logger s_logger = Logger.getLogger(BaremetalKickStartPxeResource.class); @@ -107,7 +106,7 @@ public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase { return null; } else { SSHCmdHelper.releaseSshConnection(sshConnection); - return new PingRoutingCommand(getType(), id, new HashMap(), new HashMap()); + return new PingRoutingCommand(getType(), id, new HashMap()); } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java index a7fd77ee43f..80827a25ac8 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java @@ -43,7 +43,6 @@ import com.cloud.agent.api.baremetal.PrepareCreateTemplateCommand; import com.cloud.agent.api.routing.VmDataCommand; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SSHCmdHelper; -import com.cloud.vm.VirtualMachine.State; public class BaremetalPingPxeResource extends BaremetalPxeResourceBase { private static final Logger s_logger = Logger.getLogger(BaremetalPingPxeResource.class); @@ -143,7 +142,7 @@ public class BaremetalPingPxeResource extends BaremetalPxeResourceBase { return null; } else { SSHCmdHelper.releaseSshConnection(sshConnection); - return new PingRoutingCommand(getType(), id, new HashMap(), new HashMap()); + return new PingRoutingCommand(getType(), id, new HashMap()); } } diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java index 1816bafa680..2671b2048b6 100644 --- a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java +++ b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java @@ -90,7 +90,6 @@ import com.cloud.agent.api.SetupGuestNetworkCommand; import com.cloud.agent.api.StartCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.agent.api.StartupRoutingCommand.VmState; import com.cloud.agent.api.StartupStorageCommand; import com.cloud.agent.api.UnPlugNicAnswer; import com.cloud.agent.api.UnPlugNicCommand; @@ -211,8 +210,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S // Create default StartupRoutingCommand, then customise StartupRoutingCommand defaultStartRoutCmd = - new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal, new HashMap(), - new HashMap()); + new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal); // Identity within the data centre is decided by CloudStack kernel, // and passed via ServerResource.configure() @@ -224,7 +222,6 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S defaultStartRoutCmd.setPrivateIpAddress(_agentIp); defaultStartRoutCmd.setStorageIpAddress(_agentIp); defaultStartRoutCmd.setPool(_clusterGuid); - defaultStartRoutCmd.setHostVmStateReport(getHostVmStateReport()); s_logger.debug("Generated StartupRoutingCommand for _agentIp \"" + _agentIp + "\""); @@ -316,7 +313,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S @Override public final PingCommand getCurrentStatus(final long id) { - PingCommand pingCmd = new PingRoutingCommand(getType(), id, null, getHostVmStateReport()); + PingCommand pingCmd = new PingRoutingCommand(getType(), id, getHostVmStateReport()); if (s_logger.isDebugEnabled()) { s_logger.debug("Ping host " + _name + " (IP " + _agentIp + ")"); diff --git a/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java b/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java index d4f1c9fd551..75a864bd144 100644 --- a/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java +++ b/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java @@ -63,7 +63,6 @@ import com.cloud.agent.api.StartAnswer; import com.cloud.agent.api.StartCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.agent.api.StartupRoutingCommand.VmState; import com.cloud.agent.api.StartupStorageCommand; import com.cloud.agent.api.StopAnswer; import com.cloud.agent.api.StopCommand; @@ -252,8 +251,7 @@ public class HypervDirectConnectResourceTest { public final void testStartupCommand() { StartupRoutingCommand defaultStartRoutCmd = - new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal, new HashMap(), - new HashMap()); + new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal); // Identity within the data centre is decided by CloudStack kernel, // and passed via ServerResource.configure() diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 457e17313e2..1be797c1d53 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -68,6 +68,7 @@ import org.libvirt.Connect; import org.libvirt.Domain; import org.libvirt.DomainBlockStats; import org.libvirt.DomainInfo; +import org.libvirt.DomainInfo.DomainState; import org.libvirt.DomainInterfaceStats; import org.libvirt.DomainSnapshot; import org.libvirt.LibvirtException; @@ -268,7 +269,6 @@ import com.cloud.utils.ssh.SshHelper; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.PowerState; -import com.cloud.vm.VirtualMachine.State; /** * LibvirtComputingResource execute requests on the computing/routing host using @@ -461,31 +461,17 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv protected int _cmdsTimeout; protected int _stopTimeout; - // TODO vmsync { - protected static final HashMap s_statesTable; + protected static final HashMap s_powerStatesTable; static { - s_statesTable = new HashMap(); - s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF, State.Stopped); - s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_PAUSED, State.Running); - s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_RUNNING, State.Running); - s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_BLOCKED, State.Running); - s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_NOSTATE, State.Unknown); - s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTDOWN, State.Stopping); - } - // TODO vmsync } - - protected static final HashMap s_powerStatesTable; - static { - s_powerStatesTable = new HashMap(); - s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF, PowerState.PowerOff); - s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_PAUSED, PowerState.PowerOn); - s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_RUNNING, PowerState.PowerOn); - s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_BLOCKED, PowerState.PowerOn); - s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_NOSTATE, PowerState.PowerUnknown); - s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTDOWN, PowerState.PowerOff); + s_powerStatesTable = new HashMap(); + s_powerStatesTable.put(DomainState.VIR_DOMAIN_SHUTOFF, PowerState.PowerOff); + s_powerStatesTable.put(DomainState.VIR_DOMAIN_PAUSED, PowerState.PowerOn); + s_powerStatesTable.put(DomainState.VIR_DOMAIN_RUNNING, PowerState.PowerOn); + s_powerStatesTable.put(DomainState.VIR_DOMAIN_BLOCKED, PowerState.PowerOn); + s_powerStatesTable.put(DomainState.VIR_DOMAIN_NOSTATE, PowerState.PowerUnknown); + s_powerStatesTable.put(DomainState.VIR_DOMAIN_SHUTDOWN, PowerState.PowerOff); } - protected HashMap _vms = new HashMap(20); protected List _vmsKilled = new ArrayList(); private VirtualRoutingResource _virtRouterResource; @@ -2335,7 +2321,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv String vmName = cmd.getVmName(); try { Connect conn = LibvirtConnection.getConnectionByVmName(vmName); - DomainInfo.DomainState state = null; + DomainState state = null; Domain vm = null; if (vmName != null) { try { @@ -2349,7 +2335,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv KVMStoragePool primaryPool = _storagePoolMgr.getStoragePool(cmd.getPool().getType(), cmd.getPool().getUuid()); KVMPhysicalDisk disk = primaryPool.getPhysicalDisk(cmd.getVolumePath()); - if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryPool.isExternalSnapshot()) { + if (state == DomainState.VIR_DOMAIN_RUNNING && !primaryPool.isExternalSnapshot()) { String vmUuid = vm.getUUIDString(); Object[] args = new Object[] {snapshotName, vmUuid}; String snapshot = SnapshotXML.format(args); @@ -2367,7 +2353,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv */ vm = getDomain(conn, cmd.getVmName()); state = vm.getInfo().state; - if (state == DomainInfo.DomainState.VIR_DOMAIN_PAUSED) { + if (state == DomainState.VIR_DOMAIN_PAUSED) { vm.resume(); } } else { @@ -2525,7 +2511,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } /* Delete the snapshot on primary */ - DomainInfo.DomainState state = null; + DomainState state = null; Domain vm = null; if (vmName != null) { try { @@ -2537,7 +2523,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } KVMStoragePool primaryStorage = _storagePoolMgr.getStoragePool(cmd.getPool().getType(), cmd.getPool().getUuid()); - if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryStorage.isExternalSnapshot()) { + if (state == DomainState.VIR_DOMAIN_RUNNING && !primaryStorage.isExternalSnapshot()) { String vmUuid = vm.getUUIDString(); Object[] args = new Object[] {snapshotName, vmUuid}; String snapshot = SnapshotXML.format(args); @@ -2551,7 +2537,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv */ vm = getDomain(conn, cmd.getVmName()); state = vm.getInfo().state; - if (state == DomainInfo.DomainState.VIR_DOMAIN_PAUSED) { + if (state == DomainState.VIR_DOMAIN_PAUSED) { vm.resume(); } } else { @@ -2965,23 +2951,18 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return new ReadyAnswer(cmd); } - protected State convertToState(DomainInfo.DomainState ps) { - final State state = s_statesTable.get(ps); - return state == null ? State.Unknown : state; - } - - protected PowerState convertToPowerState(DomainInfo.DomainState ps) { + protected PowerState convertToPowerState(DomainState ps) { final PowerState state = s_powerStatesTable.get(ps); return state == null ? PowerState.PowerUnknown : state; } - protected State getVmState(Connect conn, final String vmName) { + protected PowerState getVmState(Connect conn, final String vmName) { int retry = 3; Domain vms = null; while (retry-- > 0) { try { vms = conn.domainLookupByName(vmName); - State s = convertToState(vms.getInfo().state); + PowerState s = convertToPowerState(vms.getInfo().state); return s; } catch (final LibvirtException e) { s_logger.warn("Can't get vm state " + vmName + e.getMessage() + "retry:" + retry); @@ -2995,20 +2976,16 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } } - return State.Stopped; + return PowerState.PowerOff; } private Answer execute(CheckVirtualMachineCommand cmd) { try { Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName()); - final State state = getVmState(conn, cmd.getVmName()); + final PowerState state = getVmState(conn, cmd.getVmName()); Integer vncPort = null; - if (state == State.Running) { + if (state == PowerState.PowerOn) { vncPort = getVncPort(conn, cmd.getVmName()); - - synchronized (_vms) { - _vms.put(cmd.getVmName(), State.Running); - } } return new CheckVirtualMachineAnswer(cmd, state, vncPort); @@ -3055,12 +3032,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private Answer execute(MigrateCommand cmd) { String vmName = cmd.getVmName(); - State state = null; String result = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } List ifaces = null; List disks = null; @@ -3119,7 +3091,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } // pause vm if we meet the vm.migrate.pauseafter threshold and not already paused - if (_migratePauseAfter > 0 && sleeptime > _migratePauseAfter && dm.getInfo().state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING ) { + if (_migratePauseAfter > 0 && sleeptime > _migratePauseAfter && dm.getInfo().state == DomainState.VIR_DOMAIN_RUNNING ) { s_logger.info("Pausing VM " + vmName + " due to property vm.migrate.pauseafter setting to " + _migratePauseAfter+ "ms to complete migration"); try { dm.suspend(); @@ -3170,9 +3142,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } if (result != null) { - synchronized (_vms) { - _vms.put(vmName, state); - } } else { destroy_network_rules_for_vm(conn, vmName); for (InterfaceDef iface : ifaces) { @@ -3243,10 +3212,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return new PrepareForMigrationAnswer(cmd, "failed to connect physical disks to host"); } - synchronized (_vms) { - _vms.put(vm.getName(), State.Migrating); - } - skipDisconnect = true; return new PrepareForMigrationAnswer(cmd); @@ -3419,10 +3384,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private Answer execute(RebootCommand cmd) { - synchronized (_vms) { - _vms.put(cmd.getVmName(), State.Starting); - } - try { Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName()); final String result = rebootVM(conn, cmd.getVmName()); @@ -3440,10 +3401,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } catch (LibvirtException e) { return new RebootAnswer(cmd, e.getMessage(), false); - } finally { - synchronized (_vms) { - _vms.put(cmd.getVmName(), State.Running); - } } } @@ -3504,7 +3461,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv try { Connect conn = LibvirtConnection.getConnectionByVmName(vmName); Domain vm = conn.domainLookupByName(cmd.getVmName()); - if (vm != null && vm.getInfo().state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING) { + if (vm != null && vm.getInfo().state == DomainState.VIR_DOMAIN_RUNNING) { return new StopAnswer(cmd, "vm is still running on host", false); } } catch (Exception e) { @@ -3512,11 +3469,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - State state = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } try { Connect conn = LibvirtConnection.getConnectionByVmName(vmName); @@ -3538,18 +3490,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - state = State.Stopped; return new StopAnswer(cmd, result, true); } catch (LibvirtException e) { return new StopAnswer(cmd, e.getMessage(), false); - } finally { - synchronized (_vms) { - if (state != null) { - _vms.put(vmName, state); - } else { - _vms.remove(vmName); - } - } } } @@ -3799,13 +3742,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv String vmName = vmSpec.getName(); LibvirtVMDef vm = null; - State state = State.Stopped; + DomainState state = DomainState.VIR_DOMAIN_SHUTOFF; Connect conn = null; try { - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } - NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { @@ -3874,7 +3813,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - state = State.Running; + state = DomainState.VIR_DOMAIN_RUNNING; return new StartAnswer(cmd); } catch (LibvirtException e) { s_logger.warn("LibvirtException ", e); @@ -3895,14 +3834,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } return new StartAnswer(cmd, e.getMessage()); } finally { - synchronized (_vms) { - if (state != State.Stopped) { - _vms.put(vmName, state); - } else { - _vms.remove(vmName); - } - } - if (state != State.Running) { + if (state != DomainState.VIR_DOMAIN_RUNNING) { _storagePoolMgr.disconnectPhysicalDisksViaVmSpec(vmSpec); } } @@ -4221,13 +4153,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv @Override public PingCommand getCurrentStatus(long id) { - final HashMap newStates = sync(); if (!_canBridgeFirewall) { - return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, newStates, this.getHostVmStateReport()); + return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, this.getHostVmStateReport()); } else { HashMap> nwGrpStates = syncNetworkGroups(id); - return new PingRoutingWithNwGroupsCommand(getType(), id, newStates, this.getHostVmStateReport(), nwGrpStates); + return new PingRoutingWithNwGroupsCommand(getType(), id, this.getHostVmStateReport(), nwGrpStates); } } @@ -4249,19 +4180,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv @Override public StartupCommand[] initialize() { - Map changes = null; - - synchronized (_vms) { - _vms.clear(); - changes = sync(); - } final List info = getHostInfo(); final StartupRoutingCommand cmd = new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), _hypervisorType, RouterPrivateIpStrategy.HostLocal); - cmd.setStateChanges(changes); cmd.setCpuSockets((Integer)info.get(5)); fillNetworkInformation(cmd); _privateIp = cmd.getPrivateIpAddress(); @@ -4269,7 +4193,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv cmd.setPool(_pool); cmd.setCluster(_clusterId); cmd.setGatewayIpAddress(_localGateway); - cmd.setHostVmStateReport(getHostVmStateReport()); cmd.setIqn(getIqn()); StartupStorageCommand sscmd = null; @@ -4322,138 +4245,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - protected HashMap sync() { - HashMap newStates; - HashMap oldStates = null; - - final HashMap changes = new HashMap(); - - synchronized (_vms) { - newStates = getAllVms(); - if (newStates == null) { - s_logger.debug("Unable to get the vm states so no state sync at this point."); - return changes; - } - - oldStates = new HashMap(_vms.size()); - oldStates.putAll(_vms); - - for (final Map.Entry entry : newStates.entrySet()) { - final String vm = entry.getKey(); - - State newState = entry.getValue(); - final State oldState = oldStates.remove(vm); - - if (newState == State.Stopped && oldState != State.Stopping && oldState != null && oldState != State.Stopped) { - newState = getRealPowerState(vm); - } - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + ": libvirt has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null")); - } - - if (vm.startsWith("migrating")) { - s_logger.debug("Migration detected. Skipping"); - continue; - } - if (oldState == null) { - _vms.put(vm, newState); - s_logger.debug("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm); - changes.put(vm, newState); - } else if (oldState == State.Starting) { - if (newState == State.Running) { - _vms.put(vm, newState); - } else if (newState == State.Stopped) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm."); - } - } else if (oldState == State.Migrating) { - if (newState == State.Running) { - s_logger.debug("Detected that an migrating VM is now running: " + vm); - _vms.put(vm, newState); - } - } else if (oldState == State.Stopping) { - if (newState == State.Stopped) { - _vms.put(vm, newState); - } else if (newState == State.Running) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. "); - } - } else if (oldState != newState) { - _vms.put(vm, newState); - if (newState == State.Stopped) { - if (_vmsKilled.remove(vm)) { - s_logger.debug("VM " + vm + " has been killed for storage. "); - newState = State.Error; - } - } - changes.put(vm, newState); - } - } - - for (final Map.Entry entry : oldStates.entrySet()) { - final String vm = entry.getKey(); - final State oldState = entry.getValue(); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + " is now missing from libvirt so reporting stopped"); - } - - if (oldState == State.Stopping) { - s_logger.debug("Ignoring VM " + vm + " in transition state stopping."); - _vms.remove(vm); - } else if (oldState == State.Starting) { - s_logger.debug("Ignoring VM " + vm + " in transition state starting."); - } else if (oldState == State.Stopped) { - _vms.remove(vm); - } else if (oldState == State.Migrating) { - s_logger.debug("Ignoring VM " + vm + " in migrating state."); - } else { - _vms.remove(vm); - State state = State.Stopped; - if (_vmsKilled.remove(entry.getKey())) { - s_logger.debug("VM " + vm + " has been killed by storage monitor"); - state = State.Error; - } - changes.put(entry.getKey(), state); - } - } - } - - return changes; - } - - protected State getRealPowerState(String vm) { - int i = 0; - s_logger.trace("Checking on the HALTED State"); - Domain dm = null; - for (; i < 5; i++) { - try { - Connect conn = LibvirtConnection.getConnectionByVmName(vm); - dm = conn.domainLookupByName(vm); - DomainInfo.DomainState vps = dm.getInfo().state; - if (vps != null && vps != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF && vps != DomainInfo.DomainState.VIR_DOMAIN_NOSTATE) { - return convertToState(vps); - } - } catch (final LibvirtException e) { - s_logger.trace("Ignoring libvirt error.", e); - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (final LibvirtException l) { - s_logger.trace("Ignoring libvirt error.", l); - } - } - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - s_logger.trace("Ignoring InterruptedException.", e); - } - } - return State.Stopped; - } - protected List getAllVmNames(Connect conn) { ArrayList la = new ArrayList(); try { @@ -4494,104 +4285,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return la; } - private HashMap getAllVms() { - final HashMap vmStates = new HashMap(); - Connect conn = null; - - if (_hypervisorType == HypervisorType.LXC) { - try { - conn = LibvirtConnection.getConnectionByType(HypervisorType.LXC.toString()); - vmStates.putAll(getAllVms(conn)); - conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString()); - vmStates.putAll(getAllVms(conn)); - } catch (LibvirtException e) { - s_logger.debug("Failed to get connection: " + e.getMessage()); - } - } - - if (_hypervisorType == HypervisorType.KVM) { - try { - conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString()); - vmStates.putAll(getAllVms(conn)); - } catch (LibvirtException e) { - s_logger.debug("Failed to get connection: " + e.getMessage()); - } - } - - return vmStates; - } - - private HashMap getAllVms(Connect conn) { - final HashMap vmStates = new HashMap(); - - String[] vms = null; - int[] ids = null; - - try { - ids = conn.listDomains(); - } catch (final LibvirtException e) { - s_logger.warn("Unable to listDomains", e); - return null; - } - try { - vms = conn.listDefinedDomains(); - } catch (final LibvirtException e) { - s_logger.warn("Unable to listDomains", e); - return null; - } - - Domain dm = null; - for (int i = 0; i < ids.length; i++) { - try { - dm = conn.domainLookupByID(ids[i]); - - DomainInfo.DomainState ps = dm.getInfo().state; - - final State state = convertToState(ps); - - s_logger.trace("VM " + dm.getName() + ": powerstate = " + ps + "; vm state=" + state.toString()); - String vmName = dm.getName(); - vmStates.put(vmName, state); - } catch (final LibvirtException e) { - s_logger.warn("Unable to get vms", e); - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (LibvirtException e) { - s_logger.trace("Ignoring libvirt error.", e); - } - } - } - - for (int i = 0; i < vms.length; i++) { - try { - - dm = conn.domainLookupByName(vms[i]); - - DomainInfo.DomainState ps = dm.getInfo().state; - final State state = convertToState(ps); - String vmName = dm.getName(); - s_logger.trace("VM " + vmName + ": powerstate = " + ps + "; vm state=" + state.toString()); - - vmStates.put(vmName, state); - } catch (final LibvirtException e) { - s_logger.warn("Unable to get vms", e); - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (LibvirtException e) { - s_logger.trace("Ignoring libvirt error.", e); - } - } - } - - return vmStates; - } - private HashMap getHostVmStateReport() { final HashMap vmStates = new HashMap(); Connect conn = null; @@ -4643,7 +4336,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv try { dm = conn.domainLookupByID(ids[i]); - DomainInfo.DomainState ps = dm.getInfo().state; + DomainState ps = dm.getInfo().state; final PowerState state = convertToPowerState(ps); @@ -4674,7 +4367,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv dm = conn.domainLookupByName(vms[i]); - DomainInfo.DomainState ps = dm.getInfo().state; + DomainState ps = dm.getInfo().state; final PowerState state = convertToPowerState(ps); String vmName = dm.getName(); s_logger.trace("VM " + vmName + ": powerstate = " + ps + "; vm state=" + state.toString()); @@ -4807,7 +4500,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } protected String stopVM(Connect conn, String vmName) { - DomainInfo.DomainState state = null; + DomainState state = null; Domain dm = null; s_logger.debug("Try to stop the vm at first"); @@ -4844,7 +4537,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return null; } - if (state != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF) { + if (state != DomainState.VIR_DOMAIN_SHUTOFF) { s_logger.debug("Try to destroy the vm"); ret = stopVM(conn, vmName, true); if (ret != null) { diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java index 14145025a5a..736f2eef8ee 100755 --- a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java +++ b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java @@ -134,7 +134,6 @@ import com.cloud.utils.ssh.SSHCmdHelper; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.PowerState; -import com.cloud.vm.VirtualMachine.State; public class OvmResourceBase implements ServerResource, HypervisorResource { private static final Logger s_logger = Logger.getLogger(OvmResourceBase.class); @@ -158,17 +157,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { private final Map> _vmNetworkStats = new ConcurrentHashMap>(); private static String s_ovsAgentPath = "/opt/ovs-agent-latest"; - // TODO vmsync { - static HashMap s_stateMaps; - protected HashMap _vms = new HashMap(50); - static { - s_stateMaps = new HashMap(); - s_stateMaps.put("RUNNING", State.Running); - s_stateMaps.put("DOWN", State.Stopped); - s_stateMaps.put("ERROR", State.Error); - s_stateMaps.put("SUSPEND", State.Stopped); - } - // TODO vmsync } static HashMap s_powerStateMaps; static { @@ -315,7 +303,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { //TODO: introudce PIF cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(_ip); - cmd.setHostVmStateReport(getHostVmStateReport()); String defaultBridge = OvmBridge.getBridgeByIp(_conn, _ip); if (_publicNetworkName == null) { @@ -390,12 +377,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { try { StartupRoutingCommand cmd = new StartupRoutingCommand(); fillHostInfo(cmd); - Map changes = null; - synchronized (_vms) { - _vms.clear(); - changes = sync(); - } - cmd.setStateChanges(changes); cmd.setCaps("hvm"); return new StartupCommand[] {cmd}; } catch (Exception e) { @@ -408,8 +389,7 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { public PingCommand getCurrentStatus(long id) { try { OvmHost.ping(_conn); - HashMap newStates = sync(); - return new PingRoutingCommand(getType(), id, newStates, getHostVmStateReport()); + return new PingRoutingCommand(getType(), id, getHostVmStateReport()); } catch (XmlRpcException e) { s_logger.debug("Check agent status failed", e); return null; @@ -668,13 +648,8 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { public synchronized StartAnswer execute(StartCommand cmd) { VirtualMachineTO vmSpec = cmd.getVirtualMachine(); String vmName = vmSpec.getName(); - State state = State.Stopped; OvmVm.Details vmDetails = null; try { - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } - vmDetails = new OvmVm.Details(); applySpecToVm(vmDetails, vmSpec); createVbds(vmDetails, vmSpec); @@ -691,21 +666,11 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { } } - state = State.Running; return new StartAnswer(cmd); } catch (Exception e) { s_logger.debug("Start vm " + vmName + " failed", e); cleanup(vmDetails); return new StartAnswer(cmd, e.getMessage()); - } finally { - synchronized (_vms) { - //FIXME: where to come to Stopped??? - if (state != State.Stopped) { - _vms.put(vmName, state); - } else { - _vms.remove(vmName); - } - } } } @@ -729,12 +694,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { @Override public StopAnswer execute(StopCommand cmd) { String vmName = cmd.getVmName(); - State state = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } - try { OvmVm.Details vm = null; try { @@ -747,29 +706,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { deleteAllNetworkRulesForVm(vmName); OvmVm.stop(_conn, vmName); cleanup(vm); - - state = State.Stopped; return new StopAnswer(cmd, "success", true); } catch (Exception e) { s_logger.debug("Stop " + vmName + "failed", e); return new StopAnswer(cmd, e.getMessage(), false); - } finally { - synchronized (_vms) { - if (state != null) { - _vms.put(vmName, state); - } else { - _vms.remove(vmName); - } - } } } @Override public RebootAnswer execute(RebootCommand cmd) { String vmName = cmd.getVmName(); - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } try { Map res = OvmVm.reboot(_conn, vmName); @@ -778,22 +724,9 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { } catch (Exception e) { s_logger.debug("Reboot " + vmName + " failed", e); return new RebootAnswer(cmd, e.getMessage(), false); - } finally { - synchronized (_vms) { - _vms.put(cmd.getVmName(), State.Running); - } } } - private State toState(String vmName, String s) { - State state = s_stateMaps.get(s); - if (state == null) { - s_logger.debug("Unkown state " + s + " for " + vmName); - state = State.Unknown; - } - return state; - } - private PowerState toPowerState(String vmName, String s) { PowerState state = s_powerStateMaps.get(s); if (state == null) { @@ -813,111 +746,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { return vmStates; } - protected HashMap getAllVms() throws XmlRpcException { - final HashMap vmStates = new HashMap(); + protected HashMap getAllVms() throws XmlRpcException { + final HashMap vmStates = new HashMap(); Map vms = OvmHost.getAllVms(_conn); for (final Map.Entry entry : vms.entrySet()) { - State state = toState(entry.getKey(), entry.getValue()); - vmStates.put(entry.getKey(), state); + PowerState powerState = toPowerState(entry.getKey(), entry.getValue()); + vmStates.put(entry.getKey(), powerState); } return vmStates; } - protected HashMap sync() { - HashMap newStates; - HashMap oldStates = null; - - try { - final HashMap changes = new HashMap(); - newStates = getAllVms(); - if (newStates == null) { - s_logger.debug("Unable to get the vm states so no state sync at this point."); - return null; - } - - synchronized (_vms) { - oldStates = new HashMap(_vms.size()); - oldStates.putAll(_vms); - - for (final Map.Entry entry : newStates.entrySet()) { - final String vm = entry.getKey(); - - State newState = entry.getValue(); - final State oldState = oldStates.remove(vm); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + ": ovm has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null")); - } - - /* - * TODO: what is migrating ??? if - * (vm.startsWith("migrating")) { - * s_logger.debug("Migrating from xen detected. Skipping"); - * continue; } - */ - - if (oldState == null) { - _vms.put(vm, newState); - s_logger.debug("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm); - changes.put(vm, newState); - } else if (oldState == State.Starting) { - if (newState == State.Running) { - _vms.put(vm, newState); - } else if (newState == State.Stopped) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm."); - } - } else if (oldState == State.Migrating) { - if (newState == State.Running) { - s_logger.debug("Detected that an migrating VM is now running: " + vm); - _vms.put(vm, newState); - } - } else if (oldState == State.Stopping) { - if (newState == State.Stopped) { - _vms.put(vm, newState); - } else if (newState == State.Running) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. "); - } - } else if (oldState != newState) { - _vms.put(vm, newState); - if (newState == State.Stopped) { - //TODO: need anything here? - } - changes.put(vm, newState); - } - } - - for (final Map.Entry entry : oldStates.entrySet()) { - final String vm = entry.getKey(); - final State oldState = entry.getValue(); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + " is now missing from ovm server so reporting stopped"); - } - - if (oldState == State.Stopping) { - s_logger.debug("Ignoring VM " + vm + " in transition state stopping."); - _vms.remove(vm); - } else if (oldState == State.Starting) { - s_logger.debug("Ignoring VM " + vm + " in transition state starting."); - } else if (oldState == State.Stopped) { - _vms.remove(vm); - } else if (oldState == State.Migrating) { - s_logger.debug("Ignoring VM " + vm + " in migrating state."); - } else { - _vms.remove(vm); - State state = State.Stopped; - // TODO: need anything here??? - changes.put(entry.getKey(), state); - } - } - } - - return changes; - } catch (Exception e) { - s_logger.debug("Ovm full sync failed", e); - return null; - } - } protected GetStorageStatsAnswer execute(final GetStorageStatsCommand cmd) { try { @@ -998,9 +836,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { getNetwork(nic); } - synchronized (_vms) { - _vms.put(vm.getName(), State.Migrating); - } return new PrepareForMigrationAnswer(cmd); } catch (Exception e) { s_logger.warn("Catch Exception " + e.getClass().getName() + " prepare for migration failed due to " + e.toString(), e); @@ -1010,28 +845,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { protected MigrateAnswer execute(final MigrateCommand cmd) { final String vmName = cmd.getVmName(); - State state = null; - - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } - try { OvmVm.Details vm = OvmVm.getDetails(_conn, vmName); String destIp = cmd.getDestinationIp(); OvmVm.migrate(_conn, vmName, destIp); - state = State.Stopping; cleanup(vm); return new MigrateAnswer(cmd, true, "migration succeeded", null); } catch (Exception e) { String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString(); s_logger.debug(msg, e); return new MigrateAnswer(cmd, false, msg, null); - } finally { - synchronized (_vms) { - _vms.put(vmName, state); - } } } @@ -1040,23 +863,17 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { try { Map res = OvmVm.register(_conn, vmName); Integer vncPort = Integer.parseInt(res.get("vncPort")); - HashMap states = getAllVms(); - State vmState = states.get(vmName); - if (vmState == null) { + HashMap states = getAllVms(); + PowerState vmPowerState = states.get(vmName); + if (vmPowerState == null) { s_logger.warn("Check state of " + vmName + " return null in CheckVirtualMachineCommand"); - vmState = State.Stopped; + vmPowerState = PowerState.PowerOff; } - if (vmState == State.Running) { - synchronized (_vms) { - _vms.put(vmName, State.Running); - } - } - - return new CheckVirtualMachineAnswer(cmd, vmState, vncPort); + return new CheckVirtualMachineAnswer(cmd, vmPowerState, vncPort); } catch (Exception e) { s_logger.debug("Check migration for " + vmName + " failed", e); - return new CheckVirtualMachineAnswer(cmd, State.Stopped, null); + return new CheckVirtualMachineAnswer(cmd, PowerState.PowerOff, null); } } diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java index 2d75c6deebb..d99c742ab6b 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java @@ -67,7 +67,6 @@ public class AgentRoutingResource extends AgentStorageResource { private static final Logger s_logger = Logger.getLogger(AgentRoutingResource.class); private static final Gson s_gson = GsonHelper.getGson(); - protected Map _vms = new HashMap(); private Map> _runningVms = new HashMap>(); long usedCpu = 0; long usedMem = 0; @@ -159,23 +158,12 @@ public class AgentRoutingResource extends AgentStorageResource { if (isStopped()) { return null; } - synchronized (_vms) { - if (_vms.size() == 0) { - //load vms state from database - _vms.putAll(_simMgr.getVmStates(hostGuid)); - } - } - final HashMap newStates = sync(); HashMap> nwGrpStates = _simMgr.syncNetworkGroups(hostGuid); - return new PingRoutingWithNwGroupsCommand(getType(), id, newStates, getHostVmStateReport(), nwGrpStates); + return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(), nwGrpStates); } @Override public StartupCommand[] initialize() { - synchronized (_vms) { - _vms.clear(); - } - Map changes = _simMgr.getVmStates(this.hostGuid); Map vmsMaps = _simMgr.getVms(this.hostGuid); totalCpu = agentHost.getCpuCount() * agentHost.getCpuSpeed(); totalMem = agentHost.getMemorySize(); @@ -191,7 +179,6 @@ public class AgentRoutingResource extends AgentStorageResource { StartupRoutingCommand cmd = new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), HypervisorType.Simulator, RouterPrivateIpStrategy.HostLocal); - cmd.setStateChanges(changes); Map hostDetails = new HashMap(); hostDetails.put(RouterPrivateIpStrategy.class.getCanonicalName(), RouterPrivateIpStrategy.DcGlobal.toString()); @@ -240,11 +227,6 @@ public class AgentRoutingResource extends AgentStorageResource { if (this.totalCpu < (vmSpec.getCpus() * vmSpec.getMaxSpeed() + this.usedCpu) || this.totalMem < (vmSpec.getMaxRam() + this.usedMem)) { return new StartAnswer(cmd, "Not enough resource to start the vm"); } - State state = State.Stopped; - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } - try { Answer result = _simMgr.simulate(cmd, hostGuid); if (!result.getResult()) { @@ -254,12 +236,7 @@ public class AgentRoutingResource extends AgentStorageResource { this.usedCpu += vmSpec.getCpus() * vmSpec.getMaxSpeed(); this.usedMem += vmSpec.getMaxRam(); _runningVms.put(vmName, new Pair(Long.valueOf(vmSpec.getCpus() * vmSpec.getMaxSpeed()), vmSpec.getMaxRam())); - state = State.Running; - } finally { - synchronized (_vms) { - _vms.put(vmName, state); - } } return new StartAnswer(cmd); @@ -271,11 +248,6 @@ public class AgentRoutingResource extends AgentStorageResource { StopAnswer answer = null; String vmName = cmd.getVmName(); - State state = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } try { Answer result = _simMgr.simulate(cmd, hostGuid); @@ -289,12 +261,7 @@ public class AgentRoutingResource extends AgentStorageResource { this.usedCpu -= data.first(); this.usedMem -= data.second(); } - state = State.Stopped; - } finally { - synchronized (_vms) { - _vms.put(vmName, state); - } } return answer; @@ -303,12 +270,6 @@ public class AgentRoutingResource extends AgentStorageResource { protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) { final String vmName = cmd.getVmName(); CheckVirtualMachineAnswer result = (CheckVirtualMachineAnswer)_simMgr.simulate(cmd, hostGuid); - State state = result.getState(); - if (state == State.Running) { - synchronized (_vms) { - _vms.put(vmName, State.Running); - } - } return result; } @@ -346,73 +307,6 @@ public class AgentRoutingResource extends AgentStorageResource { return report; } - protected HashMap sync() { - Map newStates; - Map oldStates = null; - - HashMap changes = new HashMap(); - - synchronized (_vms) { - oldStates = new HashMap(_vms.size()); - oldStates.putAll(_vms); - newStates = new HashMap(_vms.size()); - newStates.putAll(_vms); - - for (Map.Entry entry : newStates.entrySet()) { - String vm = entry.getKey(); - - State newState = entry.getValue(); - State oldState = oldStates.remove(vm); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + ": has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null")); - } - - if (oldState == null) { - _vms.put(vm, newState); - changes.put(vm, newState); - } else if (oldState == State.Starting) { - if (newState == State.Running) { - _vms.put(vm, newState); - } else if (newState == State.Stopped) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm."); - } - } else if (oldState == State.Stopping) { - if (newState == State.Stopped) { - _vms.put(vm, newState); - } else if (newState == State.Running) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. "); - } - } else if (oldState != newState) { - _vms.put(vm, newState); - changes.put(vm, newState); - } - } - - for (Map.Entry entry : oldStates.entrySet()) { - String vm = entry.getKey(); - State oldState = entry.getValue(); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + " is now missing from simulator agent so reporting stopped"); - } - - if (oldState == State.Stopping) { - s_logger.debug("Ignoring VM " + vm + " in transition state stopping."); - _vms.remove(vm); - } else if (oldState == State.Starting) { - s_logger.debug("Ignoring VM " + vm + " in transition state starting."); - } else if (oldState == State.Stopped) { - _vms.remove(vm); - } else { - changes.put(entry.getKey(), State.Stopped); - } - } - } - - return changes; - } - private Answer execute(ShutdownCommand cmd) { this.stopped = true; return new Answer(cmd); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 6a803af54a4..b87e4ea3785 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -269,7 +269,6 @@ import com.cloud.utils.net.NetUtils; import com.cloud.utils.ssh.SshHelper; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.PowerState; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VmDetailConstants; @@ -333,19 +332,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_powerStatesTable.put(VirtualMachinePowerState.SUSPENDED, PowerState.PowerOn); } - // TODO vmsync { - // deprecated, will delete after full replacement - // - protected static HashMap s_statesTable; - static { - s_statesTable = new HashMap(); - s_statesTable.put(VirtualMachinePowerState.POWERED_ON, State.Running); - s_statesTable.put(VirtualMachinePowerState.POWERED_OFF, State.Stopped); - s_statesTable.put(VirtualMachinePowerState.SUSPENDED, State.Stopped); - } - - // TODO vmsync } - public Gson getGson() { return _gson; } @@ -1314,11 +1300,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - // mark VM as starting state so that sync can know not to report stopped too early - synchronized (_vms) { - _vms.put(vmInternalCSName, State.Starting); - } - VmwareHypervisorHost hyperHost = getHyperHost(context); DiskTO[] disks = validateDisks(vmSpec.getDisks()); assert (disks.length > 0); @@ -1727,13 +1708,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.warn(msg, e); return new StartAnswer(cmd, msg); } finally { - synchronized (_vms) { - if (state != State.Stopped) { - _vms.put(vmInternalCSName, state); - } else { - _vms.remove(vmInternalCSName); - } - } } } @@ -2570,7 +2544,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa HashMap vmStatsMap = null; try { - HashMap newStates = getVmStates(); + HashMap vmPowerStates = getVmStates() // getVmNames should return all i-x-y values. List requestedVmNames = cmd.getVmNames(); @@ -2578,7 +2552,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (requestedVmNames != null) { for (String vmName : requestedVmNames) { - if (newStates.get(vmName) != null) { + if (vmPowerStates.get(vmName) != null) { vmNames.add(vmName); } } @@ -2653,40 +2627,25 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } - State state = null; - synchronized (_vms) { - state = _vms.get(cmd.getVmName()); - _vms.put(cmd.getVmName(), State.Stopping); - } - try { vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, "0"); if (getVmPowerState(vmMo) != PowerState.PowerOff) { if (vmMo.safePowerOff(_shutdownWaitMs)) { - state = State.Stopped; return new StopAnswer(cmd, "Stop VM " + cmd.getVmName() + " Succeed", true); } else { String msg = "Have problem in powering off VM " + cmd.getVmName() + ", let the process continue"; s_logger.warn(msg); return new StopAnswer(cmd, msg, true); } - } else { - state = State.Stopped; } String msg = "VM " + cmd.getVmName() + " is already in stopped state"; s_logger.info(msg); return new StopAnswer(cmd, msg, true); } finally { - synchronized (_vms) { - _vms.put(cmd.getVmName(), state); - } } } else { - synchronized (_vms) { - _vms.remove(cmd.getVmName()); - } String msg = "VM " + cmd.getVmName() + " is no longer in vSphere"; s_logger.info(msg); @@ -2773,7 +2732,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } final String vmName = cmd.getVmName(); - State state = State.Unknown; + PowerState powerState = PowerState.Unknown; Integer vncPort = null; VmwareContext context = getServiceContext(); @@ -2782,16 +2741,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName); if (vmMo != null) { - state = getVmState(vmMo); - if (state == State.Running) { - synchronized (_vms) { - _vms.put(vmName, State.Running); - } - } - return new CheckVirtualMachineAnswer(cmd, state, vncPort); + powerState = getVmPowerState(vmMo); + return new CheckVirtualMachineAnswer(cmd, powerState, vncPort); } else { s_logger.warn("Can not find vm " + vmName + " to execute CheckVirtualMachineCommand"); - return new CheckVirtualMachineAnswer(cmd, state, vncPort); + return new CheckVirtualMachineAnswer(cmd, powerState, vncPort); } } catch (Throwable e) { @@ -2801,7 +2755,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } s_logger.error("Unexpected exception: " + VmwareHelper.getExceptionMessage(e), e); - return new CheckVirtualMachineAnswer(cmd, state, vncPort); + return new CheckVirtualMachineAnswer(cmd, powerState, vncPort); } } @@ -2875,13 +2829,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } final String vmName = cmd.getVmName(); - - State state = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } - try { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); ManagedObjectReference morDc = hyperHost.getHyperHostDatacenter(); @@ -2905,7 +2852,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception("Migration failed"); } - state = State.Stopping; return new MigrateAnswer(cmd, true, "migration succeeded", null); } catch (Throwable e) { if (e instanceof RemoteException) { @@ -2916,10 +2862,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String msg = "MigrationCommand failed due to " + VmwareHelper.getExceptionMessage(e); s_logger.warn(msg, e); return new MigrateAnswer(cmd, false, msg, null); - } finally { - synchronized (_vms) { - _vms.put(vmName, state); - } } } @@ -2932,12 +2874,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualMachineTO vmTo = cmd.getVirtualMachine(); final String vmName = vmTo.getName(); - State state = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } - VmwareHypervisorHost srcHyperHost = null; VmwareHypervisorHost tgtHyperHost = null; VirtualMachineMO vmMo = null; @@ -3082,7 +3018,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.debug("Successfully relocated VM " + vmName + " from " + _hostName + " to " + tgtHyperHost.getHyperHostName()); } - state = State.Stopping; return new MigrateWithStorageAnswer(cmd, volumeToList); } catch (Throwable e) { if (e instanceof RemoteException) { @@ -3105,9 +3040,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } s_logger.debug("Successfully unmounted datastore " + mountedDatastore + " at " + _hostName); } - synchronized (_vms) { - _vms.put(vmName, state); - } } } @@ -3922,12 +3854,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public PingCommand getCurrentStatus(long id) { gcAndKillHungWorkerVMs(); - - HashMap newStates = sync(); - if (newStates == null) { - return null; - } - VmwareContext context = getServiceContext(); VmwareHypervisorHost hyperHost = getHyperHost(context); try { @@ -3938,7 +3864,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.error("Unexpected exception", e); return null; } - return new PingRoutingCommand(getType(), id, newStates, syncHostVmStates()); + return new PingRoutingCommand(getType(), id, syncHostVmStates()); } private void gcAndKillHungWorkerVMs() { @@ -4043,22 +3969,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa StartupRoutingCommand cmd = new StartupRoutingCommand(); fillHostInfo(cmd); - - Map changes = null; - synchronized (_vms) { - _vms.clear(); - changes = sync(); - } - cmd.setHypervisorType(HypervisorType.VMware); - - // TODO vmsync { - // deprecated after full replacement - cmd.setStateChanges(changes); - // TODO vmsync} - - cmd.setHostVmStateReport(syncHostVmStates()); - cmd.setCluster(_cluster); cmd.setHypervisorVersion(hostApiVersion); @@ -4246,114 +4157,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } - protected HashMap sync() { - HashMap changes = new HashMap(); - HashMap oldStates = null; - - try { - synchronized (_vms) { - HashMap newStates = getVmStates(); - oldStates = new HashMap(_vms.size()); - oldStates.putAll(_vms); - - for (final Map.Entry entry : newStates.entrySet()) { - final String vm = entry.getKey(); - - State newState = entry.getValue(); - final State oldState = oldStates.remove(vm); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + ": vSphere has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null")); - } - - if (vm.startsWith("migrating")) { - s_logger.debug("Migrating detected. Skipping"); - continue; - } - - if (oldState == null) { - _vms.put(vm, newState); - s_logger.debug("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm); - changes.put(vm, newState); - } else if (oldState == State.Starting) { - if (newState == State.Running) { - _vms.put(vm, newState); - } else if (newState == State.Stopped) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm."); - } - } else if (oldState == State.Migrating) { - if (newState == State.Running) { - s_logger.debug("Detected that an migrating VM is now running: " + vm); - _vms.put(vm, newState); - } - } else if (oldState == State.Stopping) { - if (newState == State.Stopped) { - _vms.put(vm, newState); - } else if (newState == State.Running) { - s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. "); - } - } else if (oldState != newState) { - _vms.put(vm, newState); - if (newState == State.Stopped) { - /* - * if (_vmsKilled.remove(vm)) { s_logger.debug("VM " + vm + " has been killed for storage. "); - * newState = State.Error; } - */ - } - changes.put(vm, newState); - } - } - - for (final Map.Entry entry : oldStates.entrySet()) { - final String vm = entry.getKey(); - final State oldState = entry.getValue(); - - if (isVmInCluster(vm)) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("VM " + vm + " is now missing from host report but we detected that it might be migrated to other host by vCenter"); - } - - if (oldState != State.Starting && oldState != State.Migrating) { - s_logger.debug("VM " + vm + - " is now missing from host report and VM is not at starting/migrating state, remove it from host VM-sync map, oldState: " + oldState); - _vms.remove(vm); - } else { - s_logger.debug("VM " + vm + " is missing from host report, but we will ignore VM " + vm + " in transition state " + oldState); - } - continue; - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("VM " + vm + " is now missing from host report"); - } - - if (oldState == State.Stopping) { - s_logger.debug("Ignoring VM " + vm + " in transition state stopping."); - _vms.remove(vm); - } else if (oldState == State.Starting) { - s_logger.debug("Ignoring VM " + vm + " in transition state starting."); - } else if (oldState == State.Stopped) { - _vms.remove(vm); - } else if (oldState == State.Migrating) { - s_logger.debug("Ignoring VM " + vm + " in migrating state."); - } else { - State state = State.Stopped; - changes.put(entry.getKey(), state); - } - } - } - } catch (Throwable e) { - if (e instanceof RemoteException) { - s_logger.warn("Encounter remote exception to vCenter, invalidate VMware session context"); - invalidateServiceContext(); - } - - s_logger.error("Unable to perform sync information collection process at this point due to " + VmwareHelper.getExceptionMessage(e), e); - return null; - } - return changes; - } - private boolean isVmInCluster(String vmName) throws Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); @@ -4515,8 +4318,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return newStates; } - // TODO vmsync { - private HashMap getVmStates() throws Exception { + + private HashMap getVmStates() throws Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); int key = ((HostMO)hyperHost).getCustomFieldKey("VirtualMachine", CustomFieldConstants.CLOUD_VM_INTERNAL_NAME); @@ -4560,7 +4363,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa name = VMInternalCSName; if (!isTemplate) { - newStates.put(name, convertState(powerState)); + newStates.put(name, convertPowerState(powerState)); } } } @@ -4568,6 +4371,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return newStates; } + + private HashMap getVmStats(List vmNames) throws Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); HashMap vmResponseMap = new HashMap(); @@ -4690,7 +4495,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return vmResponseMap; } - // TODO vmsync } protected String networkUsage(final String privateIpAddress, final String option, final String ethName) { String args = null; @@ -4788,19 +4592,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return connect(vmname, ipAddress, 3922); } - // TODO vmsync { - // deprecated after full replacement - private static State convertState(VirtualMachinePowerState powerState) { - return s_statesTable.get(powerState); - } - - public static State getVmState(VirtualMachineMO vmMo) throws Exception { - VirtualMachineRuntimeInfo runtimeInfo = vmMo.getRuntimeInfo(); - return convertState(runtimeInfo.getPowerState()); - } - - // TODO vmsync } - private static PowerState convertPowerState(VirtualMachinePowerState powerState) { return s_powerStatesTable.get(powerState); } diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java index 4fa045668f9..775f5455590 100644 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java @@ -244,7 +244,6 @@ import com.cloud.utils.ssh.SshHelper; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.PowerState; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.snapshot.VMSnapshot; /** @@ -271,7 +270,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected long _dcId; protected String _pod; protected String _cluster; - protected static final XenServerPoolVms s_vms = new XenServerPoolVms(); protected String _privateNetworkName; protected String _linkLocalPrivateNetworkName; protected String _publicNetworkName; @@ -328,29 +326,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } - protected static final HashMap s_powerStatesTable; + protected static final HashMap s_powerStatesTable; static { - s_powerStatesTable = new HashMap(); - s_powerStatesTable.put(Types.VmPowerState.HALTED, PowerState.PowerOff); - s_powerStatesTable.put(Types.VmPowerState.PAUSED, PowerState.PowerOff); - s_powerStatesTable.put(Types.VmPowerState.RUNNING, PowerState.PowerOn); - s_powerStatesTable.put(Types.VmPowerState.SUSPENDED, PowerState.PowerOff); - s_powerStatesTable.put(Types.VmPowerState.UNRECOGNIZED, PowerState.PowerUnknown); + s_powerStatesTable = new HashMap(); + s_powerStatesTable.put(VmPowerState.HALTED, PowerState.PowerOff); + s_powerStatesTable.put(VmPowerState.PAUSED, PowerState.PowerOff); + s_powerStatesTable.put(VmPowerState.RUNNING, PowerState.PowerOn); + s_powerStatesTable.put(VmPowerState.SUSPENDED, PowerState.PowerOff); + s_powerStatesTable.put(VmPowerState.UNRECOGNIZED, PowerState.PowerUnknown); } - // TODO vmsync { - protected static final HashMap s_statesTable; - static { - s_statesTable = new HashMap(); - s_statesTable.put(Types.VmPowerState.HALTED, State.Stopped); - s_statesTable.put(Types.VmPowerState.PAUSED, State.Running); - s_statesTable.put(Types.VmPowerState.RUNNING, State.Running); - s_statesTable.put(Types.VmPowerState.SUSPENDED, State.Running); - s_statesTable.put(Types.VmPowerState.UNRECOGNIZED, State.Unknown); - } - - // TODO vmsync } - public XsHost getHost() { return _host; } @@ -790,13 +775,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe VMSnapshot.Type vmSnapshotType = cmd.getTarget().getType(); Boolean snapshotMemory = vmSnapshotType == VMSnapshot.Type.DiskAndMemory; Connection conn = getConnection(); - VirtualMachine.State vmState = null; + PowerState vmState = null; VM vm = null; try { - // remove vm from s_vms, for delta sync - s_vms.remove(_cluster, _name, vmName); - Set vmSnapshots = VM.getByNameLabel(conn, cmd.getTarget().getSnapshotName()); if (vmSnapshots.size() == 0) return new RevertToVMSnapshotAnswer(cmd, false, "Cannot find vmSnapshot with name: " + cmd.getTarget().getSnapshotName()); @@ -830,10 +812,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (!snapshotMemory) { vm.destroy(conn); - vmState = VirtualMachine.State.Stopped; + vmState = PowerState.PowerOff; } else { - s_vms.put(_cluster, _name, vmName, State.Running); - vmState = VirtualMachine.State.Running; + vmState = PowerState.PowerOn; } // after revert, VM's volumes path have been changed, need to report to manager @@ -1710,7 +1691,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Connection conn = getConnection(); VirtualMachineTO vmSpec = cmd.getVirtualMachine(); String vmName = vmSpec.getName(); - State state = State.Stopped; + VmPowerState state = VmPowerState.HALTED; VM vm = null; // if a VDI is created, record its UUID to send back to the CS MS Map iqnToPath = new HashMap(); @@ -1733,9 +1714,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } } - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Starting); - } s_logger.debug("1. The VM " + vmName + " is in Starting state."); Host host = Host.getByUuid(conn, _host.uuid); @@ -1839,7 +1817,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } - state = State.Running; + state = VmPowerState.RUNNING; StartAnswer startAnswer = new StartAnswer(cmd); @@ -1856,14 +1834,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return startAnswer; } finally { - synchronized (_cluster.intern()) { - if (state != State.Stopped) { - s_vms.put(_cluster, _name, vmName, state); - s_logger.debug("2. The VM " + vmName + " is in " + state + " state."); - } else { - s_vms.remove(_cluster, _name, vmName); - s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName); - } + if (state != VmPowerState.HALTED) { + s_logger.debug("2. The VM " + vmName + " is in " + state + " state."); + } else { + s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName); } } } @@ -2575,13 +2549,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } - protected State convertToState(Types.VmPowerState ps) { - final State state = s_statesTable.get(ps); - return state == null ? State.Unknown : state; - } - - private static PowerState convertPowerState(Types.VmPowerState powerState) { - return s_powerStatesTable.get(powerState); + private static PowerState convertToPowerState(VmPowerState ps) { + final PowerState powerState = s_powerStatesTable.get(ps); + return powerState == null ? PowerState.PowerUnknown : powerState; } protected HashMap getHostVmStateReport(Connection conn) { @@ -2629,7 +2599,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (host_uuid.equalsIgnoreCase(_host.uuid)) { vmStates.put( record.nameLabel, - new HostVmStateReportEntry(convertPowerState(ps), host_uuid) + new HostVmStateReportEntry(convertToPowerState(ps), host_uuid) ); } } @@ -2638,65 +2608,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return vmStates; } - // TODO vmsync { - protected HashMap> getAllVms(Connection conn) { - final HashMap> vmStates = new HashMap>(); - Map vm_map = null; - for (int i = 0; i < 2; i++) { - try { - vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER - break; - } catch (final Throwable e) { - s_logger.warn("Unable to get vms", e); - } - try { - Thread.sleep(1000); - } catch (final InterruptedException ex) { - - } - } - - if (vm_map == null) { - return null; - } - for (VM.Record record : vm_map.values()) { - if (record.isControlDomain || record.isASnapshot || record.isATemplate) { - continue; // Skip DOM0 - } - - VmPowerState ps = record.powerState; - final State state = convertToState(ps); - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + record.nameLabel + ": powerstate = " + ps + "; vm state=" + state.toString()); - } - Host host = record.residentOn; - String host_uuid = null; - if (!isRefNull(host)) { - try { - host_uuid = host.getUuid(conn); - } catch (BadServerResponse e) { - s_logger.error("Failed to get host uuid for host " + host.toWireString(), e); - } catch (XenAPIException e) { - s_logger.error("Failed to get host uuid for host " + host.toWireString(), e); - } catch (XmlRpcException e) { - s_logger.error("Failed to get host uuid for host " + host.toWireString(), e); - } - vmStates.put(record.nameLabel, new Pair(host_uuid, state)); - } - } - - return vmStates; - } - - // TODO vmsync } - - protected State getVmState(Connection conn, final String vmName) { + protected PowerState getVmState(Connection conn, final String vmName) { int retry = 3; while (retry-- > 0) { try { Set vms = VM.getByNameLabel(conn, vmName); for (final VM vm : vms) { - return convertToState(vm.getPowerState(conn)); + return convertToPowerState(vm.getPowerState(conn)); } } catch (final BadServerResponse e) { // There is a race condition within xenserver such that if a vm is @@ -2727,22 +2645,19 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } - return State.Stopped; + return PowerState.PowerOff; } protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) { Connection conn = getConnection(); final String vmName = cmd.getVmName(); - final State state = getVmState(conn, vmName); + final PowerState powerState = getVmState(conn, vmName); Integer vncPort = null; - if (state == State.Running) { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Running); - } + if (powerState == PowerState.PowerOn) { s_logger.debug("3. The VM " + vmName + " is in Running state"); } - return new CheckVirtualMachineAnswer(cmd, state, vncPort); + return new CheckVirtualMachineAnswer(cmd, powerState, vncPort); } protected PrepareForMigrationAnswer execute(PrepareForMigrationCommand cmd) { @@ -2760,9 +2675,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe for (NicTO nic : nics) { getNetwork(conn, nic); } - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vm.getName(), State.Migrating); - } s_logger.debug("4. The VM " + vm.getName() + " is in Migrating state"); return new PrepareForMigrationAnswer(cmd); @@ -3000,14 +2912,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected MigrateAnswer execute(final MigrateCommand cmd) { Connection conn = getConnection(); final String vmName = cmd.getVmName(); - State state = null; - state = s_vms.getState(_cluster, vmName); - - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Stopping); - } - s_logger.debug("5. The VM " + vmName + " is in Stopping state"); try { Set vms = VM.getByNameLabel(conn, vmName); @@ -3037,54 +2942,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } migrateVM(conn, dsthost, vm, vmName); vm.setAffinity(conn, dsthost); - state = State.Stopping; } return new MigrateAnswer(cmd, true, "migration succeeded", null); } catch (Exception e) { String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString(); s_logger.warn(msg, e); return new MigrateAnswer(cmd, false, msg, null); - } finally { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, state); - } - s_logger.debug("6. The VM " + vmName + " is in " + state + " state"); } } - protected State getRealPowerState(Connection conn, String label) { - int i = 0; - s_logger.trace("Checking on the HALTED State"); - for (; i < 20; i++) { - try { - Set vms = VM.getByNameLabel(conn, label); - if (vms == null || vms.size() == 0) { - continue; - } - - VM vm = vms.iterator().next(); - - VmPowerState vps = vm.getPowerState(conn); - if (vps != null && vps != VmPowerState.HALTED && vps != VmPowerState.UNRECOGNIZED) { - return convertToState(vps); - } - } catch (XenAPIException e) { - String msg = "Unable to get real power state due to " + e.toString(); - s_logger.warn(msg, e); - } catch (XmlRpcException e) { - String msg = "Unable to get real power state due to " + e.getMessage(); - s_logger.warn(msg, e); - } - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - return State.Stopped; - } - protected Pair getControlDomain(Connection conn) throws XenAPIException, XmlRpcException { Host host = Host.getByUuid(conn, _host.uuid); Set vms = null; @@ -3172,9 +3039,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe @Override public RebootAnswer execute(RebootCommand cmd) { Connection conn = getConnection(); - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, cmd.getVmName(), State.Starting); - } s_logger.debug("7. The VM " + cmd.getVmName() + " is in Starting state"); try { Set vms = null; @@ -3198,9 +3062,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } return new RebootAnswer(cmd, "reboot succeeded", true); } finally { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, cmd.getVmName(), State.Running); - } s_logger.debug("8. The VM " + cmd.getVmName() + " is in Running state"); } } @@ -3342,7 +3203,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe waitForTask(conn, task, 1000, 10 * 60 * 1000); checkForSuccess(conn, task); } catch (Types.HandleInvalid e) { - if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) { + if (vm.getPowerState(conn) == VmPowerState.RUNNING) { task = null; return; } @@ -3390,7 +3251,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe waitForTask(conn, task, 1000, 10 * 60 * 1000); checkForSuccess(conn, task); } catch (TimeoutException e) { - if (vm.getPowerState(conn) == Types.VmPowerState.HALTED) { + if (vm.getPowerState(conn) == VmPowerState.HALTED) { task = null; return; } @@ -3399,19 +3260,19 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } catch (XenAPIException e) { s_logger.debug("Unable to cleanShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString()); try { - Types.VmPowerState state = vm.getPowerState(conn); - if (state == Types.VmPowerState.RUNNING) { + VmPowerState state = vm.getPowerState(conn); + if (state == VmPowerState.RUNNING) { try { vm.hardShutdown(conn); } catch (Exception e1) { s_logger.debug("Unable to hardShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString()); state = vm.getPowerState(conn); - if (state == Types.VmPowerState.RUNNING) { + if (state == VmPowerState.RUNNING) { forceShutdownVM(conn, vm); } return; } - } else if (state == Types.VmPowerState.HALTED) { + } else if (state == VmPowerState.HALTED) { return; } else { String msg = "After cleanShutdown the VM status is " + state.toString() + ", that is not expected"; @@ -3443,14 +3304,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe waitForTask(conn, task, 1000, 10 * 60 * 1000); checkForSuccess(conn, task); } catch (Types.HandleInvalid e) { - if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) { + if (vm.getPowerState(conn) == VmPowerState.RUNNING) { s_logger.debug("VM " + vmName + " is in Running status"); task = null; return; } throw new CloudRuntimeException("Start VM " + vmName + " catch HandleInvalid and VM is not in RUNNING state"); } catch (TimeoutException e) { - if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) { + if (vm.getPowerState(conn) == VmPowerState.RUNNING) { s_logger.debug("VM " + vmName + " is in Running status"); task = null; return; @@ -3593,10 +3454,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } if (vms.size() == 0) { - synchronized (_cluster.intern()) { - s_logger.info("VM does not exist on XenServer" + _host.uuid); - s_vms.remove(_cluster, _name, vmName); - } return new StopAnswer(cmd, "VM does not exist", true); } for (VM vm : vms) { @@ -3620,11 +3477,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new StopAnswer(cmd, msg, false); } - State state = s_vms.getState(_cluster, vmName); - - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Stopping); - } s_logger.debug("9. The VM " + vmName + " is in Stopping state"); try { @@ -3668,7 +3520,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe networks.add(vif.getNetwork(conn)); } vm.destroy(conn); - state = State.Stopped; SR sr = getISOSRbyVmName(conn, cmd.getVmName()); removeSR(conn, sr); // Disable any VLAN networks that aren't used @@ -3688,10 +3539,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String msg = "VM destroy failed in Stop " + vmName + " Command due to " + e.getMessage(); s_logger.warn(msg, e); } finally { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, state); - } - s_logger.debug("10. The VM " + vmName + " is in " + state + " state"); + s_logger.debug("10. The VM " + vmName + " is in Stopped state"); } } } @@ -4317,13 +4165,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } Connection conn = getConnection(); if (!_canBridgeFirewall && !_isOvs) { - return new PingRoutingCommand(getType(), id, null, getHostVmStateReport(conn)); + return new PingRoutingCommand(getType(), id, getHostVmStateReport(conn)); } else if (_isOvs) { List> ovsStates = ovsFullSyncStates(); - return new PingRoutingWithOvsCommand(getType(), id, null, getHostVmStateReport(conn), ovsStates); + return new PingRoutingWithOvsCommand(getType(), id, getHostVmStateReport(conn), ovsStates); } else { HashMap> nwGrpStates = syncNetworkGroups(conn, id); - return new PingRoutingWithNwGroupsCommand(getType(), id, null, getHostVmStateReport(conn), nwGrpStates); + return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(conn), nwGrpStates); } } catch (Exception e) { s_logger.warn("Unable to get current status", e); @@ -4581,7 +4429,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe cmd.setHypervisorType(HypervisorType.XenServer); cmd.setCluster(_cluster); cmd.setPoolSync(false); - cmd.setHostVmStateReport(getHostVmStateReport(conn)); Pool pool; try { @@ -4589,10 +4436,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Pool.Record poolr = pool.getRecord(conn); Host.Record hostr = poolr.master.getRecord(conn); - if (_host.uuid.equals(hostr.uuid)) { - HashMap> allStates = fullClusterSync(conn); - cmd.setClusterVMStateChanges(allStates); - } } catch (Throwable e) { s_logger.warn("Check for master failed, failing the FULL Cluster sync command"); } @@ -6411,7 +6254,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String vmName = cmd.getVmName(); String vmSnapshotName = cmd.getTarget().getSnapshotName(); List listVolumeTo = cmd.getVolumeTOs(); - VirtualMachine.State vmState = cmd.getVmState(); + VmPowerState vmState = VmPowerState.HALTED; String guestOSType = cmd.getGuestOSType(); String platformEmulator = cmd.getPlatformEmulator(); @@ -6446,6 +6289,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (task == null) { try { vm = getVM(conn, vmName); + vmState = vm.getPowerState(conn); } catch (Exception e) { if (!snapshotMemory) { vm = createWorkingVM(conn, vmName, guestOSType, platformEmulator, listVolumeTo); @@ -6525,7 +6369,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe vmSnapshot.destroy(conn); } } - if (vmState == VirtualMachine.State.Stopped) { + if (vmState == VmPowerState.HALTED) { if (vm != null) { vm.destroy(conn); } @@ -7193,146 +7037,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return vmMetaDatum; } - protected HashMap> fullClusterSync(Connection conn) { - synchronized (_cluster.intern()) { - s_vms.clear(_cluster); - } - try { - Map vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER - for (VM.Record record : vm_map.values()) { - if (record.isControlDomain || record.isASnapshot || record.isATemplate) { - continue; // Skip DOM0 - } - String vm_name = record.nameLabel; - VmPowerState ps = record.powerState; - final State state = convertToState(ps); - Host host = record.residentOn; - String host_uuid = null; - if (!isRefNull(host)) { - host_uuid = host.getUuid(conn); - synchronized (_cluster.intern()) { - s_vms.put(_cluster, host_uuid, vm_name, state); - } - } - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm_name + ": powerstate = " + ps + "; vm state=" + state.toString()); - } - } - } catch (final Throwable e) { - String msg = "Unable to get vms through host " + _host.uuid + " due to to " + e.toString(); - s_logger.warn(msg, e); - throw new CloudRuntimeException(msg); - } - return s_vms.getClusterVmState(_cluster); - } - - protected HashMap> deltaClusterSync(Connection conn) { - final HashMap> changes = new HashMap>(); - - synchronized (_cluster.intern()) { - HashMap> newStates = getAllVms(conn); - if (newStates == null) { - s_logger.warn("Unable to get the vm states so no state sync at this point."); - return null; - } - HashMap> oldStates = new HashMap>(s_vms.size(_cluster)); - oldStates.putAll(s_vms.getClusterVmState(_cluster)); - - for (final Map.Entry> entry : newStates.entrySet()) { - final String vm = entry.getKey(); - State newState = entry.getValue().second(); - String host_uuid = entry.getValue().first(); - final Pair oldState = oldStates.remove(vm); - - //check if host is changed - if (host_uuid != null && oldState != null) { - if (!host_uuid.equals(oldState.first()) && newState != State.Stopped && newState != State.Stopping) { - s_logger.warn("Detecting a change in host for " + vm); - changes.put(vm, new Pair(host_uuid, newState)); - - s_logger.debug("11. The VM " + vm + " is in " + newState + " state"); - s_vms.put(_cluster, host_uuid, vm, newState); - continue; - } - } - - if (newState == State.Stopped && oldState != null && oldState.second() != State.Stopping && oldState.second() != State.Stopped) { - newState = getRealPowerState(conn, vm); - } - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + ": xenserver has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null")); - } - - if (vm.startsWith("migrating")) { - s_logger.warn("Migrating from xenserver detected. Skipping"); - continue; - } - if (oldState == null) { - s_vms.put(_cluster, host_uuid, vm, newState); - s_logger.warn("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm); - changes.put(vm, new Pair(host_uuid, newState)); - } else if (oldState.second() == State.Starting) { - if (newState == State.Running) { - s_logger.debug("12. The VM " + vm + " is in " + State.Running + " state"); - s_vms.put(_cluster, host_uuid, vm, newState); - } else if (newState == State.Stopped) { - s_logger.warn("Ignoring vm " + vm + " because of a lag in starting the vm."); - } - } else if (oldState.second() == State.Migrating) { - if (newState == State.Running) { - s_logger.debug("Detected that an migrating VM is now running: " + vm); - s_vms.put(_cluster, host_uuid, vm, newState); - } - } else if (oldState.second() == State.Stopping) { - if (newState == State.Stopped) { - s_logger.debug("13. The VM " + vm + " is in " + State.Stopped + " state"); - s_vms.put(_cluster, host_uuid, vm, newState); - } else if (newState == State.Running) { - s_logger.warn("Ignoring vm " + vm + " because of a lag in stopping the vm. "); - } - } else if (oldState.second() != newState) { - s_logger.debug("14. The VM " + vm + " is in " + newState + " state was " + oldState.second()); - s_vms.put(_cluster, host_uuid, vm, newState); - if (newState == State.Stopped) { - /* - * if (s_vmsKilled.remove(vm)) { s_logger.debug("VM " + vm + " has been killed for storage. "); - * newState = State.Error; } - */ - } - changes.put(vm, new Pair(host_uuid, newState)); - } - } - - for (final Map.Entry> entry : oldStates.entrySet()) { - final String vm = entry.getKey(); - final State oldState = entry.getValue().second(); - String host_uuid = entry.getValue().first(); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm + " is now missing from xenserver so reporting stopped"); - } - - if (oldState == State.Stopping) { - s_logger.warn("Ignoring VM " + vm + " in transition state stopping."); - s_vms.remove(_cluster, host_uuid, vm); - } else if (oldState == State.Starting) { - s_logger.warn("Ignoring VM " + vm + " in transition state starting."); - } else if (oldState == State.Stopped) { - s_logger.debug("VM missing " + vm + " old state stopped so removing."); - s_vms.remove(_cluster, host_uuid, vm); - } else if (oldState == State.Migrating) { - s_logger.warn("Ignoring VM " + vm + " in migrating state."); - } else { - State newState = State.Stopped; - s_logger.warn("The VM is now missing marking it as Stopped " + vm); - changes.put(vm, new Pair(host_uuid, newState)); - } - } - } - return changes; - } - /** * @param cmd * @return diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java index e1669a58cdc..1a04f1fba66 100644 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java +++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java @@ -101,9 +101,6 @@ public class XenServer56FP1Resource extends XenServer56Resource { vdis.add(vdi); } } - synchronized (_cluster.intern()) { - s_vms.remove(_cluster, _name, vm.getNameLabel(conn)); - } s_logger.info("Fence command for VM " + cmd.getVmName()); vm.powerStateReset(conn); vm.destroy(conn); diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java index d3e17bdedd5..6f3537d1e13 100644 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java +++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java @@ -261,9 +261,6 @@ public class XenServer56Resource extends CitrixResourceBase { } Set vms = VM.getByNameLabel(conn, cmd.getVmName()); for (VM vm : vms) { - synchronized (_cluster.intern()) { - s_vms.remove(_cluster, _name, vm.getNameLabel(conn)); - } s_logger.info("Fence command for VM " + cmd.getVmName()); vm.powerStateReset(conn); vm.destroy(conn); diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java index b099c99e450..c4a00566761 100644 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java +++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java @@ -62,7 +62,6 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.resource.ServerResource; import com.cloud.storage.Volume; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.vm.VirtualMachine.State; @Local(value = ServerResource.class) public class XenServer610Resource extends XenServer602Resource { @@ -143,13 +142,8 @@ public class XenServer610Resource extends XenServer602Resource { VirtualMachineTO vmSpec = cmd.getVirtualMachine(); Map volumeToFiler = cmd.getVolumeToFiler(); final String vmName = vmSpec.getName(); - State state = s_vms.getState(_cluster, vmName); Task task = null; - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Stopping); - } - try { prepareISO(connection, vmSpec.getName()); Map other = new HashMap(); @@ -196,8 +190,6 @@ public class XenServer610Resource extends XenServer602Resource { // Volume paths would have changed. Return that information. List volumeToList = getUpdatedVolumePathsOfMigratedVm(connection, vmToMigrate, vmSpec.getDisks()); vmToMigrate.setAffinity(connection, host); - state = State.Stopping; - return new MigrateWithStorageAnswer(cmd, volumeToList); } catch (Exception e) { s_logger.warn("Catch Exception " + e.getClass().getName() + ". Storage motion failed due to " + e.toString(), e); @@ -210,10 +202,6 @@ public class XenServer610Resource extends XenServer602Resource { s_logger.debug("Unable to destroy task " + task.toString() + " on host " + _host.uuid + " due to " + e.toString()); } } - - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, state); - } } } @@ -260,15 +248,9 @@ public class XenServer610Resource extends XenServer602Resource { Map nicToNetwork = cmd.getNicToNetwork(); Map token = cmd.getToken(); final String vmName = vmSpec.getName(); - State state = s_vms.getState(_cluster, vmName); Set volumeToSet = null; boolean migrated = false; Task task = null; - - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Stopping); - } - try { Set vms = VM.getByNameLabel(connection, vmSpec.getName()); VM vmToMigrate = vms.iterator().next(); @@ -339,15 +321,6 @@ public class XenServer610Resource extends XenServer602Resource { s_logger.debug("Unable to destroy task " + task.toString() + " on host " + _host.uuid + " due to " + e.toString()); } } - - // Keep cluster/vm sync happy. - synchronized (_cluster.intern()) { - if (migrated) { - s_vms.remove(_cluster, _name, vmName); - } else { - s_vms.put(_cluster, _name, vmName, state); - } - } } } @@ -369,10 +342,6 @@ public class XenServer610Resource extends XenServer602Resource { List volumeToSet = getUpdatedVolumePathsOfMigratedVm(connection, migratedVm, vmSpec.getDisks()); migratedVm.setAffinity(connection, host); - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmSpec.getName(), State.Running); - } - return new MigrateWithStorageCompleteAnswer(cmd, volumeToSet); } catch (CloudRuntimeException e) { s_logger.error("Migration of vm " + vmSpec.getName() + " with storage failed due to " + e.toString(), e); diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java deleted file mode 100644 index 9cbf71fea8b..00000000000 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java +++ /dev/null @@ -1,92 +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 com.cloud.hypervisor.xenserver.resource; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.log4j.Logger; - -import com.cloud.utils.Pair; -import com.cloud.vm.VirtualMachine.State; - -public class XenServerPoolVms { - private static final Logger s_logger = Logger.getLogger(XenServerPoolVms.class); - private final Map>> _clusterVms = - new ConcurrentHashMap>>(); - - public HashMap> getClusterVmState(String clusterId) { - HashMap> _vms = _clusterVms.get(clusterId); - if (_vms == null) { - HashMap> vmStates = new HashMap>(); - _clusterVms.put(clusterId, vmStates); - return vmStates; - } else - return _vms; - } - - public void clear(String clusterId) { - HashMap> _vms = getClusterVmState(clusterId); - _vms.clear(); - } - - public State getState(String clusterId, String name) { - HashMap> vms = getClusterVmState(clusterId); - Pair pv = vms.get(name); - return pv == null ? State.Stopped : pv.second(); // if a VM is absent on the cluster, it is effectively in stopped state. - } - - public Pair get(String clusterId, String name) { - HashMap> vms = getClusterVmState(clusterId); - return vms.get(name); - } - - public void put(String clusterId, String hostUuid, String name, State state) { - HashMap> vms = getClusterVmState(clusterId); - vms.put(name, new Pair(hostUuid, state)); - } - - public void remove(String clusterId, String hostUuid, String name) { - HashMap> vms = getClusterVmState(clusterId); - vms.remove(name); - } - - public void putAll(String clusterId, HashMap> newVms) { - HashMap> vms = getClusterVmState(clusterId); - vms.putAll(newVms); - } - - public int size(String clusterId) { - HashMap> vms = getClusterVmState(clusterId); - return vms.size(); - } - - @Override - public String toString() { - StringBuilder sbuf = new StringBuilder("PoolVms="); - for (HashMap> clusterVM : _clusterVms.values()) { - for (Map.Entry> entry: clusterVM.entrySet()) { - String vmname = entry.getKey(); - Pair vmstate= entry.getValue(); - sbuf.append(vmname).append("-").append(vmstate.second()).append(","); - } - } - return sbuf.toString(); - } - -} diff --git a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java b/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java index def1b05c6a9..161a7b22abf 100644 --- a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java +++ b/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java @@ -40,7 +40,6 @@ import com.cloud.hypervisor.xenserver.resource.XenServer620SP1Resource; import com.cloud.utils.Pair; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineName; /** * @@ -205,99 +204,7 @@ public class XenServerResourceNewBase extends XenServer620SP1Resource { } protected void recordChanges(Connection conn, VM.Record rec, String hostUuid) { - String vm = rec.nameLabel; - if (!VirtualMachineName.isValidCloudStackVmName(vm, _instance)) { - s_logger.debug("Skipping over VMs that does not conform to CloudStack naming convention: " + vm); - return; - } - VirtualMachine.State currentState = convertToState(rec.powerState); - if (vm.startsWith("migrating")) { - s_logger.warn("Skipping " + vm + " because it is migrating."); - return; - } - - if (currentState == VirtualMachine.State.Stopped) { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Double check the power state to make sure we got the correct state for " + vm); - } - currentState = getRealPowerState(conn, vm); - } - - boolean updateMap = false; - boolean reportChange = false; - - // NOTE: For now we only record change when the VM is stopped. We don't find out any VMs starting for now. - synchronized (_cluster.intern()) { - Pair oldState = s_vms.get(_cluster, vm); - if (oldState == null) { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Unable to find " + vm + " from previous map. Assuming it was in Stopped state."); - } - oldState = new Pair(null, VirtualMachine.State.Stopped); - } - - if (s_logger.isTraceEnabled()) { - s_logger.trace(vm + ": current state=" + currentState + ", previous state=" + oldState); - } - - if (oldState.second() == VirtualMachine.State.Starting) { - if (currentState == VirtualMachine.State.Running) { - updateMap = true; - reportChange = false; - } else if (currentState == VirtualMachine.State.Stopped) { - updateMap = false; - reportChange = false; - } - } else if (oldState.second() == VirtualMachine.State.Migrating) { - updateMap = true; - reportChange = false; - } else if (oldState.second() == VirtualMachine.State.Stopping) { - if (currentState == VirtualMachine.State.Stopped) { - updateMap = true; - reportChange = false; - } else if (currentState == VirtualMachine.State.Running) { - updateMap = false; - reportChange = false; - } - } else if (oldState.second() != currentState) { - updateMap = true; - reportChange = true; - } else if (hostUuid != null && !hostUuid.equals(oldState.first())) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Detecting " + vm + " moved from " + oldState.first() + " to " + hostUuid); - } - reportChange = true; - updateMap = true; - } - - if (updateMap) { - s_vms.put(_cluster, hostUuid, vm, currentState); - if (s_logger.isTraceEnabled()) { - s_logger.trace("Updated " + vm + " to [" + hostUuid + ", " + currentState); - } - } - if (reportChange) { - Pair change = _changes.get(vm); - if (hostUuid == null) { - // This is really strange code. It looks like the sync - // code wants this to be set, which is extremely weird - // for VMs that are dead. Why would I want to set the - // hostUuid if the VM is stopped. - hostUuid = oldState.first(); - if (hostUuid == null) { - hostUuid = _host.uuid; - } - } - if (change == null) { - change = new Pair(hostUuid, currentState); - } else { - change.first(hostUuid); - change.second(currentState); - } - _changes.put(vm, change); - } - } } @Override diff --git a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java b/server/src/com/cloud/ha/CheckOnAgentInvestigator.java index 1dfe8c0d6fe..b3611992fc9 100644 --- a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java +++ b/server/src/com/cloud/ha/CheckOnAgentInvestigator.java @@ -30,7 +30,7 @@ import com.cloud.host.Host; import com.cloud.host.Status; import com.cloud.utils.component.AdapterBase; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.State; +import com.cloud.vm.VirtualMachine.PowerState; @Local(value = Investigator.class) public class CheckOnAgentInvestigator extends AdapterBase implements Investigator { @@ -57,7 +57,7 @@ public class CheckOnAgentInvestigator extends AdapterBase implements Investigato } s_logger.debug("Agent responded with state " + answer.getState().toString()); - return answer.getState() == State.Running; + return answer.getState() == PowerState.PowerOn; } catch (AgentUnavailableException e) { s_logger.debug("Unable to reach the agent for " + vm.toString() + ": " + e.getMessage()); return null; diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java index 33548c8ba0a..ee69a07acdb 100644 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java @@ -23,11 +23,9 @@ import javax.naming.ConfigurationException; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; -import com.cloud.agent.api.HostVmStateReportEntry; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.agent.api.StartupRoutingCommand.VmState; import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor; import com.cloud.resource.ServerResource; @@ -49,8 +47,7 @@ public class KvmDummyResourceBase extends ServerResourceBase implements ServerRe @Override public StartupCommand[] initialize() { StartupRoutingCommand cmd = - new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.KVM, new HashMap(), new HashMap(), - new HashMap()); + new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.KVM, new HashMap()); cmd.setDataCenter(_zoneId); cmd.setPod(_podId); cmd.setCluster(_clusterId); diff --git a/server/src/com/cloud/resource/DummyHostServerResource.java b/server/src/com/cloud/resource/DummyHostServerResource.java index 2252a81756b..41f5d3d2019 100644 --- a/server/src/com/cloud/resource/DummyHostServerResource.java +++ b/server/src/com/cloud/resource/DummyHostServerResource.java @@ -31,7 +31,6 @@ import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.net.MacAddress; -import com.cloud.vm.VirtualMachine; public class DummyHostServerResource extends ServerResourceBase { @@ -57,8 +56,7 @@ public class DummyHostServerResource extends ServerResourceBase { @Override public PingCommand getCurrentStatus(long id) { - HashMap newStates = new HashMap(); - return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, newStates, new HashMap()); + return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, new HashMap()); } @Override diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java index 54ae965d49e..7432fc486c3 100644 --- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java @@ -220,10 +220,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic VmWorkJobHandlerProxy _jobHandlerProxy = new VmWorkJobHandlerProxy(this); - // TODO - static final ConfigKey VmJobEnabled = new ConfigKey("Advanced", - Boolean.class, "vm.job.enabled", "true", - "True to enable new VM sync model. false to use the old way", false); static final ConfigKey VmJobCheckInterval = new ConfigKey("Advanced", Long.class, "vm.job.check.interval", "3000", "Interval in milliseconds to check if the job is complete", false); @@ -898,22 +894,18 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if ( jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(userVm.getId()); - } + placeHolder = createPlaceHolderWork(userVm.getId()); try { return orchestrateResizeVolume(volume.getId(), currentSize, newSize, newMinIops, newMaxIops, newDiskOffering != null ? cmd.getNewDiskOfferingId() : null, shrinkOk); } finally { - if (VmJobEnabled.value()) { - _workJobDao.expunge(placeHolder.getId()); - } + _workJobDao.expunge(placeHolder.getId()); } } else { Outcome outcome = resizeVolumeThroughJobQueue(userVm.getId(), volume.getId(), currentSize, newSize, newMinIops, newMaxIops, @@ -1328,18 +1320,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic } AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vmId); - } + placeHolder = createPlaceHolderWork(vmId); try { return orchestrateAttachVolumeToVM(vmId, volumeId, deviceId); } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { @@ -1536,17 +1525,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic } AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vmId); - } + placeHolder = createPlaceHolderWork(vmId); try { return orchestrateDetachVolumeFromVM(vmId, volumeId); } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { Outcome outcome = detachVolumeFromVmThroughJobQueue(vmId, volumeId); @@ -1733,18 +1719,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic if (vm != null) { // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vm.getId()); - } + placeHolder = createPlaceHolderWork(vm.getId()); try { return orchestrateMigrateVolume(vol.getId(), destPool.getId(), liveMigrateVolume); } finally { - if ((VmJobEnabled.value())&&(placeHolder != null)) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { @@ -1835,18 +1818,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic if (vm != null) { // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vm.getId()); - } + placeHolder = createPlaceHolderWork(vm.getId()); try { return orchestrateTakeVolumeSnapshot(volumeId, policyId, snapshotId, account, quiescevm); } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java index e46adeddd1c..c7d7a8c2131 100644 --- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java +++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java @@ -134,10 +134,6 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana int _vmSnapshotMax; int _wait; - // TODO - static final ConfigKey VmJobEnabled = new ConfigKey("Advanced", - Boolean.class, "vm.job.enabled", "true", - "True to enable new VM sync model. false to use the old way", false); static final ConfigKey VmJobCheckInterval = new ConfigKey("Advanced", Long.class, "vm.job.check.interval", "3000", "Interval in milliseconds to check if the job is complete", false); @@ -368,17 +364,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vmId); - } + placeHolder = createPlaceHolderWork(vmId); try { - return orchestrateCreateVMSnapshot(vmId, vmSnapshotId, quiescevm); + return orchestrateCreateVMSnapshot(vmId, vmSnapshotId, quiescevm); } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { @@ -466,17 +459,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vmSnapshot.getVmId()); - } + placeHolder = createPlaceHolderWork(vmSnapshot.getVmId()); try { - return orchestrateDeleteVMSnapshot(vmSnapshotId); + return orchestrateDeleteVMSnapshot(vmSnapshotId); } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { Outcome outcome = deleteVMSnapshotThroughJobQueue(vmSnapshot.getVmId(), vmSnapshotId); @@ -581,18 +571,15 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vmSnapshotVo.getVmId()); - } + placeHolder = createPlaceHolderWork(vmSnapshotVo.getVmId()); try { - return orchestrateRevertToVMSnapshot(vmSnapshotId); + return orchestrateRevertToVMSnapshot(vmSnapshotId); } finally { - if (VmJobEnabled.value()) - _workJobDao.expunge(placeHolder.getId()); + _workJobDao.expunge(placeHolder.getId()); } } else { @@ -718,16 +705,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana public boolean deleteAllVMSnapshots(long vmId, VMSnapshot.Type type) { // serialize VM operation AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); - if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { + if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) { // avoid re-entrance VmWorkJobVO placeHolder = null; - if (VmJobEnabled.value()) { - placeHolder = createPlaceHolderWork(vmId); - } + placeHolder = createPlaceHolderWork(vmId); try { - return orchestrateDeleteAllVMSnapshots(vmId, type); + return orchestrateDeleteAllVMSnapshots(vmId, type); } finally { - if ( (VmJobEnabled.value()) && (placeHolder != null)) + if (placeHolder != null) _workJobDao.expunge(placeHolder.getId()); }