Updated Branches: refs/heads/master 2feda05ec -> 8d7d1cd56
Summary: KVM - undefine persistent VMs on stop Detail: A previous patch fixed an issue where we are defining VMs to persist locally on KVM hosts, which can cause issues if the agent isn't running and libvirt decides to start the VM unbeknownst to cloudstack. The previous patch stopped defining VMs as persistent. This patch adds compatibility for existing cloudstack environments, removing the persistent definition on stop if needed. BUG-ID: CLOUDSTACK-600 Signed-off-by: Marcus Sorensen <[email protected]> 1363194656 -0600 Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/8d7d1cd5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/8d7d1cd5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/8d7d1cd5 Branch: refs/heads/master Commit: 8d7d1cd5623a6744a954fb35eeff8408d6381083 Parents: 2feda05 Author: Marcus Sorensen <[email protected]> Authored: Wed Mar 13 11:10:56 2013 -0600 Committer: Marcus Sorensen <[email protected]> Committed: Wed Mar 13 11:10:56 2013 -0600 ---------------------------------------------------------------------- .../kvm/resource/LibvirtComputingResource.java | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8d7d1cd5/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java ---------------------------------------------------------------------- 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 0a25bab..af4ae37 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 @@ -3937,9 +3937,13 @@ ServerResource { try { dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName .getBytes())); + int persist = dm.isPersistent(); if (force) { if (dm.getInfo().state != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF) { dm.destroy(); + if (persist == 1) { + dm.undefine(); + } } } else { if (dm.getInfo().state == DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF) { @@ -3957,6 +3961,10 @@ ServerResource { s_logger.warn("Timed out waiting for domain " + vmName + " to shutdown gracefully"); return Script.ERR_TIMEOUT; + } else { + if (persist == 1) { + dm.undefine(); + } } } } catch (LibvirtException e) {
