Skip to content

Commit 1da76d2

Browse files
authored
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
1 parent 86939e7 commit 1da76d2

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

agent/conf/agent.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,8 @@ hypervisor.type=kvm
218218
# timer.
219219
# For all actions refer to the libvirt documentation.
220220
# Recommended values are: none, reset and poweroff.
221+
#
222+
iscsi.session.cleanup.enabled=false
223+
# Automatically clean up iscsi sessions not attached to any VM.
224+
# Should be enabled for users using managed storage for example solidfire.
225+
# Should be disabled for users with unmanaged iscsi connections on their hosts

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.apache.commons.collections.MapUtils;
6262
import org.apache.commons.io.FileUtils;
6363
import org.apache.commons.lang.ArrayUtils;
64+
import org.apache.commons.lang.BooleanUtils;
6465
import org.apache.commons.lang.math.NumberUtils;
6566
import org.apache.log4j.Logger;
6667
import org.joda.time.Duration;
@@ -1088,9 +1089,15 @@ public boolean configure(final String name, final Map<String, Object> params) th
10881089
storageProcessor.configure(name, params);
10891090
storageHandler = new StorageSubsystemCommandHandlerBase(storageProcessor);
10901091

1091-
IscsiStorageCleanupMonitor isciCleanupMonitor = new IscsiStorageCleanupMonitor();
1092-
final Thread cleanupMonitor = new Thread(isciCleanupMonitor);
1093-
cleanupMonitor.start();
1092+
Boolean _iscsiCleanUpEnabled = Boolean.parseBoolean((String)params.get("iscsi.session.cleanup.enabled"));
1093+
1094+
if (BooleanUtils.isTrue(_iscsiCleanUpEnabled)) {
1095+
IscsiStorageCleanupMonitor isciCleanupMonitor = new IscsiStorageCleanupMonitor();
1096+
final Thread cleanupMonitor = new Thread(isciCleanupMonitor);
1097+
cleanupMonitor.start();
1098+
} else {
1099+
s_logger.info("iscsi session clean up is disabled");
1100+
}
10941101

10951102
return true;
10961103
}

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiStorageCleanupMonitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class IscsiStorageCleanupMonitor implements Runnable{
3838
private static final String ISCSI_PATH_PREFIX = "/dev/disk/by-path";
3939
private static final String KEYWORD_ISCSI = "iscsi";
4040
private static final String KEYWORD_IQN = "iqn";
41+
private static final String REGEX_PART = "\\S+part\\d+$";
4142

4243
private IscsiAdmStorageAdaptor iscsiStorageAdaptor;
4344

@@ -114,7 +115,7 @@ private void updateDiskStatusMapWithInactiveIscsiSessions(Connect conn){
114115

115116
//check the volume map. If an entry exists change the status to True
116117
for (final LibvirtVMDef.DiskDef disk : disks) {
117-
if (diskStatusMap.containsKey(disk.getDiskPath())) {
118+
if (diskStatusMap.containsKey(disk.getDiskPath())&&!disk.getDiskPath().matches(REGEX_PART)) {
118119
diskStatusMap.put(disk.getDiskPath(), true);
119120
s_logger.debug("active disk found by cleanup thread" + disk.getDiskPath());
120121
}

0 commit comments

Comments
 (0)