Skip to content

Commit 3cf8eb1

Browse files
mprokopchuksureshanaparti
authored andcommitted
Add feature flag to enable/disable blocking unprepare ScaleIO storage pool when SDC client restart required and there are volumes attached to the Host
1 parent ebb6c02 commit 3cf8eb1

File tree

5 files changed

+26
-3
lines changed

5 files changed

+26
-3
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -688,8 +688,20 @@ public Pair<Boolean, String> unprepareStorageClient(String uuid, Map<String, Str
688688
if (mdmAddresses.length > 0) {
689689
if (!ScaleIOUtil.isMdmPresent(mdmAddresses[0])) {
690690
return new Pair<>(true, "MDM not added, no need to unprepare the SDC client");
691-
} else if (!ScaleIOUtil.isRemoveMdmCliSupported() && !ScaleIOUtil.getVolumeIds().isEmpty()) {
692-
return new Pair<>(false, "Failed to remove MDMs, SDC client requires service to be restarted, but there are Volumes attached to the Host");
691+
} else {
692+
String configKey =
693+
details.get(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.key());
694+
String configValue = details.get(configKey);
695+
696+
if (StringUtils.isEmpty(configValue)) {
697+
LOGGER.debug(String.format("Configuration key %s not provided", configKey));
698+
} else {
699+
LOGGER.debug(String.format("Configuration key %s provided as %s", configKey, configValue));
700+
}
701+
Boolean blockUnprepare = Boolean.valueOf(configKey);
702+
if (!ScaleIOUtil.isRemoveMdmCliSupported() && !ScaleIOUtil.getVolumeIds().isEmpty() && Boolean.TRUE.equals(blockUnprepare)) {
703+
return new Pair<>(false, "Failed to remove MDMs, SDC client requires service to be restarted, but there are Volumes attached to the Host");
704+
}
693705
}
694706

695707
ScaleIOUtil.removeMdms(mdmAddresses);

plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/ScaleIOPrimaryDataStoreLifeCycle.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ public boolean maintain(DataStore store) {
309309
Map<String,String> details = new HashMap<>();
310310
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
311311
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
312+
details.put(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.key(), String.valueOf(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.value()));
312313
StoragePoolDetailVO systemIdDetail = storagePoolDetailsDao.findDetail(store.getId(), ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID);
313314
if (systemIdDetail != null) {
314315
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemIdDetail.getValue());
@@ -332,6 +333,7 @@ public boolean cancelMaintain(DataStore store) {
332333
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemIdDetail.getValue());
333334
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
334335
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
336+
details.put(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.key(), String.valueOf(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.value()));
335337
sdcManager = ComponentContext.inject(sdcManager);
336338
if (sdcManager.areSDCConnectionsWithinLimit(store.getId())) {
337339
StoragePoolVO storagePoolVO = primaryDataStoreDao.findById(store.getId());

plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/manager/ScaleIOSDCManager.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ public interface ScaleIOSDCManager {
5050
"Flag to validate MDMs on Host, present in configuration file and in CLI, default value: false",
5151
Boolean.TRUE);
5252

53+
ConfigKey<Boolean> BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached = new ConfigKey<>("Storage",
54+
Boolean.class,
55+
"powerflex.block.sdc.unprepare.if.service.restart.needed.and.volumes.attached",
56+
Boolean.FALSE.toString(),
57+
"Block Storage Client un-preparation if SDC service restart needed but there are Volumes attached to the Host",
58+
Boolean.TRUE);
59+
5360
/**
5461
* Checks SDC connections limit.
5562
* @param storagePoolId the storage pool id

plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/manager/ScaleIOSDCManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,6 @@ public String getConfigComponentName() {
480480

481481
@Override
482482
public ConfigKey<?>[] getConfigKeys() {
483-
return new ConfigKey[]{ConnectOnDemand, MdmsChangeApplyTimeout, ValidateMdmsOnConnect};
483+
return new ConfigKey[]{ConnectOnDemand, MdmsChangeApplyTimeout, ValidateMdmsOnConnect, BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached};
484484
}
485485
}

plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/provider/ScaleIOHostListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ private String getSdcIdOfHost(HostVO host, DataStore dataStore) {
113113
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemId);
114114
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
115115
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
116+
details.put(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.key(), String.valueOf(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.value()));
116117
_sdcManager = ComponentContext.inject(_sdcManager);
117118
if (_sdcManager.areSDCConnectionsWithinLimit(poolId)) {
118119
details.put(ScaleIOSDCManager.ConnectOnDemand.key(), String.valueOf(ScaleIOSDCManager.ConnectOnDemand.valueIn(host.getDataCenterId())));
@@ -207,6 +208,7 @@ public boolean hostDisconnected(long hostId, long poolId) {
207208
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemId);
208209
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
209210
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
211+
details.put(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.key(), String.valueOf(ScaleIOSDCManager.BlockSdcUnprepareIfRestartNeededAndVolumesAreAttached.value()));
210212
_sdcManager = ComponentContext.inject(_sdcManager);
211213
if (_sdcManager.canUnprepareSDC(host, dataStore)) {
212214
details.put(ScaleIOSDCManager.ConnectOnDemand.key(), String.valueOf(ScaleIOSDCManager.ConnectOnDemand.valueIn(host.getDataCenterId())));

0 commit comments

Comments
 (0)