Skip to content

Commit dbc2032

Browse files
csquireCraig Squirestephankruggg
authored
server: Check for null poolid (#6879)
Extract retrieveDatastore method Add unit test for null poolId Fixes #6878 Co-authored-by: Craig Squire <craig.squire@ticketmaster.com> Co-authored-by: Stephan Krug <stekrug@icloud.com>
1 parent 6c436ec commit dbc2032

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

server/src/main/java/com/cloud/tags/TaggedResourceManagerImpl.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,10 @@ public Map<String, String> getTagsFromResource(ResourceObjectType type, long res
318318
private void informStoragePoolForVmTags(long vmId, String key, String value) {
319319
List<VolumeVO> volumeVos = volumeDao.findByInstance(vmId);
320320
for (VolumeVO volume : volumeVos) {
321-
DataStore dataStore = dataStoreMgr.getDataStore(volume.getPoolId(), DataStoreRole.Primary);
321+
Long poolId = volume.getPoolId();
322+
DataStore dataStore = retrieveDatastore(poolId);
322323
if (dataStore == null || !(dataStore.getDriver() instanceof PrimaryDataStoreDriver)) {
324+
s_logger.info(String.format("No data store found for VM %d with pool ID %d.", vmId, poolId));
323325
continue;
324326
}
325327
PrimaryDataStoreDriver dataStoreDriver = (PrimaryDataStoreDriver) dataStore.getDriver();
@@ -328,4 +330,11 @@ private void informStoragePoolForVmTags(long vmId, String key, String value) {
328330
}
329331
}
330332
}
333+
334+
protected DataStore retrieveDatastore(Long poolId) {
335+
if (poolId == null) {
336+
return null;
337+
}
338+
return dataStoreMgr.getDataStore(poolId, DataStoreRole.Primary);
339+
}
331340
}

server/src/test/java/com/cloud/tags/TaggedResourceManagerImplTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.List;
2626
import java.util.Map;
2727

28+
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
2829
import org.junit.Assert;
2930
import org.junit.Test;
3031
import org.junit.runner.RunWith;
@@ -123,4 +124,10 @@ public void testCheckTagsDeletePermissionFail() {
123124
Mockito.doThrow(PermissionDeniedException.class).when(accountManager).checkAccess(caller, null, false, owner);
124125
taggedResourceManagerImplSpy.checkTagsDeletePermission(List.of(resourceTag1, resourceTag2), caller);
125126
}
127+
128+
@Test
129+
public void testRetrieveDataStoreNullPoolId() {
130+
DataStore dataStore = taggedResourceManagerImplSpy.retrieveDatastore(null);
131+
Assert.assertNull(dataStore);
132+
}
126133
}

0 commit comments

Comments
 (0)