Skip to content

Commit 44d12e2

Browse files
bugfix/CSTACKEX-154: NPE check in delete datastore (#52)
1 parent 0f8ebd0 commit 44d12e2

1 file changed

Lines changed: 41 additions & 38 deletions

File tree

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedSANStrategy.java

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.cloudstack.storage.service.model.ProtocolType;
3838
import org.apache.cloudstack.storage.utils.OntapStorageConstants;
3939
import org.apache.cloudstack.storage.utils.OntapStorageUtils;
40+
import org.apache.commons.collections.CollectionUtils;
4041
import org.apache.logging.log4j.LogManager;
4142
import org.apache.logging.log4j.Logger;
4243
import javax.inject.Inject;
@@ -274,47 +275,49 @@ public void deleteAccessGroup(AccessGroup accessGroup) {
274275
String authHeader = OntapStorageUtils.generateAuthHeader(storage.getUsername(), storage.getPassword());
275276
String svmName = storage.getSvmName();
276277
//Get iGroup name per host
277-
for(HostVO host : accessGroup.getHostsToConnect()) {
278-
String igroupName = OntapStorageUtils.getIgroupName(svmName, host.getName());
279-
logger.info("deleteAccessGroup: iGroup name '{}'", igroupName);
280-
281-
// Get the iGroup to retrieve its UUID
282-
Map<String, Object> igroupParams = Map.of(
283-
OntapStorageConstants.SVM_DOT_NAME, svmName,
284-
OntapStorageConstants.NAME, igroupName
285-
);
286-
287-
try {
288-
OntapResponse<Igroup> igroupResponse = sanFeignClient.getIgroupResponse(authHeader, igroupParams);
289-
if (igroupResponse == null || igroupResponse.getRecords() == null || igroupResponse.getRecords().isEmpty()) {
290-
logger.warn("deleteAccessGroup: iGroup '{}' not found, may have been already deleted", igroupName);
291-
return;
292-
}
293-
294-
Igroup igroup = igroupResponse.getRecords().get(0);
295-
String igroupUuid = igroup.getUuid();
296-
297-
if (igroupUuid == null || igroupUuid.isEmpty()) {
298-
throw new CloudRuntimeException(" iGroup UUID is null or empty for iGroup: " + igroupName);
299-
}
300-
301-
logger.info("deleteAccessGroup: Deleting iGroup '{}' with UUID '{}'", igroupName, igroupUuid);
302-
303-
// Delete the iGroup using the UUID
304-
sanFeignClient.deleteIgroup(authHeader, igroupUuid);
278+
if(!CollectionUtils.isEmpty(accessGroup.getHostsToConnect())) {
279+
for (HostVO host : accessGroup.getHostsToConnect()) {
280+
String igroupName = OntapStorageUtils.getIgroupName(svmName, host.getName());
281+
logger.info("deleteAccessGroup: iGroup name '{}'", igroupName);
305282

306-
logger.info("deleteAccessGroup: Successfully deleted iGroup '{}'", igroupName);
307-
308-
} catch (FeignException e) {
309-
if (e.status() == 404) {
310-
logger.warn("deleteAccessGroup: iGroup '{}' does not exist (status 404), skipping deletion", igroupName);
311-
} else {
312-
logger.error("deleteAccessGroup: FeignException occurred: Status: {}, Exception: {}", e.status(), e.getMessage(), e);
283+
// Get the iGroup to retrieve its UUID
284+
Map<String, Object> igroupParams = Map.of(
285+
OntapStorageConstants.SVM_DOT_NAME, svmName,
286+
OntapStorageConstants.NAME, igroupName
287+
);
288+
289+
try {
290+
OntapResponse<Igroup> igroupResponse = sanFeignClient.getIgroupResponse(authHeader, igroupParams);
291+
if (igroupResponse == null || igroupResponse.getRecords() == null || igroupResponse.getRecords().isEmpty()) {
292+
logger.warn("deleteAccessGroup: iGroup '{}' not found, may have been already deleted", igroupName);
293+
return;
294+
}
295+
296+
Igroup igroup = igroupResponse.getRecords().get(0);
297+
String igroupUuid = igroup.getUuid();
298+
299+
if (igroupUuid == null || igroupUuid.isEmpty()) {
300+
throw new CloudRuntimeException(" iGroup UUID is null or empty for iGroup: " + igroupName);
301+
}
302+
303+
logger.info("deleteAccessGroup: Deleting iGroup '{}' with UUID '{}'", igroupName, igroupUuid);
304+
305+
// Delete the iGroup using the UUID
306+
sanFeignClient.deleteIgroup(authHeader, igroupUuid);
307+
308+
logger.info("deleteAccessGroup: Successfully deleted iGroup '{}'", igroupName);
309+
310+
} catch (FeignException e) {
311+
if (e.status() == 404) {
312+
logger.warn("deleteAccessGroup: iGroup '{}' does not exist (status 404), skipping deletion", igroupName);
313+
} else {
314+
logger.error("deleteAccessGroup: FeignException occurred: Status: {}, Exception: {}", e.status(), e.getMessage(), e);
315+
throw e;
316+
}
317+
} catch (Exception e) {
318+
logger.error("deleteAccessGroup: Exception occurred: {}", e.getMessage(), e);
313319
throw e;
314320
}
315-
} catch (Exception e) {
316-
logger.error("deleteAccessGroup: Exception occurred: {}", e.getMessage(), e);
317-
throw e;
318321
}
319322
}
320323
} catch (FeignException e) {

0 commit comments

Comments
 (0)