diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 24f0795fcc1..3829336d28b 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1203,10 +1203,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } catch (AgentUnavailableException e) { s_logger.warn("Unable to stop vm, agent unavailable: " + e.toString()); - throw e; + if (!forced) { + throw e; + } } catch (OperationTimedoutException e) { s_logger.warn("Unable to stop vm, operation timed out: " + e.toString()); - throw e; + if (!forced) { + throw e; + } } finally { if (!stopped) { if (!cleanUpEvenIfUnableToStop) { diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index eab79b85f2b..28142ea701c 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -518,6 +518,7 @@ public class VolumeServiceImpl implements VolumeService { if (result.isSuccess()) { vo.processEvent(Event.OperationSuccessed, result.getAnswer()); } else { + vo.processEvent(Event.OperationFailed); volResult.setResult(result.getResult()); // hack for Vmware: host is down, previously download template to the host needs to be re-downloaded, so we need to reset diff --git a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java b/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java index 4d83d099e78..e173f32bdd5 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java +++ b/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java @@ -58,15 +58,19 @@ public class KVMInvestigator extends AdapterBase implements Investigator { return null; } CheckOnHostCommand cmd = new CheckOnHostCommand(agent); - List neighbors = _resourceMgr.listAllHostsInCluster(agent.getClusterId()); + List neighbors = _resourceMgr.listHostsInClusterByStatus(agent.getClusterId(), Status.Up); for (HostVO neighbor : neighbors) { if (neighbor.getId() == agent.getId() || neighbor.getHypervisorType() != Hypervisor.HypervisorType.KVM) { continue; } - Answer answer = _agentMgr.easySend(neighbor.getId(), cmd); - - return answer.getResult() ? Status.Down : Status.Up; - + try { + Answer answer = _agentMgr.easySend(neighbor.getId(), cmd); + if (answer != null) { + return answer.getResult() ? Status.Down : Status.Up; + } + } catch (Exception e) { + s_logger.debug("Failed to send command to host: " + neighbor.getId()); + } } return null;