This is an automated email from the ASF dual-hosted git repository.

sureshanaparti pushed a commit to branch 4.16
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.16 by this push:
     new 027e603  [KVM] Disconnect the volumes with the proper storage adaptor. 
(#6029)
027e603 is described below

commit 027e6030aff74fd4fdf7d031251d2289c7541e8b
Author: Suresh Kumar Anaparti <[email protected]>
AuthorDate: Wed Feb 23 22:40:14 2022 +0530

    [KVM] Disconnect the volumes with the proper storage adaptor. (#6029)
    
    * [KVM] Disconnect the volumes with the proper storage adaptor.
    
    * Improved / Added logs
---
 .../java/com/cloud/vm/VirtualMachineManagerImpl.java |  2 +-
 .../kvm/resource/LibvirtComputingResource.java       |  2 +-
 .../kvm/storage/IscsiAdmStorageAdaptor.java          |  6 ------
 .../kvm/storage/KVMStoragePoolManager.java           | 20 ++++++++++++++++++++
 .../kvm/storage/LinstorStorageAdaptor.java           |  5 ++---
 .../kvm/storage/ScaleIOStorageAdaptor.java           |  4 ++--
 6 files changed, 26 insertions(+), 13 deletions(-)

diff --git 
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
 
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index 2fa44b1..e090955 100755
--- 
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
+++ 
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1681,7 +1681,7 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
             StoragePoolVO storagePool = 
_storagePoolDao.findById(volume.getPoolId());
 
             if (storagePool != null && storagePool.isManaged()) {
-                Map<String, String> info = new HashMap<>(3);
+                Map<String, String> info = new HashMap<>();
 
                 info.put(DiskTO.STORAGE_HOST, storagePool.getHostAddress());
                 info.put(DiskTO.STORAGE_PORT, 
String.valueOf(storagePool.getPort()));
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 60d8e08..cdcbf24 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -3024,7 +3024,7 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
     public boolean cleanupDisk(final DiskDef disk) {
         final String path = disk.getDiskPath();
 
-        if (path == null) {
+        if (org.apache.commons.lang.StringUtils.isBlank(path)) {
             s_logger.debug("Unable to clean up disk with null path (perhaps 
empty cdrom drive):" + disk);
             return false;
         }
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
index fb89683..389a2c7 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
@@ -331,12 +331,6 @@ public class IscsiAdmStorageAdaptor implements 
StorageAdaptor {
 
     @Override
     public boolean disconnectPhysicalDisk(Map<String, String> 
volumeToDisconnect) {
-        String poolType = volumeToDisconnect.get(DiskTO.PROTOCOL_TYPE);
-        // Unsupported pool types
-        if (poolType != null && 
poolType.equalsIgnoreCase(StoragePoolType.PowerFlex.toString())) {
-            return false;
-        }
-
         String host = volumeToDisconnect.get(DiskTO.STORAGE_HOST);
         String port = volumeToDisconnect.get(DiskTO.STORAGE_PORT);
         String path = volumeToDisconnect.get(DiskTO.IQN);
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
index 77579c4..d6c49d2 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
@@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
 import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+import org.apache.commons.collections.MapUtils;
 import org.apache.log4j.Logger;
 import org.reflections.Reflections;
 
@@ -165,10 +166,27 @@ public class KVMStoragePoolManager {
     }
 
     public boolean disconnectPhysicalDisk(Map<String, String> 
volumeToDisconnect) {
+        s_logger.debug(String.format("Disconnect physical disks using volume 
map: %s", volumeToDisconnect.toString()));
+        if (MapUtils.isEmpty(volumeToDisconnect)) {
+            return false;
+        }
+
+        if (volumeToDisconnect.get(DiskTO.PROTOCOL_TYPE) != null) {
+            String poolType = volumeToDisconnect.get(DiskTO.PROTOCOL_TYPE);
+            StorageAdaptor adaptor = _storageMapper.get(poolType);
+            if (adaptor != null) {
+                s_logger.info(String.format("Disconnecting physical disk using 
the storage adaptor found for pool type: %s", poolType));
+                return adaptor.disconnectPhysicalDisk(volumeToDisconnect);
+            }
+
+            s_logger.debug(String.format("Couldn't find the storage adaptor 
for pool type: %s to disconnect the physical disk, trying with others", 
poolType));
+        }
+
         for (Map.Entry<String, StorageAdaptor> set : 
_storageMapper.entrySet()) {
             StorageAdaptor adaptor = set.getValue();
 
             if (adaptor.disconnectPhysicalDisk(volumeToDisconnect)) {
+                s_logger.debug(String.format("Disconnected physical disk using 
the storage adaptor for pool type: %s", set.getKey()));
                 return true;
             }
         }
@@ -177,10 +195,12 @@ public class KVMStoragePoolManager {
     }
 
     public boolean disconnectPhysicalDiskByPath(String path) {
+        s_logger.debug(String.format("Disconnect physical disk by path: %s", 
path));
         for (Map.Entry<String, StorageAdaptor> set : 
_storageMapper.entrySet()) {
             StorageAdaptor adaptor = set.getValue();
 
             if (adaptor.disconnectPhysicalDiskByPath(path)) {
+                s_logger.debug(String.format("Disconnected physical disk by 
local path: %s, using the storage adaptor for pool type: %s", path, 
set.getKey()));
                 return true;
             }
         }
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LinstorStorageAdaptor.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LinstorStorageAdaptor.java
index 24e4d46..dc00601 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LinstorStorageAdaptor.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LinstorStorageAdaptor.java
@@ -288,8 +288,7 @@ public class LinstorStorageAdaptor implements 
StorageAdaptor {
     @Override
     public boolean disconnectPhysicalDisk(Map<String, String> 
volumeToDisconnect)
     {
-        s_logger.debug("Linstor: disconnectPhysicalDisk map");
-        return true;
+        return false;
     }
 
     private Optional<ResourceWithVolumes> getResourceByPath(final 
List<ResourceWithVolumes> resources, String path) {
@@ -309,10 +308,10 @@ public class LinstorStorageAdaptor implements 
StorageAdaptor {
     @Override
     public boolean disconnectPhysicalDiskByPath(String localPath)
     {
-        s_logger.debug("Linstor: disconnectPhysicalDiskByPath " + localPath);
         // get first storage pool from the map, as we don't know any better:
         if (!MapStorageUuidToStoragePool.isEmpty())
         {
+            s_logger.debug("Linstor: disconnectPhysicalDiskByPath " + 
localPath);
             String firstKey = 
MapStorageUuidToStoragePool.keySet().stream().findFirst().get();
             final KVMStoragePool pool = 
MapStorageUuidToStoragePool.get(firstKey);
 
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java
index 4103d76..59eaab0 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java
@@ -214,12 +214,12 @@ public class ScaleIOStorageAdaptor implements 
StorageAdaptor {
 
     @Override
     public boolean disconnectPhysicalDisk(Map<String, String> 
volumeToDisconnect) {
-        return true;
+        return false;
     }
 
     @Override
     public boolean disconnectPhysicalDiskByPath(String localPath) {
-        return true;
+        return false;
     }
 
     @Override

Reply via email to