rafaelweingartner 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_r203420800
########## 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: This new method that I implemented is the consolidation of the logic of tag matching in ACS, which is not extracted in a specific method and spread around the code. That is one of the reasons why I “made the mistake” in one of the features I developed where the tag matching was being too strict (requiring all tags to match) and was not making sense to operation guys. To answer your question, yes this method can be used in other places. I am not sure if simply declaring the method in the interface will help much though. The person that is willing to consolidate these execution flow could do both, declare this method in the interface, and then use it in all of those places that you mentioned. What do you think? ---------------------------------------------------------------- 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