Skip to content

Commit ebb6c02

Browse files
mprokopchuksureshanaparti
authored andcommitted
Cumulative enhancements fix for ScaleIO: MDM add/remove, Host prepare/unprepare, validate Storage Pool can be created in Agent.
- Implemented validation to fail Host disconnect from Storage Pool if there are Volumes attached and SDC client MDM removal requires scini service to be restarted - Implemented Storage Pool validation by checking whether MDM addresses from configuration file and from memory (using CLI) matches, otherwise file ModifyStoragePool command. - Introduced configuration key to apply timeout after making MDM changes for ScaleIO: powerflex.mdm.change.apply.timeout.ms (default 1000ms) - Implemented logic to apply timeout after making MDM changes for ScaleIO in prepare and unprepare logic - Added detection of MDM removal support via CLI - If MDM removal support via CLI supported then use CLI, fall back to edit drv_cfg.txt and restart scini instead
1 parent 41b4f0a commit ebb6c02

File tree

11 files changed

+436
-59
lines changed

11 files changed

+436
-59
lines changed

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.cloud.resource.CommandWrapper;
3232
import com.cloud.resource.ResourceWrapper;
3333
import com.cloud.storage.template.TemplateProp;
34+
import com.cloud.utils.exception.CloudRuntimeException;
3435

3536
@ResourceWrapper(handles = ModifyStoragePoolCommand.class)
3637
public final class LibvirtModifyStoragePoolCommandWrapper extends CommandWrapper<ModifyStoragePoolCommand, Answer, LibvirtComputingResource> {
@@ -49,11 +50,16 @@ public Answer execute(final ModifyStoragePoolCommand command, final LibvirtCompu
4950
return answer;
5051
}
5152

52-
final KVMStoragePool storagepool =
53-
storagePoolMgr.createStoragePool(command.getPool().getUuid(), command.getPool().getHost(), command.getPool().getPort(), command.getPool().getPath(), command.getPool()
54-
.getUserInfo(), command.getPool().getType(), command.getDetails());
55-
if (storagepool == null) {
56-
return new Answer(command, false, " Failed to create storage pool");
53+
final KVMStoragePool storagepool;
54+
try {
55+
storagepool =
56+
storagePoolMgr.createStoragePool(command.getPool().getUuid(), command.getPool().getHost(), command.getPool().getPort(), command.getPool().getPath(), command.getPool()
57+
.getUserInfo(), command.getPool().getType(), command.getDetails());
58+
if (storagepool == null) {
59+
return new Answer(command, false, " Failed to create storage pool");
60+
}
61+
} catch (CloudRuntimeException e) {
62+
return new Answer(command, false, String.format("Failed to create storage pool: %s", e.getLocalizedMessage()));
5763
}
5864

5965
final Map<String, TemplateProp> tInfo = new HashMap<String, TemplateProp>();

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

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
import java.io.IOException;
2323
import java.util.ArrayList;
2424
import java.util.Arrays;
25+
import java.util.Collection;
2526
import java.util.HashMap;
2627
import java.util.List;
2728
import java.util.Map;
2829
import java.util.UUID;
2930

31+
import com.cloud.agent.api.PrepareStorageClientCommand;
3032
import org.apache.cloudstack.storage.datastore.client.ScaleIOGatewayClient;
3133
import org.apache.cloudstack.storage.datastore.manager.ScaleIOSDCManager;
3234
import org.apache.cloudstack.storage.datastore.util.ScaleIOUtil;
@@ -158,10 +160,45 @@ public KVMStoragePool createStoragePool(String uuid, String host, int port, Stri
158160
}
159161
}
160162
}
163+
164+
validateMdmState(details);
165+
161166
MapStorageUuidToStoragePool.put(uuid, storagePool);
162167
return storagePool;
163168
}
164169

