From 6f7c4863a2e40b05a3bd43f992bd114bae485462 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Thu, 4 Sep 2014 20:59:04 +0530 Subject: [PATCH] CLOUDSTACK-7473: Vm migration is not supported for LXC. When host is put in maintenance mode, stop the Vms instead of migrating --- .../src/com/cloud/vm/VirtualMachineManagerImpl.java | 2 +- .../hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java | 4 ++-- server/src/com/cloud/ha/KVMFencer.java | 4 ++-- server/src/com/cloud/resource/ResourceManagerImpl.java | 7 +++++-- server/src/com/cloud/storage/StorageManagerImpl.java | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 29430472626..8edef770e83 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1208,7 +1208,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac protected boolean getExecuteInSequence(HypervisorType hypervisorType) { - if (HypervisorType.KVM == hypervisorType) { + if (HypervisorType.KVM == hypervisorType || HypervisorType.LXC == hypervisorType) { return false; } else { return ExecuteInSequence.value(); diff --git a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java b/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java index 184053b9c85..e750ced7e11 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java +++ b/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java @@ -57,13 +57,13 @@ public class KVMInvestigator extends AdapterBase implements Investigator { @Override public Status isAgentAlive(Host agent) { - if (agent.getHypervisorType() != Hypervisor.HypervisorType.KVM) { + if (agent.getHypervisorType() != Hypervisor.HypervisorType.KVM && agent.getHypervisorType() != Hypervisor.HypervisorType.LXC) { return null; } CheckOnHostCommand cmd = new CheckOnHostCommand(agent); List neighbors = _resourceMgr.listHostsInClusterByStatus(agent.getClusterId(), Status.Up); for (HostVO neighbor : neighbors) { - if (neighbor.getId() == agent.getId() || neighbor.getHypervisorType() != Hypervisor.HypervisorType.KVM) { + if (neighbor.getId() == agent.getId() || (neighbor.getHypervisorType() != Hypervisor.HypervisorType.KVM && neighbor.getHypervisorType() != Hypervisor.HypervisorType.LXC)) { continue; } try { diff --git a/server/src/com/cloud/ha/KVMFencer.java b/server/src/com/cloud/ha/KVMFencer.java index 516a579a093..7392dffc3e3 100755 --- a/server/src/com/cloud/ha/KVMFencer.java +++ b/server/src/com/cloud/ha/KVMFencer.java @@ -74,7 +74,7 @@ public class KVMFencer extends AdapterBase implements FenceBuilder { @Override public Boolean fenceOff(VirtualMachine vm, Host host) { - if (host.getHypervisorType() != HypervisorType.KVM) { + if (host.getHypervisorType() != HypervisorType.KVM && host.getHypervisorType() != HypervisorType.LXC) { s_logger.debug("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } @@ -83,7 +83,7 @@ public class KVMFencer extends AdapterBase implements FenceBuilder { FenceCommand fence = new FenceCommand(vm, host); for (HostVO h : hosts) { - if (h.getHypervisorType() == HypervisorType.KVM) { + if (h.getHypervisorType() == HypervisorType.KVM || h.getHypervisorType() == HypervisorType.LXC) { if (h.getStatus() != Status.Up) { continue; } diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 3405f99c64a..242063e6ce1 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -1195,6 +1195,9 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, if (hosts == null || hosts.isEmpty() || !answer.getMigrate()) { // for the last host in this cluster, stop all the VMs _haMgr.scheduleStop(vm, hostId, WorkType.ForceStop); + } else if (HypervisorType.LXC.equals(host.getHypervisorType())){ + //Stop LXC Vms. LXC doesn't support migration + _haMgr.scheduleStop(vm, hostId, WorkType.Stop); } else { _haMgr.scheduleMigration(vm); } @@ -2092,7 +2095,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, _agentMgr.pullAgentOutMaintenance(hostId); // for kvm, need to log into kvm host, restart cloudstack-agent - if (host.getHypervisorType() == HypervisorType.KVM) { + if (host.getHypervisorType() == HypervisorType.KVM || host.getHypervisorType() == HypervisorType.LXC) { boolean sshToAgent = Boolean.parseBoolean(_configDao.getValue(Config.KvmSshToAgentEnabled.key())); if (!sshToAgent) { @@ -2166,7 +2169,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, return true; } - if (host.getHypervisorType() == HypervisorType.KVM) { + if (host.getHypervisorType() == HypervisorType.KVM || host.getHypervisorType() == HypervisorType.LXC) { MaintainAnswer answer = (MaintainAnswer)_agentMgr.easySend(hostId, new MaintainCommand()); } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index c1e6be2567d..153c25afda1 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -641,7 +641,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C } else { throw new InvalidParameterValueException("Missing parameter hypervisor. Hypervisor type is required to create zone wide primary storage."); } - if (hypervisorType != HypervisorType.KVM && hypervisorType != HypervisorType.VMware && hypervisorType != HypervisorType.Hyperv && hypervisorType != HypervisorType.Any) { + if (hypervisorType != HypervisorType.KVM && hypervisorType != HypervisorType.VMware && hypervisorType != HypervisorType.Hyperv && hypervisorType != HypervisorType.LXC && hypervisorType != HypervisorType.Any) { throw new InvalidParameterValueException("zone wide storage pool is not supported for hypervisor type " + hypervisor); } }