You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ki...@apache.org on 2014/08/26 10:40:25 UTC

git commit: updated refs/heads/master to 30ecf93

Repository: cloudstack
Updated Branches:
  refs/heads/master 9ab78b7eb -> 30ecf935e


CLOUDSTACK-7315: Set LXC volumes format as DIR. Use rm command to delete LXC volumes. Libvirt delete volume does not handle directories


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/30ecf935
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/30ecf935
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/30ecf935

Branch: refs/heads/master
Commit: 30ecf935e8f49c4b403113c45249896c859b7927
Parents: 9ab78b7
Author: Kishan Kavala <ki...@apache.org>
Authored: Tue Aug 26 13:57:14 2014 +0530
Committer: Kishan Kavala <ki...@apache.org>
Committed: Tue Aug 26 13:57:48 2014 +0530

----------------------------------------------------------------------
 api/src/com/cloud/storage/Storage.java                   |  3 ++-
 .../kvm/resource/LibvirtComputingResource.java           |  3 +--
 .../hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java   |  2 +-
 .../hypervisor/kvm/storage/IscsiAdmStoragePool.java      |  4 ++--
 .../com/cloud/hypervisor/kvm/storage/KVMStoragePool.java |  2 +-
 .../hypervisor/kvm/storage/KVMStorageProcessor.java      |  4 +++-
 .../hypervisor/kvm/storage/LibvirtStorageAdaptor.java    | 11 +++++++++--
 .../cloud/hypervisor/kvm/storage/LibvirtStoragePool.java |  4 ++--
 .../com/cloud/hypervisor/kvm/storage/StorageAdaptor.java |  2 +-
 9 files changed, 22 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/api/src/com/cloud/storage/Storage.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java