170+
/**
171+
* Validate Storage Pool state to ensure it healthy and can operate requests.
172+
* There is observed situation where ScaleIO configuration file has different values than ScaleIO CLI.
173+
* Validation compares values from both drv_cfg.txt and drv_cfg CLI and throws exception if there is mismatch.
174+
*
175+
* @param details see {@link PrepareStorageClientCommand#getDetails()}
176+
* and {@link @UnprepareStorageClientCommand#getDetails()}, expected to contain
177+
* {@link ScaleIOSDCManager#ValidateMdmsOnConnect#key()}
178+
* @throws CloudRuntimeException in case if Storage Pool is not operate-able
179+
*/
180+
private void validateMdmState(Map<String, String> details) {
181+
182+
String configKey = ScaleIOSDCManager.ValidateMdmsOnConnect.key();
183+
String configValue = details.get(configKey);
184+
185+
// be as much verbose as possible, otherwise it will be difficult to troubleshoot operational issue without logs
186+
if (StringUtils.isEmpty(configValue)) {
187+
LOGGER.debug(String.format("Skipped ScaleIO validation as property %s not sent by Management Server", configKey));
188+
} else if (Boolean.valueOf(configValue).equals(Boolean.FALSE)) {
189+
LOGGER.debug(String.format("Skipped ScaleIO validation as property %s received as %s", configKey, configValue));
190+
} else {
191+
Collection<String> mdmsConfig = ScaleIOUtil.getMdmsFromConfig();
192+
Collection<String> mdmsCli = ScaleIOUtil.getMdmsFromCli();
193+
if (!mdmsCli.equals(mdmsConfig)) {
194+
String msg = String.format("MDM addresses from memory and configuration file don't match. " +
195+
"Memory values: %s, configuration file values: %s", mdmsCli, mdmsConfig);
196+
LOGGER.warn(msg);
197+
throw new CloudRuntimeException(msg);
198+
}
199+
}
200+
}
201+
165202
@Override
166203
public boolean deleteStoragePool(String uuid) {
167204
ScaleIOStoragePool storagePool = (ScaleIOStoragePool) MapStorageUuidToStoragePool.get(uuid);
@@ -617,13 +654,16 @@ public Ternary<Boolean, Map<String, String>, String> prepareStorageClient(String
617654
String mdms = details.get(ScaleIOGatewayClient.STORAGE_POOL_MDMS);
618655
String[] mdmAddresses = mdms.split(",");
619656
if (mdmAddresses.length > 0) {
620-
if (ScaleIOUtil.mdmAdded(mdmAddresses[0])) {
657+
if (ScaleIOUtil.isMdmPresent(mdmAddresses[0])) {
621658
return new Ternary<>(true, getSDCDetails(details), "MDM added, no need to prepare the SDC client");
622659
}
623660

624-
ScaleIOUtil.addMdms(Arrays.asList(mdmAddresses));
625-
if (!ScaleIOUtil.mdmAdded(mdmAddresses[0])) {
661+
ScaleIOUtil.addMdms(mdmAddresses);
662+
if (!ScaleIOUtil.isMdmPresent(mdmAddresses[0])) {
626663
return new Ternary<>(false, null, "Failed to add MDMs");
664+
} else {
665+
LOGGER.debug(String.format("MDMs %s added to storage pool %s", mdms, uuid));
666+
applyTimeout(details);
627667
}
628668
}
629669
}
@@ -646,20 +686,66 @@ public Pair<Boolean, String> unprepareStorageClient(String uuid, Map<String, Str
646686
String mdms = details.get(ScaleIOGatewayClient.STORAGE_POOL_MDMS);
647687
String[] mdmAddresses = mdms.split(",");
648688
if (mdmAddresses.length > 0) {
649-
if (!ScaleIOUtil.mdmAdded(mdmAddresses[0])) {
689+
if (!ScaleIOUtil.isMdmPresent(mdmAddresses[0])) {
650690
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");
651693
}
652694

653-
ScaleIOUtil.removeMdms(Arrays.asList(mdmAddresses));
654-
if (ScaleIOUtil.mdmAdded(mdmAddresses[0])) {
695+
ScaleIOUtil.removeMdms(mdmAddresses);
696+
if (ScaleIOUtil.isMdmPresent(mdmAddresses[0])) {
655697
return new Pair<>(false, "Failed to remove MDMs, unable to unprepare the SDC client");
698+
} else {
699+
LOGGER.debug(String.format("MDMs %s removed from storage pool %s", mdms, uuid));
700+
applyTimeout(details);
656701
}
657702
}
658703
}
659704

705+
/*
706+
* TODO:
707+
* 1. Verify on-demand is true
708+
* 2. If on-demand is true check whether other MDM addresses are still present
709+
* 3. If there are no MDM addresses, then stop SDC service.
710+
*/
711+
660712
return new Pair<>(true, "Unprepared SDC client successfully");
661713
}
662714

715+
/**
716+
* Check whether details map has timeout configured and do "apply timeout" pause before returning response
717+
* (to have ScaleIO changes applied).
718+
*
719+
* @param details see {@link PrepareStorageClientCommand#getDetails()}
720+
* and {@link @UnprepareStorageClientCommand#getDetails()}, expected to contain
721+
* {@link ScaleIOSDCManager#MdmsChangeApplyTimeout#key()}
722+
*/
723+
private void applyTimeout(Map<String, String> details) {
724+
String configKey = ScaleIOSDCManager.MdmsChangeApplyTimeout.key();
725+
String configValue = details.get(configKey);
726+
727+
if (StringUtils.isEmpty(configValue)) {
728+
LOGGER.debug(String.format("Apply timeout value not defined in property %s, skip", configKey));
729+
return;
730+
}
731+
long timeoutMs;
732+
try {
733+
timeoutMs = Long.parseLong(configValue);
734+
} catch (NumberFormatException e) {
735+
LOGGER.warn(String.format("Invalid apply timeout value defined in property %s, skip", configKey), e);
736+
return;
737+
}
738+
if (timeoutMs < 1) {
739+
LOGGER.warn(String.format("Apply timeout value is too small (%s ms), skipping", timeoutMs));
740+
return;
741+
}
742+
try {
743+
Thread.sleep(timeoutMs);
744+
} catch (InterruptedException e) {
745+
LOGGER.warn(String.format("Apply timeout %s ms interrupted", timeoutMs), e);
746+
}
747+
}
748+
663749
private Map<String, String> getSDCDetails(Map<String, String> details) {
664750
Map<String, String> sdcDetails = new HashMap<String, String>();
665751
if (details == null || !details.containsKey(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID)) {

plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptorTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public void testUnprepareStorageClient_MDMNotAdded() {
180180
details.put(ScaleIOGatewayClient.STORAGE_POOL_MDMS, "1.1.1.1,2.2.2.2");
181181
when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl status scini"))).thenReturn(3);
182182
when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl is-enabled scini"))).thenReturn(0);
183-
when(Script.runSimpleBashScript(Mockito.eq("/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms|grep 1.1.1.1"))).thenReturn("MDM-ID 71fd458f0775010f SDC ID 4421a91a00000000 INSTALLATION ID 204930df2cbcaf8e IPs [0]-3.3.3.3 [1]-4.4.4.4");
183+
when(Script.runSimpleBashScript(Mockito.eq("/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms --file /etc/emc/scaleio/drv_cfg.txt|grep 1.1.1.1"))).thenReturn("MDM-ID 71fd458f0775010f SDC ID 4421a91a00000000 INSTALLATION ID 204930df2cbcaf8e IPs [0]-3.3.3.3 [1]-4.4.4.4");
184184

185185
Pair<Boolean, String> result = scaleIOStorageAdaptor.unprepareStorageClient(poolUuid, details);
186186

@@ -195,7 +195,10 @@ public void testUnprepareStorageClient_RemoveMDMFailed() {
195195
when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl status scini"))).thenReturn(3);
196196
when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl is-enabled scini"))).thenReturn(0);
197197
when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl restart scini"))).thenReturn(0);
198-
when(Script.runSimpleBashScript(Mockito.eq("/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms|grep 1.1.1.1"))).thenReturn("MDM-ID 71fd458f0775010f SDC ID 4421a91a00000000 INSTALLATION ID 204930df2cbcaf8e IPs [0]-1.1.1.1 [1]-2.2.2.2");
198+
when(Script.runSimpleBashScript(Mockito.eq("/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms --file /etc/emc/scaleio/drv_cfg.txt|grep 1.1.1.1"))).thenReturn("MDM-ID 71fd458f0775010f SDC ID 4421a91a00000000 INSTALLATION ID 204930df2cbcaf8e IPs [0]-1.1.1.1 [1]-2.2.2.2");
199+
when(Script.executeCommand(Mockito.eq("/opt/emc/scaleio/sdc/bin/drv_cfg"))).thenReturn(new Pair<>(null, null));
200+
when(Script.executeCommand(Mockito.eq("/opt/emc/scaleio/sdc/bin/drv_cfg --query_vols --file /etc/emc/scaleio/drv_cfg.txt"))).thenReturn(new Pair<>("", null));
201+
199202

200203
Pair<Boolean, String> result = scaleIOStorageAdaptor.unprepareStorageClient(poolUuid, details);
201204

plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/ScaleIOStoragePoolTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public void testSdcIdAttribute() {
9696

9797
try (MockedStatic<Script> ignored = Mockito.mockStatic(Script.class)) {
9898
when(Script.runSimpleBashScript(
99-
"/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms|grep 218ce1797566a00f|awk '{print $5}'")).thenReturn(
99+
"/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms --file /etc/emc/scaleio/drv_cfg.txt|grep 218ce1797566a00f|awk '{print $5}'")).thenReturn(
100100
sdcId);
101101

102102
ScaleIOStoragePool pool1 = new ScaleIOStoragePool(uuid, "192.168.1.19", 443, "a519be2f00000000", type,
@@ -117,9 +117,9 @@ public void testSdcGuidAttribute() {
117117

118118
try (MockedStatic<Script> ignored = Mockito.mockStatic(Script.class)) {
119119
when(Script.runSimpleBashScript(
120-
"/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms|grep 218ce1797566a00f|awk '{print $5}'")).thenReturn(
120+
"/opt/emc/scaleio/sdc/bin/drv_cfg --query_mdms --file /etc/emc/scaleio/drv_cfg.txt|grep 218ce1797566a00f|awk '{print $5}'")).thenReturn(
121121
null);
122-
when(Script.runSimpleBashScript("/opt/emc/scaleio/sdc/bin/drv_cfg --query_guid")).thenReturn(sdcGuid);
122+
when(Script.runSimpleBashScript("/opt/emc/scaleio/sdc/bin/drv_cfg --query_guid --file /etc/emc/scaleio/drv_cfg.txt")).thenReturn(sdcGuid);
123123

124124
ScaleIOStoragePool pool1 = new ScaleIOStoragePool(uuid, "192.168.1.19", 443, "a519be2f00000000", type,
125125
details, adapter);

plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/client/ScaleIOGatewayClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public interface ScaleIOGatewayClient {
3838
String GATEWAY_API_PASSWORD = "powerflex.gw.password";
3939
String STORAGE_POOL_NAME = "powerflex.storagepool.name";
4040
String STORAGE_POOL_SYSTEM_ID = "powerflex.storagepool.system.id";
41+
/**
42+
* Storage Pool Metadata Management (MDM) IP address(es).
43+
*/
4144
String STORAGE_POOL_MDMS = "powerflex.storagepool.mdms";
4245
String SDC_ID = "powerflex.sdc.id";
4346
String SDC_GUID = "powerflex.sdc.guid";

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,8 @@ public boolean attachZone(DataStore dataStore, ZoneScope scope, Hypervisor.Hyper
307307
@Override
308308
public boolean maintain(DataStore store) {
309309
Map<String,String> details = new HashMap<>();
310+
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
311+
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
310312
StoragePoolDetailVO systemIdDetail = storagePoolDetailsDao.findDetail(store.getId(), ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID);
311313
if (systemIdDetail != null) {
312314
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemIdDetail.getValue());
@@ -328,6 +330,8 @@ public boolean cancelMaintain(DataStore store) {
328330
StoragePoolDetailVO systemIdDetail = storagePoolDetailsDao.findDetail(store.getId(), ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID);
329331
if (systemIdDetail != null) {
330332
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemIdDetail.getValue());
333+
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
334+
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
331335
sdcManager = ComponentContext.inject(sdcManager);
332336
if (sdcManager.areSDCConnectionsWithinLimit(store.getId())) {
333337
StoragePoolVO storagePoolVO = primaryDataStoreDao.findById(store.getId());

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ public interface ScaleIOSDCManager {
3232
Boolean.TRUE,
3333
ConfigKey.Scope.Zone);
3434

35+
/**
36+
* Timeout for Host to wait after MDM changes made on Host until changes will be applied.
37+
* Needed to avoid cases when Storage Pool is not connected yet, but Agent already starts to use Storage Pool.
38+
*/
39+
ConfigKey<Integer> MdmsChangeApplyTimeout = new ConfigKey<>("Storage",
40+
Integer.class,
41+
"powerflex.mdm.change.apply.timeout.ms",
42+
"1000",
43+
"Timeout for Host to wait after MDM changes made on Host until changes will be applied, default value: 1000 ms",
44+
Boolean.TRUE);
45+
46+
ConfigKey<Boolean> ValidateMdmsOnConnect = new ConfigKey<>("Storage",
47+
Boolean.class,
48+
"powerflex.mdm.validate.on.connect",
49+
Boolean.FALSE.toString(),
50+
"Flag to validate MDMs on Host, present in configuration file and in CLI, default value: false",
51+
Boolean.TRUE);
52+
3553
/**
3654
* Checks SDC connections limit.
3755
* @param storagePoolId the storage pool id

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,11 @@ public String prepareSDC(Host host, DataStore dataStore) {
204204

205205
private String prepareSDCOnHost(Host host, DataStore dataStore, String systemId, String mdms) {
206206
logger.debug("Preparing SDC on the host {}", host);
207-
Map<String,String> details = new HashMap<>();
207+
Map<String, String> details = new HashMap<>();
208208
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemId);
209209
details.put(ScaleIOGatewayClient.STORAGE_POOL_MDMS, mdms);
210+
details.put(MdmsChangeApplyTimeout.key(), String.valueOf(MdmsChangeApplyTimeout.value()));
211+
210212
PrepareStorageClientCommand cmd = new PrepareStorageClientCommand(((PrimaryDataStore) dataStore).getPoolType(), dataStore.getUuid(), details);
211213
int timeoutSeconds = 60;
212214
cmd.setWait(timeoutSeconds);
@@ -324,6 +326,7 @@ private boolean unprepareSDCOnHost(Host host, DataStore dataStore, String mdms)
324326
logger.debug(String.format("Unpreparing SDC on the host %s (%s)", host.getId(), host.getName()));
325327
Map<String,String> details = new HashMap<>();
326328
details.put(ScaleIOGatewayClient.STORAGE_POOL_MDMS, mdms);
329+
details.put(MdmsChangeApplyTimeout.key(), String.valueOf(MdmsChangeApplyTimeout.value()));
327330
UnprepareStorageClientCommand cmd = new UnprepareStorageClientCommand(((PrimaryDataStore) dataStore).getPoolType(), dataStore.getUuid(), details);
328331
int timeoutSeconds = 60;
329332
cmd.setWait(timeoutSeconds);
@@ -477,6 +480,6 @@ public String getConfigComponentName() {
477480

478481
@Override
479482
public ConfigKey<?>[] getConfigKeys() {
480-
return new ConfigKey[]{ConnectOnDemand};
483+
return new ConfigKey[]{ConnectOnDemand, MdmsChangeApplyTimeout, ValidateMdmsOnConnect};
481484
}
482485
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ private String getSdcIdOfHost(HostVO host, DataStore dataStore) {
111111
}
112112
Map<String,String> details = new HashMap<>();
113113
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemId);
114+
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
115+
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
114116
_sdcManager = ComponentContext.inject(_sdcManager);
115117
if (_sdcManager.areSDCConnectionsWithinLimit(poolId)) {
116118
details.put(ScaleIOSDCManager.ConnectOnDemand.key(), String.valueOf(ScaleIOSDCManager.ConnectOnDemand.valueIn(host.getDataCenterId())));
@@ -203,6 +205,8 @@ public boolean hostDisconnected(long hostId, long poolId) {
203205
}
204206
Map<String,String> details = new HashMap<>();
205207
details.put(ScaleIOGatewayClient.STORAGE_POOL_SYSTEM_ID, systemId);
208+
details.put(ScaleIOSDCManager.MdmsChangeApplyTimeout.key(), String.valueOf(ScaleIOSDCManager.MdmsChangeApplyTimeout.value()));
209+
details.put(ScaleIOSDCManager.ValidateMdmsOnConnect.key(), String.valueOf(ScaleIOSDCManager.ValidateMdmsOnConnect.value()));
206210
_sdcManager = ComponentContext.inject(_sdcManager);
207211
if (_sdcManager.canUnprepareSDC(host, dataStore)) {
208212
details.put(ScaleIOSDCManager.ConnectOnDemand.key(), String.valueOf(ScaleIOSDCManager.ConnectOnDemand.valueIn(host.getDataCenterId())));

0 commit comments

Comments
 (0)