Skip to content
This repository was archived by the owner on Jan 15, 2020. It is now read-only.

Commit b7ab955

Browse files
author
Mike Tutkowski
committed
When deleting primary storage that's based on the SolidFireShared plug-in (which uses a shared-IOPS approach), remove the volume from the volume access group it's in
1 parent 85bb685 commit b7ab955

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import com.cloud.agent.api.DeleteStoragePoolCommand;
5353
import com.cloud.agent.api.StoragePoolInfo;
5454
import com.cloud.dc.ClusterDetailsDao;
55+
import com.cloud.dc.ClusterDetailsVO;
5556
import com.cloud.dc.ClusterVO;
5657
import com.cloud.dc.dao.ClusterDao;
5758
import com.cloud.dc.dao.DataCenterDao;
@@ -491,6 +492,8 @@ public boolean deleteDataStore(DataStore dataStore) {
491492
_tmpltMgr.evictTemplateFromStoragePool(templatePoolVO);
492493
}
493494

495+
Long clusterId = null;
496+
494497
for (StoragePoolHostVO host : hostPoolRecords) {
495498
DeleteStoragePoolCommand deleteCmd = new DeleteStoragePoolCommand(storagePool);
496499

@@ -523,18 +526,48 @@ public boolean deleteDataStore(DataStore dataStore) {
523526
if (answer != null && answer.getResult()) {
524527
s_logger.info("Successfully deleted storage pool using Host ID " + host.getHostId());
525528

529+
HostVO hostVO = this._hostDao.findById(host.getHostId());
530+
531+
if (hostVO != null) {
532+
clusterId = hostVO.getClusterId();
533+
}
534+
526535
break;
527536
}
528537
else {
529538
s_logger.error("Failed to delete storage pool using Host ID " + host.getHostId() + ": " + answer.getResult());
530539
}
531540
}
532541

542+
if (clusterId != null) {
543+
removeVolumeFromVag(storagePool.getId(), clusterId);
544+
}
545+
533546
deleteSolidFireVolume(storagePool.getId());
534547

535548
return _primaryDataStoreHelper.deletePrimaryDataStore(dataStore);
536549
}
537550

551+
private void removeVolumeFromVag(long storagePoolId, long clusterId) {
552+
long sfVolumeId = getVolumeId(storagePoolId);
553+
ClusterDetailsVO clusterDetail = _clusterDetailsDao.findDetail(clusterId, SolidFireUtil.getVagKey(storagePoolId));
554+
555+
String vagId = clusterDetail != null ? clusterDetail.getValue() : null;
556+
557+
if (vagId != null) {
558+
List<HostVO> hosts = _hostDao.findByClusterId(clusterId);
559+
560+
SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, _storagePoolDetailsDao);
561+
562+
SolidFireUtil.SolidFireVag sfVag = SolidFireUtil.getSolidFireVag(sfConnection, Long.parseLong(vagId));
563+
564+
String[] hostIqns = SolidFireUtil.getNewHostIqns(sfVag.getInitiators(), SolidFireUtil.getIqnsFromHosts(hosts));
565+
long[] volumeIds = SolidFireUtil.getNewVolumeIds(sfVag.getVolumeIds(), sfVolumeId, false);
566+
567+
SolidFireUtil.modifySolidFireVag(sfConnection, sfVag.getId(), hostIqns, volumeIds);
568+
}
569+
}
570+
538571
private void deleteSolidFireVolume(long storagePoolId) {
539572
SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, _storagePoolDetailsDao);
540573

0 commit comments

Comments
 (0)