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

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


The following commit(s) were added to refs/heads/4.13 by this push:
     new 1da76d2  iscsi session cleanup now configurable, filters iscsi 
partitions (#4219)
1da76d2 is described below

commit 1da76d27f13e045ac88e6c494d604d6133486c9c
Author: Sid Kattoju <[email protected]>
AuthorDate: Fri Aug 21 05:08:36 2020 -0400

    iscsi session cleanup now configurable, filters iscsi partitions (#4219)
    
    Added property to agent.properties that enables or disables the iscsi 
session clean up feature. #4210
    Added a condition to prevent disk partitions from being cleaned up. #4216
---
 agent/conf/agent.properties                                 |  5 +++++
 .../hypervisor/kvm/resource/LibvirtComputingResource.java   | 13 ++++++++++---
 .../hypervisor/kvm/storage/IscsiStorageCleanupMonitor.java  |  3 ++-
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties
index b45526a..426c701 100644
--- a/agent/conf/agent.properties
+++ b/agent/conf/agent.properties
@@ -218,3 +218,8 @@ hypervisor.type=kvm
 # timer.
 # For all actions refer to the libvirt documentation.
 # Recommended values are: none, reset and poweroff.
+#
+iscsi.session.cleanup.enabled=false
+# Automatically clean up iscsi sessions not attached to any VM.
+# Should be enabled for users using managed storage for example solidfire.
+# Should be disabled for users with unmanaged iscsi connections on their hosts
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 950dffa..580d628 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
@@ -61,6 +61,7 @@ import org.apache.cloudstack.utils.security.KeyStoreUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.BooleanUtils;
 import org.apache.commons.lang.math.NumberUtils;
 import org.apache.log4j.Logger;
 import org.joda.time.Duration;
@@ -1088,9 +1089,15 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
         storageProcessor.configure(name, params);
         storageHandler = new 
StorageSubsystemCommandHandlerBase(storageProcessor);
 
-        IscsiStorageCleanupMonitor isciCleanupMonitor = new 
IscsiStorageCleanupMonitor();
-        final Thread cleanupMonitor = new Thread(isciCleanupMonitor);
-        cleanupMonitor.start();
+        Boolean _iscsiCleanUpEnabled = 
Boolean.parseBoolean((String)params.get("iscsi.session.cleanup.enabled"));
+
+        if (BooleanUtils.isTrue(_iscsiCleanUpEnabled)) {
+            IscsiStorageCleanupMonitor isciCleanupMonitor = new 
IscsiStorageCleanupMonitor();
+            final Thread cleanupMonitor = new Thread(isciCleanupMonitor);
+            cleanupMonitor.start();
+        } else {
+            s_logger.info("iscsi session clean up is disabled");
+        }
 
         return true;
     }
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiStorageCleanupMonitor.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiStorageCleanupMonitor.java
index e5ce6bbd..c8a5fc8 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiStorageCleanupMonitor.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiStorageCleanupMonitor.java
@@ -38,6 +38,7 @@ public class IscsiStorageCleanupMonitor implements Runnable{
     private static final String ISCSI_PATH_PREFIX = "/dev/disk/by-path";
     private static final String KEYWORD_ISCSI = "iscsi";
     private static final String KEYWORD_IQN = "iqn";
+    private static final String REGEX_PART = "\\S+part\\d+$";
 
     private IscsiAdmStorageAdaptor iscsiStorageAdaptor;
 
@@ -114,7 +115,7 @@ public class IscsiStorageCleanupMonitor implements Runnable{
 
                     //check the volume map. If an entry exists change the 
status to True
                     for (final LibvirtVMDef.DiskDef disk : disks) {
-                        if (diskStatusMap.containsKey(disk.getDiskPath())) {
+                        if 
(diskStatusMap.containsKey(disk.getDiskPath())&&!disk.getDiskPath().matches(REGEX_PART))
 {
                             diskStatusMap.put(disk.getDiskPath(), true);
                             s_logger.debug("active disk found by cleanup 
thread" + disk.getDiskPath());
                         }

Reply via email to