From b6cebe22f9ee5e07e16bf4213336be650b8ad48f Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Tue, 18 Feb 2025 13:17:05 +0530 Subject: [PATCH] Fixed VMware import issue - check and update pools in the order of the disks (do not update by position) (#10409) --- .../com/cloud/storage/VolumeApiService.java | 6 +- .../cloud/storage/VolumeApiServiceImpl.java | 20 ++-- .../VolumeImportUnmanageManagerImpl.java | 2 +- .../vm/UnmanagedVMsManagerImpl.java | 102 +++++++++--------- .../storage/VolumeApiServiceImplTest.java | 20 ++-- .../VolumeImportUnmanageManagerImplTest.java | 2 +- .../vm/UnmanagedVMsManagerImplTest.java | 6 +- 7 files changed, 77 insertions(+), 81 deletions(-) diff --git a/api/src/main/java/com/cloud/storage/VolumeApiService.java b/api/src/main/java/com/cloud/storage/VolumeApiService.java index 4f09702b7db..833ba442888 100644 --- a/api/src/main/java/com/cloud/storage/VolumeApiService.java +++ b/api/src/main/java/com/cloud/storage/VolumeApiService.java @@ -133,13 +133,13 @@ public interface VolumeApiService { Snapshot allocSnapshotForVm(Long vmId, Long volumeId, String snapshotName) throws ResourceAllocationException; /** - * Checks if the target storage supports the disk offering. + * Checks if the storage pool supports the disk offering tags. * This validation is consistent with the mechanism used to select a storage pool to deploy a volume when a virtual machine is deployed or when a data disk is allocated. * * The scenarios when this method returns true or false is presented in the following table. * * - * + * * * * @@ -163,7 +163,7 @@ public interface VolumeApiService { * *
#Disk offering tagsStorage tagsDoes the storage support the disk offering?#Disk offering diskOfferingTagsStorage diskOfferingTagsDoes the storage support the disk offering?
*/ - boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, String diskOfferingTags); + boolean doesStoragePoolSupportDiskOfferingTags(StoragePool destPool, String diskOfferingTags); Volume destroyVolume(long volumeId, Account caller, boolean expunge, boolean forceExpunge); diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 3ea8116764a..e2babeacc71 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -3519,7 +3519,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic if ((destPool.isShared() && newDiskOffering.isUseLocalStorage()) || destPool.isLocal() && newDiskOffering.isShared()) { throw new InvalidParameterValueException("You cannot move the volume to a shared storage and assign a disk offering for local storage and vice versa."); } - if (!doesTargetStorageSupportDiskOffering(destPool, newDiskOffering)) { + if (!doesStoragePoolSupportDiskOffering(destPool, newDiskOffering)) { throw new InvalidParameterValueException(String.format("Migration failed: target pool [%s, tags:%s] has no matching tags for volume [%s, uuid:%s, tags:%s]", destPool.getName(), storagePoolTagsDao.getStoragePoolTags(destPool.getId()), volume.getName(), volume.getUuid(), newDiskOffering.getTags())); } @@ -3546,7 +3546,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic } /** - * Checks if the target storage supports the new disk offering. + * Checks if the storage pool supports the new disk offering. * This validation is consistent with the mechanism used to select a storage pool to deploy a volume when a virtual machine is deployed or when a new data disk is allocated. * * The scenarios when this method returns true or false is presented in the following table. @@ -3577,9 +3577,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic * * */ - protected boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, DiskOfferingVO diskOffering) { - String targetStoreTags = diskOffering.getTags(); - return doesTargetStorageSupportDiskOffering(destPool, targetStoreTags); + protected boolean doesStoragePoolSupportDiskOffering(StoragePool destPool, DiskOfferingVO diskOffering) { + String offeringTags = diskOffering.getTags(); + return doesStoragePoolSupportDiskOfferingTags(destPool, offeringTags); } public static boolean doesNewDiskOfferingHasTagsAsOldDiskOffering(DiskOfferingVO oldDO, DiskOfferingVO newDO) { @@ -3595,18 +3595,18 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic } @Override - public boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, String diskOfferingTags) { + public boolean doesStoragePoolSupportDiskOfferingTags(StoragePool destPool, String diskOfferingTags) { Pair, Boolean> storagePoolTags = getStoragePoolTags(destPool); if ((storagePoolTags == null || !storagePoolTags.second()) && org.apache.commons.lang.StringUtils.isBlank(diskOfferingTags)) { if (storagePoolTags == null) { - s_logger.debug(String.format("Destination storage pool [%s] does not have any tags, and so does the disk offering. Therefore, they are compatible", destPool.getUuid())); + s_logger.debug(String.format("Storage pool [%s] does not have any tags, and so does the disk offering. Therefore, they are compatible", destPool.getUuid())); } else { - s_logger.debug("Destination storage pool has tags [%s], and the disk offering has no tags. Therefore, they are compatible."); + s_logger.debug("Storage pool has tags [%s], and the disk offering has no tags. Therefore, they are compatible."); } return true; } if (storagePoolTags == null || CollectionUtils.isEmpty(storagePoolTags.first())) { - s_logger.debug(String.format("Destination storage pool [%s] has no tags, while disk offering has tags [%s]. Therefore, they are not compatible", destPool.getUuid(), + s_logger.debug(String.format("Storage pool [%s] has no tags, while disk offering has tags [%s]. Therefore, they are not compatible", destPool.getUuid(), diskOfferingTags)); return false; } @@ -3619,7 +3619,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic } else { result = CollectionUtils.isSubCollection(Arrays.asList(newDiskOfferingTagsAsStringArray), storageTagsList); } - s_logger.debug(String.format("Destination storage pool [%s] accepts tags [%s]? %s", destPool.getUuid(), diskOfferingTags, result)); + s_logger.debug(String.format("Storage pool [%s] accepts tags [%s]? %s", destPool.getUuid(), diskOfferingTags, result)); return result; } diff --git a/server/src/main/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImpl.java b/server/src/main/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImpl.java index b3b164395f6..e48a6d413ad 100644 --- a/server/src/main/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImpl.java @@ -205,7 +205,7 @@ public class VolumeImportUnmanageManagerImpl implements VolumeImportUnmanageServ if (diskOffering.isCustomized()) { volumeApiService.validateCustomDiskOfferingSizeRange(volume.getVirtualSize() / ByteScaleUtils.GiB); } - if (!volumeApiService.doesTargetStorageSupportDiskOffering(pool, diskOffering.getTags())) { + if (!volumeApiService.doesStoragePoolSupportDiskOfferingTags(pool, diskOffering.getTags())) { logFailureAndThrowException(String.format("Disk offering: %s storage tags are not compatible with selected storage pool: %s", diskOffering.getUuid(), pool.getUuid())); } diff --git a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java index 187afece84f..f70a26f33c7 100644 --- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java @@ -456,7 +456,7 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { if (diskOffering == null) { return false; } - return volumeApiService.doesTargetStorageSupportDiskOffering(pool, diskOffering.getTags()); + return volumeApiService.doesStoragePoolSupportDiskOfferingTags(pool, diskOffering.getTags()); } private ServiceOfferingVO getUnmanagedInstanceServiceOffering(final UnmanagedInstanceTO instance, ServiceOfferingVO serviceOffering, final Account owner, final DataCenter zone, final Map details, Hypervisor.HypervisorType hypervisorType) @@ -547,7 +547,7 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { for (StoragePool pool : pools) { if (pool.getDataCenterId() == zone.getId() && (pool.getClusterId() == null || pool.getClusterId().equals(cluster.getId())) && - volumeApiService.doesTargetStorageSupportDiskOffering(pool, diskOfferingTags)) { + volumeApiService.doesStoragePoolSupportDiskOfferingTags(pool, diskOfferingTags)) { storagePool = pool; break; } @@ -560,7 +560,7 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { for (StoragePool pool : pools) { String searchPoolParam = StringUtils.isNotBlank(dsPath) ? dsPath : dsName; if (StringUtils.contains(pool.getPath(), searchPoolParam) && - volumeApiService.doesTargetStorageSupportDiskOffering(pool, diskOfferingTags)) { + volumeApiService.doesStoragePoolSupportDiskOfferingTags(pool, diskOfferingTags)) { storagePool = pool; break; } @@ -1732,9 +1732,9 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { convertedInstance.setPowerState(UnmanagedInstanceTO.PowerState.PowerOff); List convertedInstanceDisks = convertedInstance.getDisks(); List sourceVMwareInstanceDisks = sourceVMwareInstance.getDisks(); - for (UnmanagedInstanceTO.Disk sourceVMwareInstanceDisk : sourceVMwareInstanceDisks) { - UnmanagedInstanceTO.Disk convertedDisk = convertedInstanceDisks.get(sourceVMwareInstanceDisk.getPosition()); - convertedDisk.setDiskId(sourceVMwareInstanceDisk.getDiskId()); + for (int i = 0; i < convertedInstanceDisks.size(); i++) { + UnmanagedInstanceTO.Disk disk = convertedInstanceDisks.get(i); + disk.setDiskId(sourceVMwareInstanceDisks.get(i).getDiskId()); } List convertedInstanceNics = convertedInstance.getNics(); List sourceVMwareInstanceNics = sourceVMwareInstance.getNics(); @@ -2018,7 +2018,25 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { List pools = new ArrayList<>(); pools.addAll(primaryDataStoreDao.findClusterWideStoragePoolsByHypervisorAndPoolType(destinationCluster.getId(), Hypervisor.HypervisorType.KVM, Storage.StoragePoolType.NetworkFilesystem)); pools.addAll(primaryDataStoreDao.findZoneWideStoragePoolsByHypervisorAndPoolType(destinationCluster.getDataCenterId(), Hypervisor.HypervisorType.KVM, Storage.StoragePoolType.NetworkFilesystem)); - List diskOfferingTags = new ArrayList<>(); + if (pools.isEmpty()) { + String msg = String.format("Cannot find suitable storage pools in the cluster %s for the conversion", destinationCluster.getName()); + LOGGER.error(msg); + throw new CloudRuntimeException(msg); + } + + if (serviceOffering.getDiskOfferingId() != null) { + DiskOfferingVO diskOffering = diskOfferingDao.findById(serviceOffering.getDiskOfferingId()); + if (diskOffering == null) { + String msg = String.format("Cannot find disk offering with ID %s that belongs to the service offering %s", serviceOffering.getDiskOfferingId(), serviceOffering.getName()); + LOGGER.error(msg); + throw new CloudRuntimeException(msg); + } + if (getStoragePoolWithTags(pools, diskOffering.getTags()) == null) { + String msg = String.format("Cannot find suitable storage pool for disk offering %s that belongs to the service offering %s", diskOffering.getName(), serviceOffering.getName()); + LOGGER.error(msg); + throw new CloudRuntimeException(msg); + } + } for (Long diskOfferingId : dataDiskOfferingMap.values()) { DiskOfferingVO diskOffering = diskOfferingDao.findById(diskOfferingId); if (diskOffering == null) { @@ -2026,44 +2044,26 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { LOGGER.error(msg); throw new CloudRuntimeException(msg); } - diskOfferingTags.add(diskOffering.getTags()); - } - if (serviceOffering.getDiskOfferingId() != null) { - DiskOfferingVO diskOffering = diskOfferingDao.findById(serviceOffering.getDiskOfferingId()); - if (diskOffering != null) { - diskOfferingTags.add(diskOffering.getTags()); - } - } - - pools = getPoolsWithMatchingTags(pools, diskOfferingTags); - if (pools.isEmpty()) { - String msg = String.format("Cannot find suitable storage pools in cluster %s for the conversion", destinationCluster.getName()); - LOGGER.error(msg); - throw new CloudRuntimeException(msg); - } - return pools; - } - - private List getPoolsWithMatchingTags(List pools, List diskOfferingTags) { - if (diskOfferingTags.isEmpty()) { - return pools; - } - List poolsSupportingTags = new ArrayList<>(pools); - for (String tags : diskOfferingTags) { - boolean tagsMatched = false; - for (StoragePoolVO pool : pools) { - if (volumeApiService.doesTargetStorageSupportDiskOffering(pool, tags)) { - poolsSupportingTags.add(pool); - tagsMatched = true; - } - } - if (!tagsMatched) { - String msg = String.format("Cannot find suitable storage pools for the conversion with disk offering tags %s", tags); + if (getStoragePoolWithTags(pools, diskOffering.getTags()) == null) { + String msg = String.format("Cannot find suitable storage pool for disk offering %s", diskOffering.getName()); LOGGER.error(msg); throw new CloudRuntimeException(msg); } } - return poolsSupportingTags; + + return pools; + } + + private StoragePoolVO getStoragePoolWithTags(List pools, String tags) { + if (StringUtils.isEmpty(tags)) { + return pools.get(0); + } + for (StoragePoolVO pool : pools) { + if (volumeApiService.doesStoragePoolSupportDiskOfferingTags(pool, tags)) { + return pool; + } + } + return null; } private List selectInstanceConversionStoragePools( @@ -2071,26 +2071,22 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { ServiceOfferingVO serviceOffering, Map dataDiskOfferingMap ) { List storagePools = new ArrayList<>(disks.size()); - for (int i = 0; i < disks.size(); i++) { - storagePools.add(null); - } Set dataDiskIds = dataDiskOfferingMap.keySet(); for (UnmanagedInstanceTO.Disk disk : disks) { - Long diskOfferingId = dataDiskOfferingMap.get(disk.getDiskId()); - if (diskOfferingId == null && !dataDiskIds.contains(disk.getDiskId())) { + Long diskOfferingId = null; + if (dataDiskIds.contains(disk.getDiskId())) { + diskOfferingId = dataDiskOfferingMap.get(disk.getDiskId()); + } else { diskOfferingId = serviceOffering.getDiskOfferingId(); } + //TODO: Choose pools by capacity if (diskOfferingId == null) { - storagePools.set(disk.getPosition(), pools.get(0).getUuid()); + storagePools.add(pools.get(0).getUuid()); } else { DiskOfferingVO diskOffering = diskOfferingDao.findById(diskOfferingId); - for (StoragePoolVO pool : pools) { - if (volumeApiService.doesTargetStorageSupportDiskOffering(pool, diskOffering.getTags())) { - storagePools.set(disk.getPosition(), pool.getUuid()); - break; - } - } + StoragePoolVO pool = getStoragePoolWithTags(pools, diskOffering.getTags()); + storagePools.add(pool.getUuid()); } } return storagePools; diff --git a/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java index 9b087bd384b..db74a004580 100644 --- a/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java +++ b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java @@ -1164,7 +1164,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("A"), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertFalse(result); } @@ -1177,7 +1177,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("A","B","C","D","X","Y"), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertTrue(result); } @@ -1190,7 +1190,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.lenient().doReturn(new Pair<>(List.of("A,B,C,D,X,Y"), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertTrue(result); } @@ -1203,7 +1203,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of(""), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertFalse(result); } @@ -1216,7 +1216,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.lenient().doReturn(new Pair<>(List.of(""), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertTrue(result); } @@ -1229,7 +1229,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("C,D"), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertFalse(result); } @@ -1242,7 +1242,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("A"), false)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertTrue(result); } @@ -1255,7 +1255,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("tags[0] == 'A'"), true)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertTrue(result); } @@ -1268,7 +1268,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("tags[0] == 'A'"), true)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertFalse(result); } @@ -1281,7 +1281,7 @@ public class VolumeApiServiceImplTest { StoragePool storagePoolMock = Mockito.mock(StoragePool.class); Mockito.doReturn(new Pair<>(List.of("tags[0] == 'A'"), true)).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock); - boolean result = volumeApiServiceImpl.doesTargetStorageSupportDiskOffering(storagePoolMock, diskOfferingVoMock); + boolean result = volumeApiServiceImpl.doesStoragePoolSupportDiskOffering(storagePoolMock, diskOfferingVoMock); Assert.assertFalse(result); } diff --git a/server/src/test/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImplTest.java index dab46595438..aed8f6a291b 100644 --- a/server/src/test/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImplTest.java +++ b/server/src/test/java/org/apache/cloudstack/storage/volume/VolumeImportUnmanageManagerImplTest.java @@ -275,7 +275,7 @@ public class VolumeImportUnmanageManagerImplTest { when(diskOffering.isCustomized()).thenReturn(true); doReturn(diskOffering).when(volumeImportUnmanageManager).getOrCreateDiskOffering(account, diskOfferingId, zoneId, isLocal); doNothing().when(volumeApiService).validateCustomDiskOfferingSizeRange(anyLong()); - doReturn(true).when(volumeApiService).doesTargetStorageSupportDiskOffering(any(), isNull()); + doReturn(true).when(volumeApiService).doesStoragePoolSupportDiskOfferingTags(any(), isNull()); doReturn(diskProfile).when(volumeManager).importVolume(any(), anyString(), any(), eq(virtualSize), isNull(), isNull(), anyLong(), any(), isNull(), isNull(), any(), isNull(), anyLong(), anyString(), isNull()); when(diskProfile.getVolumeId()).thenReturn(volumeId); diff --git a/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java index 85402c0e254..9bdc05fe95c 100644 --- a/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java +++ b/server/src/test/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImplTest.java @@ -424,7 +424,7 @@ public class UnmanagedVMsManagerImplTest { ImportUnmanagedInstanceCmd importUnmanageInstanceCmd = Mockito.mock(ImportUnmanagedInstanceCmd.class); when(importUnmanageInstanceCmd.getName()).thenReturn("TestInstance"); when(importUnmanageInstanceCmd.getDomainId()).thenReturn(null); - when(volumeApiService.doesTargetStorageSupportDiskOffering(any(StoragePool.class), any())).thenReturn(true); + when(volumeApiService.doesStoragePoolSupportDiskOfferingTags(any(StoragePool.class), any())).thenReturn(true); try (MockedStatic ignored = Mockito.mockStatic(UsageEventUtils.class)) { unmanagedVMsManager.importUnmanagedInstance(importUnmanageInstanceCmd); } @@ -704,7 +704,7 @@ public class UnmanagedVMsManagerImplTest { when(agentManager.send(Mockito.eq(convertHostId), Mockito.any(CheckConvertInstanceCommand.class))).thenReturn(checkConvertInstanceAnswer); } - when(volumeApiService.doesTargetStorageSupportDiskOffering(any(StoragePool.class), any())).thenReturn(true); + when(volumeApiService.doesStoragePoolSupportDiskOfferingTags(any(StoragePool.class), any())).thenReturn(true); ConvertInstanceAnswer convertInstanceAnswer = mock(ConvertInstanceAnswer.class); ImportConvertedInstanceAnswer convertImportedInstanceAnswer = mock(ImportConvertedInstanceAnswer.class); @@ -769,7 +769,7 @@ public class UnmanagedVMsManagerImplTest { storagePools.add(storagePool); when(primaryDataStoreDao.findLocalStoragePoolsByHostAndTags(anyLong(), any())).thenReturn(storagePools); when(primaryDataStoreDao.findById(anyLong())).thenReturn(storagePool); - when(volumeApiService.doesTargetStorageSupportDiskOffering(any(StoragePool.class), any())).thenReturn(true); + when(volumeApiService.doesStoragePoolSupportDiskOfferingTags(any(StoragePool.class), any())).thenReturn(true); StoragePoolHostVO storagePoolHost = Mockito.mock(StoragePoolHostVO.class); when(storagePoolHostDao.findByPoolHost(anyLong(), anyLong())).thenReturn(storagePoolHost); try (MockedStatic ignored = Mockito.mockStatic(UsageEventUtils.class)) {