index cc8d010..4d267eb 100755
--- a/api/src/com/cloud/storage/Storage.java
+++ b/api/src/com/cloud/storage/Storage.java
@@ -32,7 +32,8 @@ public class Storage {
         BAREMETAL(false, false, false, "BAREMETAL"),
         VMDK(true, true, false, "vmdk"),
         VDI(true, true, false, "vdi"),
-        TAR(false, false, false, "tar");
+        TAR(false, false, false, "tar"),
+        DIR(false, false, false, "dir");
 
         private final boolean supportThinProvisioning;
         private final boolean supportSparse;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/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 f6fe75c..8e30d97 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
@@ -1908,10 +1908,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
 
     public Answer execute(DestroyCommand cmd) {
         VolumeTO vol = cmd.getVolume();
-
         try {
             KVMStoragePool pool = _storagePoolMgr.getStoragePool(vol.getPoolType(), vol.getPoolUuid());
-            pool.deletePhysicalDisk(vol.getPath());
+            pool.deletePhysicalDisk(vol.getPath(), null);
             return new Answer(cmd, true, "Success");
         } catch (CloudRuntimeException e) {
             s_logger.debug("Failed to delete volume: " + e.toString());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
index fbbdd7a..2ea17e7 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
@@ -327,7 +327,7 @@ public class IscsiAdmStorageAdaptor implements StorageAdaptor {
     }
 
     @Override
-    public boolean deletePhysicalDisk(String volumeUuid, KVMStoragePool pool) {
+    public boolean deletePhysicalDisk(String volumeUuid, KVMStoragePool pool, Storage.ImageFormat format) {
         throw new UnsupportedOperationException("Deleting a physical disk is not supported.");
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
index 81cd5bb..865dfab 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
@@ -115,8 +115,8 @@ public class IscsiAdmStoragePool implements KVMStoragePool {
     }
 
     @Override
-    public boolean deletePhysicalDisk(String volumeUuid) {
-        return this._storageAdaptor.deletePhysicalDisk(volumeUuid, this);
+    public boolean deletePhysicalDisk(String volumeUuid, Storage.ImageFormat format) {
+        return this._storageAdaptor.deletePhysicalDisk(volumeUuid, this, format);
     }
 
     // does not apply for iScsiAdmStoragePool

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
index 83370f8..be7a8b0 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
@@ -35,7 +35,7 @@ public interface KVMStoragePool {
 
     public boolean disconnectPhysicalDisk(String volumeUuid);
 
-    public boolean deletePhysicalDisk(String volumeUuid);
+    public boolean deletePhysicalDisk(String volumeUuid, Storage.ImageFormat format);
 
     public List<KVMPhysicalDisk> listPhysicalDisks();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 42a0204..6b7a195 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -347,6 +347,8 @@ public class KVMStorageProcessor implements StorageProcessor {
                 newVol.setFormat(ImageFormat.RAW);
             } else if (vol.getFormat() == PhysicalDiskFormat.QCOW2) {
                 newVol.setFormat(ImageFormat.QCOW2);
+            } else if (vol.getFormat() == PhysicalDiskFormat.DIR) {
+                newVol.setFormat(ImageFormat.DIR);
             }
 
             return new CopyCmdAnswer(newVol);
@@ -1203,7 +1205,7 @@ public class KVMStorageProcessor implements StorageProcessor {
                 s_logger.debug("can't find volume: " + vol.getPath() + ", return true");
                 return new Answer(null);
             }
-            pool.deletePhysicalDisk(vol.getPath());
+            pool.deletePhysicalDisk(vol.getPath(), vol.getFormat());
             return new Answer(null);
         } catch (CloudRuntimeException e) {
             s_logger.debug("Failed to delete volume: ", e);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index 90608c2..e99d7fa 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -796,7 +796,7 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
     }
 
     @Override
-    public boolean deletePhysicalDisk(String uuid, KVMStoragePool pool) {
+    public boolean deletePhysicalDisk(String uuid, KVMStoragePool pool, Storage.ImageFormat format) {
 
         s_logger.info("Attempting to remove volume " + uuid + " from pool " + pool.getUuid());
 
@@ -849,7 +849,11 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         try {
             StorageVol vol = getVolume(libvirtPool.getPool(), uuid);
             s_logger.debug("Instructing libvirt to remove volume " + uuid + " from pool " + pool.getUuid());
-            deleteVol(libvirtPool, vol);
+            if(Storage.ImageFormat.DIR.equals(format)){
+                deleteDirVol(libvirtPool, vol);
+            } else {
+                deleteVol(libvirtPool, vol);
+            }
             vol.free();
             return true;
         } catch (LibvirtException e) {
@@ -1315,4 +1319,7 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         vol.delete(0);
     }
 
+    private void deleteDirVol(LibvirtStoragePool pool, StorageVol vol) throws LibvirtException {
+        Script.runSimpleBashScript("rm -r --interactive=never " + vol.getPath());
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
index 702816e..1a756cb 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
@@ -171,8 +171,8 @@ public class LibvirtStoragePool implements KVMStoragePool {
     }
 
     @Override
-    public boolean deletePhysicalDisk(String uuid) {
-        return this._storageAdaptor.deletePhysicalDisk(uuid, this);
+    public boolean deletePhysicalDisk(String uuid, Storage.ImageFormat format) {
+        return this._storageAdaptor.deletePhysicalDisk(uuid, this, format);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/30ecf935/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
index ff14148..38ee3e6 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
@@ -49,7 +49,7 @@ public interface StorageAdaptor {
     // handled by your adaptor, return false if not. 2) clean up device, return true
     public boolean disconnectPhysicalDiskByPath(String localPath);
 
-    public boolean deletePhysicalDisk(String uuid, KVMStoragePool pool);
+    public boolean deletePhysicalDisk(String uuid, KVMStoragePool pool, Storage.ImageFormat format);
 
     public KVMPhysicalDisk createDiskFromTemplate(KVMPhysicalDisk template,
             String name, PhysicalDiskFormat format, Storage.ProvisioningType provisioningType, long size,