You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2014/03/01 00:37:25 UTC
[05/33] git commit: updated refs/heads/master to 90262a8
process the missing power report of a VM that exists in CloudStack but not in hypervisor
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5d732177
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5d732177
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5d732177
Branch: refs/heads/master
Commit: 5d73217723571c78aaef8e3cf36f4666749737ad
Parents: fda7219
Author: Kelven Yang <ke...@gmail.com>
Authored: Thu Jan 23 17:43:28 2014 -0800
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Feb 28 15:35:57 2014 -0800
----------------------------------------------------------------------
api/src/com/cloud/vm/VirtualMachine.java | 7 ++++--
.../com/cloud/vm/VirtualMachineManagerImpl.java | 3 ++-
.../vm/VirtualMachinePowerStateSyncImpl.java | 25 ++++++++++++++++++++
3 files changed, 32 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d732177/api/src/com/cloud/vm/VirtualMachine.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java
index d6e70a8..2d98aa9 100755
--- a/api/src/com/cloud/vm/VirtualMachine.java
+++ b/api/src/com/cloud/vm/VirtualMachine.java
@@ -33,8 +33,11 @@ import com.cloud.utils.fsm.StateObject;
*/
public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, InternalIdentity, StateObject<VirtualMachine.State> {
- public enum PowerState {
- PowerUnknown, PowerOn, PowerOff,
+ public enum PowerState {
+ PowerUnknown,
+ PowerOn,
+ PowerOff,
+ PowerReportMissing
}
public enum State {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d732177/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 1b0d6ca..f944d7e 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -3974,6 +3974,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
break;
case PowerOff:
+ case PowerReportMissing:
handlePowerOffReportWithNoPendingJobsOnVM(vm);
break;
@@ -4094,7 +4095,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
VM_SYNC_ALERT_SUBJECT, "VM " + vm.getHostName() + "(" + vm.getInstanceName() + ") state is sync-ed (" + vm.getState()
+ " -> Stopped) from out-of-context transition.");
- s_logger.info("VM " + vm.getInstanceName() + " is sync-ed to at Stopped state according to power-on report from hypervisor");
+ s_logger.info("VM " + vm.getInstanceName() + " is sync-ed to at Stopped state according to power-off report from hypervisor");
// TODO: we need to forcely release all resource allocation
break;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5d732177/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
index 453890c..fd0077c 100644
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
@@ -17,6 +17,7 @@
package com.cloud.vm;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.inject.Inject;
@@ -78,6 +79,30 @@ public class VirtualMachinePowerStateSyncImpl implements VirtualMachinePowerStat
} else {
if (s_logger.isDebugEnabled())
s_logger.debug("VM power state does not change, skip DB writing. vm id: " + entry.getKey());
+ }
+ }
+
+ // for all running/stopping VMs, we provide monitoring of missing report
+ List<VMInstanceVO> vmsThatAreMissingReport = _instanceDao.findByHostInStates(hostId, VirtualMachine.State.Running,
+ VirtualMachine.State.Stopping);
+ java.util.Iterator<VMInstanceVO> it = vmsThatAreMissingReport.iterator();
+ while (it.hasNext()) {
+ VMInstanceVO instance = it.next();
+ if (translatedInfo.get(instance.getId()) != null)
+ it.remove();
+ }
+
+ if (vmsThatAreMissingReport.size() > 0) {
+ for (VMInstanceVO instance : vmsThatAreMissingReport) {
+ if (_instanceDao.updatePowerState(instance.getId(), hostId, VirtualMachine.PowerState.PowerReportMissing)) {
+ if (s_logger.isDebugEnabled())
+ s_logger.debug("VM state report is updated. host: " + hostId + ", vm id: " + instance.getId() + ", power state: PowerReportMissing ");
+
+ _messageBus.publish(null, VirtualMachineManager.Topics.VM_POWER_STATE, PublishScope.GLOBAL, instance.getId());
+ } else {
+ if (s_logger.isDebugEnabled())
+ s_logger.debug("VM power state does not change, skip DB writing. vm id: " + instance.getId());
+ }
}
}
}