DaanHoogland commented on a change in pull request #2636: Fix limitation on tag matching in 'migrateVolume' with disk offering replacement URL: https://github.com/apache/cloudstack/pull/2636#discussion_r203406752
########## File path: server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java ########## @@ -2189,6 +2189,53 @@ protected void validateConditionsToReplaceDiskOfferingOfVolume(VolumeVO volume, s_logger.info(String.format("Changing disk offering to [uuid=%s] while migrating volume [uuid=%s, name=%s].", newDiskOffering.getUuid(), volume.getUuid(), volume.getName())); } + /** + * Checks if the target storage 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. + * + * <table border="1"> + * <tr> + * <th>#</th><th>Disk offering tags</th><th>Storage tags</th><th>Does the storage support the disk offering?</th> + * </tr> + * <body> + * <tr> + * <td>1</td><td>A,B</td><td>A</td><td>NO</td> + * </tr> + * <tr> + * <td>2</td><td>A,B,C</td><td>A,B,C,D,X</td><td>YES</td> + * </tr> + * <tr> + * <td>3</td><td>A,B,C</td><td>X,Y,Z</td><td>NO</td> + * </tr> + * <tr> + * <td>4</td><td>null</td><td>A,S,D</td><td>YES</td> + * </tr> + * <tr> + * <td>5</td><td>A</td><td>null</td><td>NO</td> + * </tr> + * <tr> + * <td>6</td><td>null</td><td>null</td><td>YES</td> + * </tr> + * </body> + * </table> + */ + protected boolean doesTargetStorageSupportNewDiskOffering(StoragePool destPool, DiskOfferingVO newDiskOffering) { Review comment: ok, nice subject: another valid usage is mutual dependent services. Or dependency injection. I this case my concern is that the implementation of tag matching is done in several places while it should be uniform and thus implemented centrally. doesTargetStorageASupportNewDiskOffering() is a specialisation of does_this_entities_tags_match_the_resource_it_is_going_to(entity, resource) which is applicable to volume/storage in case of new offering but also in case of migration, and is also applicable for vm-serviceoffering/host-cluster-pod etc. I cant' think of any others by head but these are surely there as well. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services