)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"43f4605c5879c35594ac4b0d4fbfb04fa80af86f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4023bd88_d03bd893","updated":"2026-06-19 10:12:43.000000000","message":"few comments inline","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"b1a5c3f760982b8f14fe24f718c72693c506fe32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"94e3fc30_df1fa460","updated":"2026-06-19 05:31:54.000000000","message":"recheck","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"c8357622aa398666d7791005294a6e7ed4fc3bd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a6c083a1_2d25a1a2","updated":"2026-06-19 08:25:20.000000000","message":"recheck","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7c0308f19215dc1bf38137baf482e16726cd0ad1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c9b3b473_d3c95c21","updated":"2026-06-18 18:27:49.000000000","message":"run-DellEMC PowerFlex-v4 CI","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e1d4756b64f1dd7d557236392ffe216171926c84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f1a5db87_54c2a53a","updated":"2026-06-19 11:11:17.000000000","message":"@rajatdhasmana@gmail.com thanks for the review, update the code, please review it when you get a time.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6621bc796088dca434cb1918c9773761fb63ec9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3cfc876f_43578437","updated":"2026-06-19 18:50:54.000000000","message":"My comments are addressed and powerflex CI is passing.\nOne small issue I\u0027ve with tests is that they look redundant but that\u0027s not a blocked for this.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"104bf139ad49a4caa3f2df241ef6cb36abb881a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"78795b1a_749fb4ec","updated":"2026-06-22 06:56:44.000000000","message":"Thanks for the review @rajatdhasmana@gmail.com,","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"9f82f2fbe127fd4040ce4dfde4c2a3b6a2670f8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"49406bc9_1e61a242","updated":"2026-06-19 11:34:01.000000000","message":"run-DellEMC PowerFlex-v4 CI","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"e283e9be1e1ff87806dbefa49343b428360ccb1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2fd2d36a_56c09bed","updated":"2026-08-28 11:36:00.000000000","message":"Please resolve merge conflicts","commit_id":"89e299de2fa5cb9ba601faf53e93b4abb6a24f17"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"25563a31feac2a60b48c6c26c8786c55a354f80c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"31cb8967_39077619","updated":"2026-09-03 09:31:15.000000000","message":"run Dell-EMC PowerFlex-v4 CI","commit_id":"6c910f56ec205ee9bd17a14e8787ec42fa1793e4"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"d7d71b60f4aac742ce23ee4cc131c4a616750b62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"151e1d28_d0a23900","updated":"2026-09-03 09:32:17.000000000","message":"run-DellEMC PowerFlex-v4 CI","commit_id":"6c910f56ec205ee9bd17a14e8787ec42fa1793e4"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bc7136fecffe4093f5f71da107e83e7af8e861a1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"73232308_8dd21051","updated":"2026-09-04 13:58:29.000000000","message":"Code and tests LGTM; the -1 is because I have some questions about the config option (see comments inline).","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6531b5fd7bdb3f9f90abdaddc4e09bb07da51b46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9cde842e_6bc5eb7e","updated":"2026-09-04 04:26:57.000000000","message":"Code changes LGTM, Dell Powerflex CI is passing.","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7a12297d1518258d3bab82163366265a3b532f7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a5519dd1_89c02572","updated":"2026-09-03 16:37:51.000000000","message":"recheck cinder-grenade-mn-sub-volbak  failed during devstack setup","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"8bd8d52d6fcb817e129878f1534a099b02275e65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0d043e17_01439795","in_reply_to":"73232308_8dd21051","updated":"2026-09-04 16:30:23.000000000","message":"Done","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"8abf99558ca5aed8897178e658f4a6d87e52bc65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6b7cbef1_9c8abba7","updated":"2026-09-07 19:49:21.000000000","message":"Looks like Brian\u0027s comments were addressed and powerflex CI is passing so LGTM.","commit_id":"29badd871e305bf5286293fb7f20dd69d6e3f17f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4a37c8926a99070c1963bd4bb69dcc0c43f56933","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7e585262_1690f812","updated":"2026-09-08 15:24:18.000000000","message":"Minor thing noted inline that you might as well address now instead of waiting for a followup.","commit_id":"29badd871e305bf5286293fb7f20dd69d6e3f17f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"628748a199cc17590e345ce5ceceaf4485501216","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"97e4bf11_a55ba3bf","updated":"2026-09-07 07:54:23.000000000","message":"recheck","commit_id":"29badd871e305bf5286293fb7f20dd69d6e3f17f"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"46fdcf60fbaf2d9cb2073e7806def7b98490a148","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3141d2a5_da5a62d9","in_reply_to":"7e585262_1690f812","updated":"2026-09-16 18:35:48.000000000","message":"Acknowledged","commit_id":"29badd871e305bf5286293fb7f20dd69d6e3f17f"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"1eb2e6cd5b227173c0d7b1c139ad45d4adc459b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"397e1291_14242afe","updated":"2026-09-16 18:46:18.000000000","message":"run-DellEMC PowerFlex-v5 CI","commit_id":"955ed795e51fa6be08f2dd57bac9167bc204b5c2"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"36c65dd16cab97f098a366dc221db2c5d90d84fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"106746b1_30e968d3","updated":"2026-09-22 14:55:56.000000000","message":"Can we have another +2 ?","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"de2cce03763d7107cf5a68df8c79dd7cb6f55b95","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"059e8d9f_abf52f51","updated":"2026-09-23 14:15:39.000000000","message":"I agree with Rajat\u0027s comments about the tests.  I think they need to be fixed now instead of as a followup, because some of them don\u0027t actually test what they need to test.","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f5f86068_7c7df6a4","updated":"2026-09-23 14:12:14.000000000","message":"I don\u0027t want to keep this patch hanging but the tests seem too off in testing the functionality. @rosmaita.fossdev@gmail.com what do you think if these test changes could be a followup?","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b5e75663ec7ec76eb62d703937783114babbbeae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f2112e6c_8e6d1ddb","updated":"2026-09-17 16:16:09.000000000","message":"My concerns have been addressed; code and tests LGTM.","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3388a790a24f60b94136f0750be44c533df908ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"323fb7d9_2dfe34b5","updated":"2026-09-23 19:10:40.000000000","message":"Since the consensus on this is not to move forward until the test validation logic is fixed, changing my vote to a -1 to get more attention.","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3a922862bc0692efd9ae3a485051f5a6572af47c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2ba9d6a9_4df1d5e5","updated":"2026-09-17 16:15:03.000000000","message":"powerflex-v5-cinder-tempest and powerflex-nvme-tcp-cinder-tempest passed, but powerflex-v4-cinder-tempest failed\n\nfailure is tempest.scenario.test_volume_boot_pattern.TestVolumeBootPattern.test_volume_boot_pattern -- looks like something went wrong with the instance, so pretty sure it\u0027s not related to this patch\n\nOn the other hand, it would be nice to see both v4 and v5 pass since this patch affects both versions","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"440b1059c3a6655cf81b82dbb1498be5e82d8df8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b69839cb_5a24ff9b","updated":"2026-09-17 16:15:17.000000000","message":"run-DellEMC PowerFlex CI","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"6264a0506bef87e3d6bb8531a1e0b58e63111871","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"bfdd503c_5d002ac5","updated":"2026-09-17 18:25:36.000000000","message":"run-DellEMC PowerFlex-v4 CI","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d7c4559ec0a52632d6c95a32e4f640883fc1e0f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b2efdaf1_f22e7ab3","updated":"2026-09-18 14:30:36.000000000","message":"run-DellEMC PowerFlex-v5 CI","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"9835daf38fd79542e2d9ae9004d880242d244754","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d3f66d8c_97484459","updated":"2026-09-17 18:12:11.000000000","message":"un-DellEMC PowerFlex-v4 CI","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5889d78c4697a1e67a911450b1995115a7211ba1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"384d6677_5a8a2684","updated":"2026-09-24 12:35:42.000000000","message":"The tests have been improved, but see comments inline.","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"9921e656348022da0f6075811c1fe9985f704544","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2d7d579c_6ba5731b","updated":"2026-09-24 10:55:40.000000000","message":"run-DellEMC PowerFlex-v5 CI","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"45d51785c9319738df533da70ccc3e2cb383f922","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"4acb0c96_55ece250","updated":"2026-09-29 05:51:23.000000000","message":"My concerns with tests are addressed, thanks Nilesh, LGTM.","commit_id":"fb5e9608d4a8cd1c2513a4da771e566d9cf17d8b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6bda16fc2d10135e7fb492c41af3c92107e118da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d90be4aa_9d73ac82","updated":"2026-09-29 14:12:54.000000000","message":"Revisions LGTM.","commit_id":"fb5e9608d4a8cd1c2513a4da771e566d9cf17d8b"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"5a6ff2d229d4621a0139b2d58763849f79c4a38d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"03934533_925e1b19","updated":"2026-09-25 11:27:16.000000000","message":"run-DellEMC PowerFlex-v5 CI","commit_id":"fb5e9608d4a8cd1c2513a4da771e566d9cf17d8b"}],"cinder/tests/unit/volume/drivers/dell_emc/powerflex/test_create_cloned_volume.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6621bc796088dca434cb1918c9773761fb63ec9","unresolved":true,"context_lines":[{"line_number":318,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":319,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":322,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":323,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":324,"context_line":"                \u0027PowerFlexDriver._get_client\u0027)"},{"line_number":325,"context_line":"    def test_create_cloned_volume_image_cache_excludes_root("},{"line_number":326,"context_line":"            self, mock_client, mock_create):"},{"line_number":327,"context_line":"        \"\"\"Test that the root cache volume itself is not counted."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        The root volume has ancestorVolumeId\u003dNone (or missing) and should"},{"line_number":330,"context_line":"        not be included in the direct children count."},{"line_number":331,"context_line":"        \"\"\""},{"line_number":332,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":333,"context_line":"        mock_create.return_value \u003d {}"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        # Set clone limit to 5"},{"line_number":336,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE, 5,"},{"line_number":337,"context_line":"                             configuration.SHARED_CONF_GROUP)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        mock_rest_client \u003d mock.Mock()"},{"line_number":340,"context_line":"        mock_client.return_value \u003d mock_rest_client"},{"line_number":341,"context_line":"        mock_rest_client.query_volume.return_value \u003d {"},{"line_number":342,"context_line":"            \u0027vtreeId\u0027: \u0027test_vtree_id\u0027"},{"line_number":343,"context_line":"        }"},{"line_number":344,"context_line":"        # Root volume + 3 direct children"},{"line_number":345,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":346,"context_line":"        mock_rest_client.query_vtree_volumes.return_value \u003d ["},{"line_number":347,"context_line":"            {\u0027id\u0027: src_provider_id, \u0027ancestorVolumeId\u0027: None},"},{"line_number":348,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":349,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":350,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":351,"context_line":"        ]"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        with mock.patch(\u0027cinder.volume.volume_utils.is_image_cache_entry\u0027,"},{"line_number":354,"context_line":"                        return_value\u003dTrue):"},{"line_number":355,"context_line":"            # Count should be 3, not 4 (root excluded)"},{"line_number":356,"context_line":"            self.driver.create_cloned_volume(self.new_volume, self.src_volume)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        mock_rest_client.query_vtree_volumes.assert_called_once_with("},{"line_number":359,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":360,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":363,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"821af3d6_dc866d24","line":360,"range":{"start_line":321,"start_character":0,"end_line":360,"end_character":77},"updated":"2026-06-19 18:50:54.000000000","message":"the test above (test_create_cloned_volume_image_cache_excludes_grandchildren) tests both excluding grandchildren and also root right? I\u0027m not against this extra test but just thinking about the value add it brings","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"104bf139ad49a4caa3f2df241ef6cb36abb881a9","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":319,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":322,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":323,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":324,"context_line":"                \u0027PowerFlexDriver._get_client\u0027)"},{"line_number":325,"context_line":"    def test_create_cloned_volume_image_cache_excludes_root("},{"line_number":326,"context_line":"            self, mock_client, mock_create):"},{"line_number":327,"context_line":"        \"\"\"Test that the root cache volume itself is not counted."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        The root volume has ancestorVolumeId\u003dNone (or missing) and should"},{"line_number":330,"context_line":"        not be included in the direct children count."},{"line_number":331,"context_line":"        \"\"\""},{"line_number":332,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":333,"context_line":"        mock_create.return_value \u003d {}"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        # Set clone limit to 5"},{"line_number":336,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE, 5,"},{"line_number":337,"context_line":"                             configuration.SHARED_CONF_GROUP)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        mock_rest_client \u003d mock.Mock()"},{"line_number":340,"context_line":"        mock_client.return_value \u003d mock_rest_client"},{"line_number":341,"context_line":"        mock_rest_client.query_volume.return_value \u003d {"},{"line_number":342,"context_line":"            \u0027vtreeId\u0027: \u0027test_vtree_id\u0027"},{"line_number":343,"context_line":"        }"},{"line_number":344,"context_line":"        # Root volume + 3 direct children"},{"line_number":345,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":346,"context_line":"        mock_rest_client.query_vtree_volumes.return_value \u003d ["},{"line_number":347,"context_line":"            {\u0027id\u0027: src_provider_id, \u0027ancestorVolumeId\u0027: None},"},{"line_number":348,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":349,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":350,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":351,"context_line":"        ]"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        with mock.patch(\u0027cinder.volume.volume_utils.is_image_cache_entry\u0027,"},{"line_number":354,"context_line":"                        return_value\u003dTrue):"},{"line_number":355,"context_line":"            # Count should be 3, not 4 (root excluded)"},{"line_number":356,"context_line":"            self.driver.create_cloned_volume(self.new_volume, self.src_volume)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        mock_rest_client.query_vtree_volumes.assert_called_once_with("},{"line_number":359,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":360,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":363,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8fbc6f74_566a87c5","line":360,"range":{"start_line":321,"start_character":0,"end_line":360,"end_character":77},"in_reply_to":"821af3d6_dc866d24","updated":"2026-06-22 06:56:44.000000000","message":"It covers how the code will behave when there is no grandchild.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"104bf139ad49a4caa3f2df241ef6cb36abb881a9","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":319,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":322,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":323,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":324,"context_line":"                \u0027PowerFlexDriver._get_client\u0027)"},{"line_number":325,"context_line":"    def test_create_cloned_volume_image_cache_excludes_root("},{"line_number":326,"context_line":"            self, mock_client, mock_create):"},{"line_number":327,"context_line":"        \"\"\"Test that the root cache volume itself is not counted."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        The root volume has ancestorVolumeId\u003dNone (or missing) and should"},{"line_number":330,"context_line":"        not be included in the direct children count."},{"line_number":331,"context_line":"        \"\"\""},{"line_number":332,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":333,"context_line":"        mock_create.return_value \u003d {}"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        # Set clone limit to 5"},{"line_number":336,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE, 5,"},{"line_number":337,"context_line":"                             configuration.SHARED_CONF_GROUP)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        mock_rest_client \u003d mock.Mock()"},{"line_number":340,"context_line":"        mock_client.return_value \u003d mock_rest_client"},{"line_number":341,"context_line":"        mock_rest_client.query_volume.return_value \u003d {"},{"line_number":342,"context_line":"            \u0027vtreeId\u0027: \u0027test_vtree_id\u0027"},{"line_number":343,"context_line":"        }"},{"line_number":344,"context_line":"        # Root volume + 3 direct children"},{"line_number":345,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":346,"context_line":"        mock_rest_client.query_vtree_volumes.return_value \u003d ["},{"line_number":347,"context_line":"            {\u0027id\u0027: src_provider_id, \u0027ancestorVolumeId\u0027: None},"},{"line_number":348,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":349,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":350,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":351,"context_line":"        ]"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        with mock.patch(\u0027cinder.volume.volume_utils.is_image_cache_entry\u0027,"},{"line_number":354,"context_line":"                        return_value\u003dTrue):"},{"line_number":355,"context_line":"            # Count should be 3, not 4 (root excluded)"},{"line_number":356,"context_line":"            self.driver.create_cloned_volume(self.new_volume, self.src_volume)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        mock_rest_client.query_vtree_volumes.assert_called_once_with("},{"line_number":359,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":360,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":363,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d5eac921_68c95d92","line":360,"range":{"start_line":321,"start_character":0,"end_line":360,"end_character":77},"in_reply_to":"821af3d6_dc866d24","updated":"2026-06-22 06:56:44.000000000","message":"It covers how the code will behave when there is no grandchild.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6621bc796088dca434cb1918c9773761fb63ec9","unresolved":true,"context_lines":[{"line_number":393,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":394,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":397,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":398,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":399,"context_line":"                \u0027PowerFlexDriver._get_client\u0027)"},{"line_number":400,"context_line":"    def test_create_cloned_volume_image_cache_mixed_descendants("},{"line_number":401,"context_line":"            self, mock_client, mock_create):"},{"line_number":402,"context_line":"        \"\"\"Test correct count with mixed direct children and descendants."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        vTree has 3 direct children + 5 grandchildren + 2 great-grandchildren."},{"line_number":405,"context_line":"        Only the 3 direct children should be counted."},{"line_number":406,"context_line":"        \"\"\""},{"line_number":407,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":408,"context_line":"        mock_create.return_value \u003d {}"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE, 5,"},{"line_number":411,"context_line":"                             configuration.SHARED_CONF_GROUP)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        mock_rest_client \u003d mock.Mock()"},{"line_number":414,"context_line":"        mock_client.return_value \u003d mock_rest_client"},{"line_number":415,"context_line":"        mock_rest_client.query_volume.return_value \u003d {"},{"line_number":416,"context_line":"            \u0027vtreeId\u0027: \u0027test_vtree_id\u0027"},{"line_number":417,"context_line":"        }"},{"line_number":418,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":419,"context_line":"        mock_rest_client.query_vtree_volumes.return_value \u003d ["},{"line_number":420,"context_line":"            {\u0027id\u0027: \u0027root\u0027, \u0027ancestorVolumeId\u0027: None},"},{"line_number":421,"context_line":"            # 3 direct children"},{"line_number":422,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":423,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":424,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":425,"context_line":"            # 5 grandchildren (children of child_1 and child_2)"},{"line_number":426,"context_line":"            {\u0027id\u0027: \u0027gc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":427,"context_line":"            {\u0027id\u0027: \u0027gc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":428,"context_line":"            {\u0027id\u0027: \u0027gc_3\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":429,"context_line":"            {\u0027id\u0027: \u0027gc_4\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":430,"context_line":"            {\u0027id\u0027: \u0027gc_5\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":431,"context_line":"            # 2 great-grandchildren"},{"line_number":432,"context_line":"            {\u0027id\u0027: \u0027ggc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_1\u0027},"},{"line_number":433,"context_line":"            {\u0027id\u0027: \u0027ggc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_3\u0027},"},{"line_number":434,"context_line":"        ]"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        with mock.patch(\u0027cinder.volume.volume_utils.is_image_cache_entry\u0027,"},{"line_number":437,"context_line":"                        return_value\u003dTrue):"},{"line_number":438,"context_line":"            # Count \u003d 3 direct children, which is \u003c 5 limit"},{"line_number":439,"context_line":"            self.driver.create_cloned_volume(self.new_volume, self.src_volume)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        mock_rest_client.query_vtree_volumes.assert_called_once_with("},{"line_number":442,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":443,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":446,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":447,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5658a2bd_ddc373c7","line":444,"range":{"start_line":396,"start_character":0,"end_line":444,"end_character":0},"updated":"2026-06-19 18:50:54.000000000","message":"I feel all of these tests could be part of one test with all the different cases being called by different test methods like\n\n    def _test_create_cloned_volume_image_cache(...):\n        ....\n        \n    def test_create_cloned_volume_image_cache_mixed_descendants(...):\n        call _test_create_cloned_volume_image_cache with different data dict","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"e7d715b99c704f091dc1ff644f9acdbffabb8746","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":394,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":397,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":398,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":399,"context_line":"                \u0027PowerFlexDriver._get_client\u0027)"},{"line_number":400,"context_line":"    def test_create_cloned_volume_image_cache_mixed_descendants("},{"line_number":401,"context_line":"            self, mock_client, mock_create):"},{"line_number":402,"context_line":"        \"\"\"Test correct count with mixed direct children and descendants."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        vTree has 3 direct children + 5 grandchildren + 2 great-grandchildren."},{"line_number":405,"context_line":"        Only the 3 direct children should be counted."},{"line_number":406,"context_line":"        \"\"\""},{"line_number":407,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":408,"context_line":"        mock_create.return_value \u003d {}"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE, 5,"},{"line_number":411,"context_line":"                             configuration.SHARED_CONF_GROUP)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        mock_rest_client \u003d mock.Mock()"},{"line_number":414,"context_line":"        mock_client.return_value \u003d mock_rest_client"},{"line_number":415,"context_line":"        mock_rest_client.query_volume.return_value \u003d {"},{"line_number":416,"context_line":"            \u0027vtreeId\u0027: \u0027test_vtree_id\u0027"},{"line_number":417,"context_line":"        }"},{"line_number":418,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":419,"context_line":"        mock_rest_client.query_vtree_volumes.return_value \u003d ["},{"line_number":420,"context_line":"            {\u0027id\u0027: \u0027root\u0027, \u0027ancestorVolumeId\u0027: None},"},{"line_number":421,"context_line":"            # 3 direct children"},{"line_number":422,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":423,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":424,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":425,"context_line":"            # 5 grandchildren (children of child_1 and child_2)"},{"line_number":426,"context_line":"            {\u0027id\u0027: \u0027gc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":427,"context_line":"            {\u0027id\u0027: \u0027gc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":428,"context_line":"            {\u0027id\u0027: \u0027gc_3\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":429,"context_line":"            {\u0027id\u0027: \u0027gc_4\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":430,"context_line":"            {\u0027id\u0027: \u0027gc_5\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":431,"context_line":"            # 2 great-grandchildren"},{"line_number":432,"context_line":"            {\u0027id\u0027: \u0027ggc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_1\u0027},"},{"line_number":433,"context_line":"            {\u0027id\u0027: \u0027ggc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_3\u0027},"},{"line_number":434,"context_line":"        ]"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        with mock.patch(\u0027cinder.volume.volume_utils.is_image_cache_entry\u0027,"},{"line_number":437,"context_line":"                        return_value\u003dTrue):"},{"line_number":438,"context_line":"            # Count \u003d 3 direct children, which is \u003c 5 limit"},{"line_number":439,"context_line":"            self.driver.create_cloned_volume(self.new_volume, self.src_volume)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        mock_rest_client.query_vtree_volumes.assert_called_once_with("},{"line_number":442,"context_line":"            \u0027test_vtree_id\u0027)"},{"line_number":443,"context_line":"        mock_create.assert_called_once_with(self.new_volume, self.src_volume)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":446,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"},{"line_number":447,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"39179509_44272af3","line":444,"range":{"start_line":396,"start_character":0,"end_line":444,"end_character":0},"in_reply_to":"5658a2bd_ddc373c7","updated":"2026-08-25 09:47:12.000000000","message":"Done","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":true,"context_lines":[{"line_number":227,"context_line":"        ]"},{"line_number":228,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":229,"context_line":"                                                    max_size\u003d20,"},{"line_number":230,"context_line":"                                                    expect_raises\u003dTrue)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":233,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"429b8499_c43cca07","line":230,"range":{"start_line":230,"start_character":52,"end_line":230,"end_character":70},"updated":"2026-09-23 14:12:14.000000000","message":"nit: passing this explicitly is very confusing from test perspective, better was to check this in helper method by comparing len(vtree_volumes) \u003e\u003d max_size","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"a3bffee16cacd7c37d683f7f6ed99aa26f011f03","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        ]"},{"line_number":228,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":229,"context_line":"                                                    max_size\u003d20,"},{"line_number":230,"context_line":"                                                    expect_raises\u003dTrue)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":233,"context_line":"                \u0027PowerFlexDriver._create_volume_from_source\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"f7acbfdd_07ec6632","line":230,"range":{"start_line":230,"start_character":52,"end_line":230,"end_character":70},"in_reply_to":"429b8499_c43cca07","updated":"2026-09-24 05:41:23.000000000","message":"Done","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":true,"context_lines":[{"line_number":296,"context_line":"        \"\"\""},{"line_number":297,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":298,"context_line":"        vtree_volumes \u003d ["},{"line_number":299,"context_line":"            {\u0027id\u0027: src_provider_id, \u0027ancestorVolumeId\u0027: None},"},{"line_number":300,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":301,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":302,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":303,"context_line":"        ]"},{"line_number":304,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":305,"context_line":"                                                    max_size\u003d5)"}],"source_content_type":"text/x-python","patch_set":8,"id":"a6593ac3_d268cf55","line":302,"range":{"start_line":299,"start_character":0,"end_line":302,"end_character":67},"updated":"2026-09-23 14:12:14.000000000","message":"we should have 4 children here for this test to make sense right? even with the root volume included it counts to 4 volumes so still doesn\u0027t reach the max_size","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"a3bffee16cacd7c37d683f7f6ed99aa26f011f03","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        \"\"\""},{"line_number":297,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":298,"context_line":"        vtree_volumes \u003d ["},{"line_number":299,"context_line":"            {\u0027id\u0027: src_provider_id, \u0027ancestorVolumeId\u0027: None},"},{"line_number":300,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":301,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":302,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":303,"context_line":"        ]"},{"line_number":304,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":305,"context_line":"                                                    max_size\u003d5)"}],"source_content_type":"text/x-python","patch_set":8,"id":"a41a410b_2e14e3db","line":302,"range":{"start_line":299,"start_character":0,"end_line":302,"end_character":67},"in_reply_to":"a6593ac3_d268cf55","updated":"2026-09-24 05:41:23.000000000","message":"Done","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":true,"context_lines":[{"line_number":304,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":305,"context_line":"                                                    max_size\u003d5)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def test_create_cloned_volume_image_cache_empty_vtree(self):"},{"line_number":308,"context_line":"        \"\"\"Test cloning when vtree has only the root volume (no children)."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        An empty vtree (root only) should have count\u003d0 and proceed."},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        vtree_volumes \u003d ["},{"line_number":313,"context_line":"            {\u0027id\u0027: \u0027root_vol\u0027, \u0027ancestorVolumeId\u0027: None},"},{"line_number":314,"context_line":"        ]"},{"line_number":315,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":316,"context_line":"                                                    max_size\u003d20)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def test_create_cloned_volume_image_cache_mixed_descendants(self):"},{"line_number":319,"context_line":"        \"\"\"Test correct count with mixed direct children and descendants."}],"source_content_type":"text/x-python","patch_set":8,"id":"dc3fa2c4_b4ea6e90","line":316,"range":{"start_line":307,"start_character":0,"end_line":316,"end_character":64},"updated":"2026-09-23 14:12:14.000000000","message":"not sure how helpful this test is but good to cover all edge cases","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"a3bffee16cacd7c37d683f7f6ed99aa26f011f03","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":305,"context_line":"                                                    max_size\u003d5)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def test_create_cloned_volume_image_cache_empty_vtree(self):"},{"line_number":308,"context_line":"        \"\"\"Test cloning when vtree has only the root volume (no children)."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        An empty vtree (root only) should have count\u003d0 and proceed."},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        vtree_volumes \u003d ["},{"line_number":313,"context_line":"            {\u0027id\u0027: \u0027root_vol\u0027, \u0027ancestorVolumeId\u0027: None},"},{"line_number":314,"context_line":"        ]"},{"line_number":315,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":316,"context_line":"                                                    max_size\u003d20)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def test_create_cloned_volume_image_cache_mixed_descendants(self):"},{"line_number":319,"context_line":"        \"\"\"Test correct count with mixed direct children and descendants."}],"source_content_type":"text/x-python","patch_set":8,"id":"58030584_7f52f825","line":316,"range":{"start_line":307,"start_character":0,"end_line":316,"end_character":64},"in_reply_to":"dc3fa2c4_b4ea6e90","updated":"2026-09-24 05:41:23.000000000","message":"Done","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":true,"context_lines":[{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":325,"context_line":"        vtree_volumes \u003d ["},{"line_number":326,"context_line":"            {\u0027id\u0027: \u0027root\u0027, \u0027ancestorVolumeId\u0027: None},"},{"line_number":327,"context_line":"            # 3 direct children"},{"line_number":328,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":329,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":330,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":331,"context_line":"            # 5 grandchildren (children of child_1 and child_2)"},{"line_number":332,"context_line":"            {\u0027id\u0027: \u0027gc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":333,"context_line":"            {\u0027id\u0027: \u0027gc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":334,"context_line":"            {\u0027id\u0027: \u0027gc_3\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":335,"context_line":"            {\u0027id\u0027: \u0027gc_4\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":336,"context_line":"            {\u0027id\u0027: \u0027gc_5\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":337,"context_line":"            # 2 great-grandchildren"},{"line_number":338,"context_line":"            {\u0027id\u0027: \u0027ggc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_1\u0027},"},{"line_number":339,"context_line":"            {\u0027id\u0027: \u0027ggc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_3\u0027},"},{"line_number":340,"context_line":"        ]"},{"line_number":341,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":342,"context_line":"                                                    max_size\u003d5)"}],"source_content_type":"text/x-python","patch_set":8,"id":"0af49d50_6e6e82b7","line":339,"range":{"start_line":326,"start_character":0,"end_line":339,"end_character":56},"updated":"2026-09-23 14:12:14.000000000","message":"This could have been part of test_create_cloned_volume_image_cache_excludes_grandchildren, I don\u0027t see much reason to create a separate test repeating most of the data values","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"a3bffee16cacd7c37d683f7f6ed99aa26f011f03","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":325,"context_line":"        vtree_volumes \u003d ["},{"line_number":326,"context_line":"            {\u0027id\u0027: \u0027root\u0027, \u0027ancestorVolumeId\u0027: None},"},{"line_number":327,"context_line":"            # 3 direct children"},{"line_number":328,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":329,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":330,"context_line":"            {\u0027id\u0027: \u0027child_3\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":331,"context_line":"            # 5 grandchildren (children of child_1 and child_2)"},{"line_number":332,"context_line":"            {\u0027id\u0027: \u0027gc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":333,"context_line":"            {\u0027id\u0027: \u0027gc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027child_1\u0027},"},{"line_number":334,"context_line":"            {\u0027id\u0027: \u0027gc_3\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":335,"context_line":"            {\u0027id\u0027: \u0027gc_4\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":336,"context_line":"            {\u0027id\u0027: \u0027gc_5\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":337,"context_line":"            # 2 great-grandchildren"},{"line_number":338,"context_line":"            {\u0027id\u0027: \u0027ggc_1\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_1\u0027},"},{"line_number":339,"context_line":"            {\u0027id\u0027: \u0027ggc_2\u0027, \u0027ancestorVolumeId\u0027: \u0027gc_3\u0027},"},{"line_number":340,"context_line":"        ]"},{"line_number":341,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":342,"context_line":"                                                    max_size\u003d5)"}],"source_content_type":"text/x-python","patch_set":8,"id":"e58de166_03fa1095","line":339,"range":{"start_line":326,"start_character":0,"end_line":339,"end_character":56},"in_reply_to":"0af49d50_6e6e82b7","updated":"2026-09-24 05:41:23.000000000","message":"Done","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":true,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_create_cloned_volume_image_cache_no_ancestor_field(self):"},{"line_number":345,"context_line":"        \"\"\"Test handling of volumes missing the ancestorVolumeId field."},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        Volumes without ancestorVolumeId should not match the filter and"},{"line_number":348,"context_line":"        should not be counted as direct children."},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":351,"context_line":"        vtree_volumes \u003d ["},{"line_number":352,"context_line":"            {\u0027id\u0027: \u0027root\u0027},  # No ancestorVolumeId key"},{"line_number":353,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":354,"context_line":"            {\u0027id\u0027: \u0027orphan\u0027, \u0027ancestorVolumeId\u0027: \u0027unknown_parent\u0027},"},{"line_number":355,"context_line":"        ]"},{"line_number":356,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":357,"context_line":"                                                    max_size\u003d20)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def test_create_cloned_volume_image_cache_vtree_volumes_api_call(self):"},{"line_number":360,"context_line":"        \"\"\"Integration: verify query_vtree_volumes called with correct ID."}],"source_content_type":"text/x-python","patch_set":8,"id":"6e243e39_13f390a0","line":357,"range":{"start_line":346,"start_character":0,"end_line":357,"end_character":64},"updated":"2026-09-23 14:12:14.000000000","message":"This test is currently not validating what is mentioned in the docstring.\nTo properly validate the scenario, we should set max_size\u003d2 and then we can see if only child_1 is counted, if orphan was counted then this test would fail (which is the correct way to validate this)","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"a3bffee16cacd7c37d683f7f6ed99aa26f011f03","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_create_cloned_volume_image_cache_no_ancestor_field(self):"},{"line_number":345,"context_line":"        \"\"\"Test handling of volumes missing the ancestorVolumeId field."},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        Volumes without ancestorVolumeId should not match the filter and"},{"line_number":348,"context_line":"        should not be counted as direct children."},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":351,"context_line":"        vtree_volumes \u003d ["},{"line_number":352,"context_line":"            {\u0027id\u0027: \u0027root\u0027},  # No ancestorVolumeId key"},{"line_number":353,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},"},{"line_number":354,"context_line":"            {\u0027id\u0027: \u0027orphan\u0027, \u0027ancestorVolumeId\u0027: \u0027unknown_parent\u0027},"},{"line_number":355,"context_line":"        ]"},{"line_number":356,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":357,"context_line":"                                                    max_size\u003d20)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def test_create_cloned_volume_image_cache_vtree_volumes_api_call(self):"},{"line_number":360,"context_line":"        \"\"\"Integration: verify query_vtree_volumes called with correct ID."}],"source_content_type":"text/x-python","patch_set":8,"id":"33d57005_d36b861a","line":357,"range":{"start_line":346,"start_character":0,"end_line":357,"end_character":64},"in_reply_to":"6e243e39_13f390a0","updated":"2026-09-24 05:41:23.000000000","message":"Done","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"47770640409ca8da780862ef2c728a2b36b97493","unresolved":true,"context_lines":[{"line_number":374,"context_line":"    def test_create_cloned_volume_image_cache_limit_with_grandchildren(self):"},{"line_number":375,"context_line":"        \"\"\"Integration: limit enforced on direct children, not grandchildren."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        With 20 direct children and 10 grandchildren (30 total), limit"},{"line_number":378,"context_line":"        should trigger on the 20 direct children count, not the 30 total."},{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"1e95d5a8_1c1a6db8","line":377,"range":{"start_line":377,"start_character":0,"end_line":377,"end_character":70},"updated":"2026-09-23 14:12:14.000000000","message":"the same limit could be exercised in any of the existing test where we exclude grandchildren like test_create_cloned_volume_image_cache_excludes_grandchildren? Why require a separate test for this.","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"a3bffee16cacd7c37d683f7f6ed99aa26f011f03","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    def test_create_cloned_volume_image_cache_limit_with_grandchildren(self):"},{"line_number":375,"context_line":"        \"\"\"Integration: limit enforced on direct children, not grandchildren."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        With 20 direct children and 10 grandchildren (30 total), limit"},{"line_number":378,"context_line":"        should trigger on the 20 direct children count, not the 30 total."},{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"a6979ebf_22aeacd9","line":377,"range":{"start_line":377,"start_character":0,"end_line":377,"end_character":70},"in_reply_to":"1e95d5a8_1c1a6db8","updated":"2026-09-24 05:41:23.000000000","message":"Done","commit_id":"554d517f40aac45bc149b45511f30d0cee744633"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5889d78c4697a1e67a911450b1995115a7211ba1","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":161,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":162,"context_line":"                             max_size, configuration.SHARED_CONF_GROUP)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Calculate expected direct children count"},{"line_number":165,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":166,"context_line":"        expected_direct_children \u003d sum("},{"line_number":167,"context_line":"            1 for v in vtree_volumes"},{"line_number":168,"context_line":"            if v.get(\u0027ancestorVolumeId\u0027) \u003d\u003d src_provider_id"},{"line_number":169,"context_line":"        )"},{"line_number":170,"context_line":"        expect_raises \u003d expected_direct_children \u003e\u003d max_size"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        with mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":173,"context_line":"                        \u0027PowerFlexDriver._get_client\u0027) as mock_client, \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"2b6ddb5f_1f3f73b7","line":170,"range":{"start_line":163,"start_character":1,"end_line":170,"end_character":60},"updated":"2026-09-24 12:35:42.000000000","message":"I\u0027d prefer that this be passed in as part of the data, for 2 reasons: (1) it\u0027s hidden in here, whereas if you\u0027re looking at the data, the reader can easily check it; (2) how do you know this calculation is correct?","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"fad2b9d801ff64fd234653a4664665e31c7592c3","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.set_https_response_mode(self.RESPONSE_MODE.Valid)"},{"line_number":161,"context_line":"        self.override_config(options.POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":162,"context_line":"                             max_size, configuration.SHARED_CONF_GROUP)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Calculate expected direct children count"},{"line_number":165,"context_line":"        src_provider_id \u003d self.src_volume.provider_id"},{"line_number":166,"context_line":"        expected_direct_children \u003d sum("},{"line_number":167,"context_line":"            1 for v in vtree_volumes"},{"line_number":168,"context_line":"            if v.get(\u0027ancestorVolumeId\u0027) \u003d\u003d src_provider_id"},{"line_number":169,"context_line":"        )"},{"line_number":170,"context_line":"        expect_raises \u003d expected_direct_children \u003e\u003d max_size"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        with mock.patch(\u0027cinder.volume.drivers.dell_emc.powerflex.driver.\u0027"},{"line_number":173,"context_line":"                        \u0027PowerFlexDriver._get_client\u0027) as mock_client, \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"843aafc8_ada85892","line":170,"range":{"start_line":163,"start_character":1,"end_line":170,"end_character":60},"in_reply_to":"2b6ddb5f_1f3f73b7","updated":"2026-09-25 06:25:27.000000000","message":"Agreed.\nRemoved the dynamic computation of expect_raises from the helper and made it a required positional parameter.","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5889d78c4697a1e67a911450b1995115a7211ba1","unresolved":true,"context_lines":[{"line_number":291,"context_line":"            {\u0027id\u0027: \u0027grandchild_8\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":292,"context_line":"        ]"},{"line_number":293,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":294,"context_line":"                                                    max_size\u003d5)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_create_cloned_volume_image_cache_filtering_edge_cases(self):"},{"line_number":297,"context_line":"        \"\"\"Test comprehensive filtering edge cases."}],"source_content_type":"text/x-python","patch_set":9,"id":"a5b0d44e_55e908c9","line":294,"range":{"start_line":294,"start_character":52,"end_line":294,"end_character":62},"updated":"2026-09-24 12:35:42.000000000","message":"how do you know that all grandchildren are being excluded?  The data has 2 children, but we\u0027re allowing 5, so couldn\u0027t a grandchild be included without raising?","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"fad2b9d801ff64fd234653a4664665e31c7592c3","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            {\u0027id\u0027: \u0027grandchild_8\u0027, \u0027ancestorVolumeId\u0027: \u0027child_2\u0027},"},{"line_number":292,"context_line":"        ]"},{"line_number":293,"context_line":"        self._test_create_cloned_volume_image_cache(vtree_volumes,"},{"line_number":294,"context_line":"                                                    max_size\u003d5)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_create_cloned_volume_image_cache_filtering_edge_cases(self):"},{"line_number":297,"context_line":"        \"\"\"Test comprehensive filtering edge cases."}],"source_content_type":"text/x-python","patch_set":9,"id":"ee4154e3_4499e115","line":294,"range":{"start_line":294,"start_character":52,"end_line":294,"end_character":62},"in_reply_to":"a5b0d44e_55e908c9","updated":"2026-09-25 06:25:27.000000000","message":"Changed max_size from 5 to 3. Now the margin is tight enough that if even a single grandchild were incorrectly counted (2+1\u003d3 \u003e\u003d 3), the test would fail with an unexpected SnapshotLimitReached, proving grandchild exclusion works.","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5f98a887612e24edcb73eada40935d150ecd2a8b","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        vtree_volumes \u003d ["},{"line_number":308,"context_line":"            {\u0027id\u0027: \u0027root_vol\u0027, \u0027ancestorVolumeId\u0027: None},  # Root excluded"},{"line_number":309,"context_line":"            {\u0027id\u0027: \u0027root_no_field\u0027},  # Missing field excluded"},{"line_number":310,"context_line":"            {\u0027id\u0027: \u0027root_none_value\u0027, \u0027ancestorVolumeId\u0027: None},  # None value excluded"},{"line_number":311,"context_line":"            {\u0027id\u0027: \u0027child_1\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},  # Counted"},{"line_number":312,"context_line":"            {\u0027id\u0027: \u0027child_2\u0027, \u0027ancestorVolumeId\u0027: src_provider_id},  # Counted"},{"line_number":313,"context_line":"            {\u0027id\u0027: \u0027orphan\u0027, \u0027ancestorVolumeId\u0027: \u0027unknown_parent\u0027},  # Excluded"}],"source_content_type":"text/x-python","patch_set":9,"id":"65aadc32_bc907e3b","line":310,"updated":"2026-09-24 07:42:07.000000000","message":"pep8: E501 line too long (87 \u003e 79 characters)","commit_id":"3edc41259a5cebc6106a2acefdb36b24cbd92e4f"}],"cinder/volume/drivers/dell_emc/powerflex/driver.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"43f4605c5879c35594ac4b0d4fbfb04fa80af86f","unresolved":true,"context_lines":[{"line_number":891,"context_line":"            volume_info \u003d client.query_volume(src_vref.provider_id)"},{"line_number":892,"context_line":"            vtree_id \u003d volume_info[\"vtreeId\"]"},{"line_number":893,"context_line":"            vtree_volumes \u003d client.query_vtree_volumes(vtree_id)"},{"line_number":894,"context_line":"            direct_children \u003d ["},{"line_number":895,"context_line":"                v for v in vtree_volumes"},{"line_number":896,"context_line":"                if v.get(\"ancestorVolumeId\") \u003d\u003d src_vref.provider_id"},{"line_number":897,"context_line":"            ]"},{"line_number":898,"context_line":"            if len(direct_children) \u003e\u003d max_size:"},{"line_number":899,"context_line":"                raise exception.SnapshotLimitReached(set_limit\u003dmax_size)"},{"line_number":900,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":901,"context_line":"            LOG.warning(\"Failed to query vTree volumes for image \""},{"line_number":902,"context_line":"                        \"cache volume %(vol_id)s. Proceeding with clone.\","}],"source_content_type":"text/x-python","patch_set":1,"id":"067513b0_f3c365aa","line":899,"range":{"start_line":894,"start_character":0,"end_line":899,"end_character":72},"updated":"2026-06-19 10:12:43.000000000","message":"This code is inefficient in the following manner,\nlet\u0027s suppose we have max_size set to 10 and number of direct volumes in vtree are 1000\nwe first iterate over 1000 volumes just to evaluate 1000 \u003e 10 and then raise the exception, this can be better optimized as follows\n\n    count_direct_children \u003d 0\n    for v in vtree_volumes:\n        if v.get(\"ancestorVolumeId\") \u003d\u003d src_vref.provider_id:\n            count_direct_children +\u003d 1\n        if len(count_direct_children) \u003e\u003d max_size:\n            raise exception.SnapshotLimitReached(set_limit\u003dmax_size)\n\nWith this logic, we are not wasting memory (storing in direct_children variable) and failing fast by evaluating count in every iteration","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e1d4756b64f1dd7d557236392ffe216171926c84","unresolved":false,"context_lines":[{"line_number":891,"context_line":"            volume_info \u003d client.query_volume(src_vref.provider_id)"},{"line_number":892,"context_line":"            vtree_id \u003d volume_info[\"vtreeId\"]"},{"line_number":893,"context_line":"            vtree_volumes \u003d client.query_vtree_volumes(vtree_id)"},{"line_number":894,"context_line":"            direct_children \u003d ["},{"line_number":895,"context_line":"                v for v in vtree_volumes"},{"line_number":896,"context_line":"                if v.get(\"ancestorVolumeId\") \u003d\u003d src_vref.provider_id"},{"line_number":897,"context_line":"            ]"},{"line_number":898,"context_line":"            if len(direct_children) \u003e\u003d max_size:"},{"line_number":899,"context_line":"                raise exception.SnapshotLimitReached(set_limit\u003dmax_size)"},{"line_number":900,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":901,"context_line":"            LOG.warning(\"Failed to query vTree volumes for image \""},{"line_number":902,"context_line":"                        \"cache volume %(vol_id)s. Proceeding with clone.\","}],"source_content_type":"text/x-python","patch_set":1,"id":"de2114ad_0d2e41ed","line":899,"range":{"start_line":894,"start_character":0,"end_line":899,"end_character":72},"in_reply_to":"067513b0_f3c365aa","updated":"2026-06-19 11:11:17.000000000","message":"Good point, Fixed.","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"52d27546dd99ba0e4b790995f726879f3779c315","unresolved":true,"context_lines":[{"line_number":889,"context_line":"        client \u003d self._get_client()"},{"line_number":890,"context_line":"        try:"},{"line_number":891,"context_line":"            volume_info \u003d client.query_volume(src_vref.provider_id)"},{"line_number":892,"context_line":"            vtree_id \u003d volume_info[\"vtreeId\"]"},{"line_number":893,"context_line":"            vtree_volumes \u003d client.query_vtree_volumes(vtree_id)"},{"line_number":894,"context_line":"            count_direct_children \u003d 0"},{"line_number":895,"context_line":"            for v in vtree_volumes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"449bf696_d8b71634","line":892,"updated":"2026-06-28 14:09:48.000000000","message":"key error is possible if vtreeId is absent.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7667f0c40f3bf4ec1b17d47044dbb2d2bc117228","unresolved":false,"context_lines":[{"line_number":889,"context_line":"        client \u003d self._get_client()"},{"line_number":890,"context_line":"        try:"},{"line_number":891,"context_line":"            volume_info \u003d client.query_volume(src_vref.provider_id)"},{"line_number":892,"context_line":"            vtree_id \u003d volume_info[\"vtreeId\"]"},{"line_number":893,"context_line":"            vtree_volumes \u003d client.query_vtree_volumes(vtree_id)"},{"line_number":894,"context_line":"            count_direct_children \u003d 0"},{"line_number":895,"context_line":"            for v in vtree_volumes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9cbeef5a_93b9719c","line":892,"in_reply_to":"449bf696_d8b71634","updated":"2026-06-29 10:48:52.000000000","message":"vtreeId key always exist.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"52d27546dd99ba0e4b790995f726879f3779c315","unresolved":true,"context_lines":[{"line_number":895,"context_line":"            for v in vtree_volumes:"},{"line_number":896,"context_line":"                if v.get(\"ancestorVolumeId\") \u003d\u003d src_vref.provider_id:"},{"line_number":897,"context_line":"                    count_direct_children +\u003d 1"},{"line_number":898,"context_line":"                if count_direct_children \u003e\u003d max_size:"},{"line_number":899,"context_line":"                    raise exception.SnapshotLimitReached(set_limit\u003dmax_size)"},{"line_number":900,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":901,"context_line":"            LOG.warning(\"Failed to query vTree volumes for image \""}],"source_content_type":"text/x-python","patch_set":2,"id":"79820205_5867f68d","line":898,"updated":"2026-06-28 14:09:48.000000000","message":"count_direct_children\u0027s max_size comparison is related to previous line... can be move the raise inside the inner if","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"e7d715b99c704f091dc1ff644f9acdbffabb8746","unresolved":false,"context_lines":[{"line_number":895,"context_line":"            for v in vtree_volumes:"},{"line_number":896,"context_line":"                if v.get(\"ancestorVolumeId\") \u003d\u003d src_vref.provider_id:"},{"line_number":897,"context_line":"                    count_direct_children +\u003d 1"},{"line_number":898,"context_line":"                if count_direct_children \u003e\u003d max_size:"},{"line_number":899,"context_line":"                    raise exception.SnapshotLimitReached(set_limit\u003dmax_size)"},{"line_number":900,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":901,"context_line":"            LOG.warning(\"Failed to query vTree volumes for image \""}],"source_content_type":"text/x-python","patch_set":2,"id":"eac7b894_88aa7778","line":898,"in_reply_to":"15c11d12_3826afd7","updated":"2026-08-25 09:47:12.000000000","message":"Done","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7667f0c40f3bf4ec1b17d47044dbb2d2bc117228","unresolved":true,"context_lines":[{"line_number":895,"context_line":"            for v in vtree_volumes:"},{"line_number":896,"context_line":"                if v.get(\"ancestorVolumeId\") \u003d\u003d src_vref.provider_id:"},{"line_number":897,"context_line":"                    count_direct_children +\u003d 1"},{"line_number":898,"context_line":"                if count_direct_children \u003e\u003d max_size:"},{"line_number":899,"context_line":"                    raise exception.SnapshotLimitReached(set_limit\u003dmax_size)"},{"line_number":900,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":901,"context_line":"            LOG.warning(\"Failed to query vTree volumes for image \""}],"source_content_type":"text/x-python","patch_set":2,"id":"15c11d12_3826afd7","line":898,"in_reply_to":"79820205_5867f68d","updated":"2026-06-29 10:48:52.000000000","message":"will update that if get any another review comments otherwise will do it in follow up.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6531b5fd7bdb3f9f90abdaddc4e09bb07da51b46","unresolved":true,"context_lines":[{"line_number":884,"context_line":"        meets or exceeds the configured max size."},{"line_number":885,"context_line":"        \"\"\""},{"line_number":886,"context_line":"        max_size \u003d self.configuration.powerflex_max_image_cache_vtree_size"},{"line_number":887,"context_line":"        if max_size \u003c\u003d 0 or not volume_utils.is_image_cache_entry(src_vref):"},{"line_number":888,"context_line":"            return"},{"line_number":889,"context_line":"        client \u003d self._get_client()"},{"line_number":890,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"a1898ed6_6dc8fcdd","line":887,"range":{"start_line":887,"start_character":11,"end_line":887,"end_character":24},"updated":"2026-09-04 04:26:57.000000000","message":"nit: the min value is 0 so less than (\u003c) is unnecessary here\nbetter we can avoid this condition and keep min\u003d1","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"8abf99558ca5aed8897178e658f4a6d87e52bc65","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        meets or exceeds the configured max size."},{"line_number":885,"context_line":"        \"\"\""},{"line_number":886,"context_line":"        max_size \u003d self.configuration.powerflex_max_image_cache_vtree_size"},{"line_number":887,"context_line":"        if max_size \u003c\u003d 0 or not volume_utils.is_image_cache_entry(src_vref):"},{"line_number":888,"context_line":"            return"},{"line_number":889,"context_line":"        client \u003d self._get_client()"},{"line_number":890,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7241c9f3_e0a51dce","line":887,"range":{"start_line":887,"start_character":11,"end_line":887,"end_character":24},"in_reply_to":"5bdf9840_a97a7808","updated":"2026-09-07 19:49:21.000000000","message":"Ack","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"2a215743cc96555516459dcdc4f3f3ba79483cf1","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        meets or exceeds the configured max size."},{"line_number":885,"context_line":"        \"\"\""},{"line_number":886,"context_line":"        max_size \u003d self.configuration.powerflex_max_image_cache_vtree_size"},{"line_number":887,"context_line":"        if max_size \u003c\u003d 0 or not volume_utils.is_image_cache_entry(src_vref):"},{"line_number":888,"context_line":"            return"},{"line_number":889,"context_line":"        client \u003d self._get_client()"},{"line_number":890,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5bdf9840_a97a7808","line":887,"range":{"start_line":887,"start_character":11,"end_line":887,"end_character":24},"in_reply_to":"a1898ed6_6dc8fcdd","updated":"2026-09-04 12:17:41.000000000","message":"When max_size\u003d0, the driver skips the custom vTree size check (driver.py:887-888) and lets PowerFlex enforce its native snapshot limit through API error handling. If PowerFlex hits its limit (126 for v4, 1024 for v5), the API returns TOO_MANY_SNAPS_ERROR which the driver catches in rest_client.py:287 and raises SnapshotLimitReached.\n\nThis behavior is documented in the help text (options.py:169-170): \"A value of 0 means the size is limited by the PowerFlex vTree snapshot limit.\"\nConfiguration option definition with min\u003d0:\ncinder/volume/drivers/dell_emc/powerflex/options.py:162-170\n\nChanging to min\u003d1 would remove this ability and be a breaking change for deployments that rely on value 0 to use PowerFlex\u0027s native limit enforcement.","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4a37c8926a99070c1963bd4bb69dcc0c43f56933","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                    \"powerflex_ratio\": POWERFLEX_MAX_OVERSUBSCRIPTION_RATIO})"},{"line_number":218,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":219,"context_line":"        # validate that version of PowerFlex is supported"},{"line_number":220,"context_line":"        if not flex_utils.version_gte(client.query_rest_api_version(), \"2.0\"):"},{"line_number":221,"context_line":"            # we are running against a pre-2.0.0 PowerFlex(ScaleIO) instance"},{"line_number":222,"context_line":"            msg \u003d (_(\"Using PowerFlex versions less \""},{"line_number":223,"context_line":"                     \"than v2.0 has been deprecated and will be \""}],"source_content_type":"text/x-python","patch_set":6,"id":"f2225c4a_249eb1db","line":220,"updated":"2026-09-08 15:24:18.000000000","message":"Since the VTree limits are different for PF 4 vs PF 5, and you know what version you are dealing with here, you should validate the POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE since the oslo.config doesn\u0027t have a max value any more","commit_id":"29badd871e305bf5286293fb7f20dd69d6e3f17f"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"46fdcf60fbaf2d9cb2073e7806def7b98490a148","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                    \"powerflex_ratio\": POWERFLEX_MAX_OVERSUBSCRIPTION_RATIO})"},{"line_number":218,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":219,"context_line":"        # validate that version of PowerFlex is supported"},{"line_number":220,"context_line":"        if not flex_utils.version_gte(client.query_rest_api_version(), \"2.0\"):"},{"line_number":221,"context_line":"            # we are running against a pre-2.0.0 PowerFlex(ScaleIO) instance"},{"line_number":222,"context_line":"            msg \u003d (_(\"Using PowerFlex versions less \""},{"line_number":223,"context_line":"                     \"than v2.0 has been deprecated and will be \""}],"source_content_type":"text/x-python","patch_set":6,"id":"e384d62d_cad084ce","line":220,"in_reply_to":"f2225c4a_249eb1db","updated":"2026-09-16 18:35:48.000000000","message":"Done","commit_id":"29badd871e305bf5286293fb7f20dd69d6e3f17f"}],"cinder/volume/drivers/dell_emc/powerflex/options.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"43f4605c5879c35594ac4b0d4fbfb04fa80af86f","unresolved":true,"context_lines":[{"line_number":161,"context_line":"                    \u0027timeout value (in seconds) for rest call.\u0027),"},{"line_number":162,"context_line":"    cfg.IntOpt(POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":163,"context_line":"               default\u003d0, min\u003d0, max\u003drest_client.MAX_SNAPS_IN_VTREE,"},{"line_number":164,"context_line":"               help\u003d\u0027Maximum size of the vTree associated with an entry in \u0027"},{"line_number":165,"context_line":"                    \u0027the image volume cache. When the size is exceeded, \u0027"},{"line_number":166,"context_line":"                    \u0027the cache entry will be replaced with one created from \u0027"},{"line_number":167,"context_line":"                    \u0027a new vTree. A value of 0 means the size is limited by \u0027"},{"line_number":168,"context_line":"                    \u0027the PowerFlex vTree snapshot limit.\u0027)"},{"line_number":169,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"65fdd372_74037db0","line":168,"range":{"start_line":164,"start_character":0,"end_line":168,"end_character":58},"updated":"2026-06-19 10:12:43.000000000","message":"should we update this to following? please check and update the snapshot limit if 126 is not correct\n\n             help\u003d\u0027Maximum number of direct child volumes allowed for an \u0027\n                  \u0027image volume cache entry. Only immediate clones are counted; \u0027\n                  \u0027grandchildren and deeper descendants are excluded. When the \u0027\n                  \u0027limit is reached, the cache entry will be replaced with one \u0027\n                  \u0027created from a new vTree. A value of 0 means the size is \u0027\n                  \u0027limited by the PowerFlex vTree snapshot limit (126).\u0027)","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e1d4756b64f1dd7d557236392ffe216171926c84","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                    \u0027timeout value (in seconds) for rest call.\u0027),"},{"line_number":162,"context_line":"    cfg.IntOpt(POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":163,"context_line":"               default\u003d0, min\u003d0, max\u003drest_client.MAX_SNAPS_IN_VTREE,"},{"line_number":164,"context_line":"               help\u003d\u0027Maximum size of the vTree associated with an entry in \u0027"},{"line_number":165,"context_line":"                    \u0027the image volume cache. When the size is exceeded, \u0027"},{"line_number":166,"context_line":"                    \u0027the cache entry will be replaced with one created from \u0027"},{"line_number":167,"context_line":"                    \u0027a new vTree. A value of 0 means the size is limited by \u0027"},{"line_number":168,"context_line":"                    \u0027the PowerFlex vTree snapshot limit.\u0027)"},{"line_number":169,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5348ac72_664d6505","line":168,"range":{"start_line":164,"start_character":0,"end_line":168,"end_character":58},"in_reply_to":"65fdd372_74037db0","updated":"2026-06-19 11:11:17.000000000","message":"Done, we can\u0027t add limit size 126 as PowerFlex v5 has limit size of 1024.","commit_id":"18605da7b7c05f89ebfdc5e06813e3d523099d70"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bc7136fecffe4093f5f71da107e83e7af8e861a1","unresolved":true,"context_lines":[{"line_number":160,"context_line":"               help\u003d\u0027Use this value to specify read \u0027"},{"line_number":161,"context_line":"                    \u0027timeout value (in seconds) for rest call.\u0027),"},{"line_number":162,"context_line":"    cfg.IntOpt(POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":163,"context_line":"               default\u003d0, min\u003d0, max\u003drest_client.MAX_SNAPS_IN_VTREE,"},{"line_number":164,"context_line":"               help\u003d\u0027Maximum number of direct child volumes allowed for an \u0027"},{"line_number":165,"context_line":"                    \u0027image volume cache entry. Only immediate clones are \u0027"},{"line_number":166,"context_line":"                    \u0027counted, grandchildren and deeper descendants \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"4760574e_b2777795","line":163,"range":{"start_line":163,"start_character":49,"end_line":163,"end_character":67},"updated":"2026-09-04 13:58:29.000000000","message":"Why exactly do we want this option anyway?  What I mean is, what bad consequences could happen from the default behavior?\n\nIf the idea is that it would be better to have a value at like 80% of the vTree limit, then this is definitely an issue for PF 5 because 128 is only 12.5% of the PF 5 vTree limit.  So that\u0027s why I would like to understand the strategy behind this setting.\n\nAlso, this seems like an option that an operator shouldn\u0027t touch without consulting with the vendor; if so, might be worth mentioning that.","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"5c3258e084ffbf470a51cc967f6723de9a6b3f1b","unresolved":true,"context_lines":[{"line_number":160,"context_line":"               help\u003d\u0027Use this value to specify read \u0027"},{"line_number":161,"context_line":"                    \u0027timeout value (in seconds) for rest call.\u0027),"},{"line_number":162,"context_line":"    cfg.IntOpt(POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":163,"context_line":"               default\u003d0, min\u003d0, max\u003drest_client.MAX_SNAPS_IN_VTREE,"},{"line_number":164,"context_line":"               help\u003d\u0027Maximum number of direct child volumes allowed for an \u0027"},{"line_number":165,"context_line":"                    \u0027image volume cache entry. Only immediate clones are \u0027"},{"line_number":166,"context_line":"                    \u0027counted, grandchildren and deeper descendants \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"66eed9ce_bd01c51f","line":163,"range":{"start_line":163,"start_character":49,"end_line":163,"end_character":67},"in_reply_to":"4760574e_b2777795","updated":"2026-09-04 16:30:09.000000000","message":"This config option was introduced in an earlier patch (3ac19bfea) to allow operators to set a custom limit lower than PowerFlex\u0027s native vTree snapshot limit. When max_size\u003d0 (default), the driver skips the custom check and lets PowerFlex enforce its native limit through API error handling (rest_client.py:287).\n\nI have updated the help text to include PF version-specific limits (126 for PF4, 1024 for PF5) and added a vendor consultation advisory. Also removed max\u003drest_client.MAX_SNAPS_IN_VTREE so the option works for both PF4 and PF5 deployments.","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"938e18bc4445a767eaf6f90f6d5353cb5dd5f3de","unresolved":false,"context_lines":[{"line_number":160,"context_line":"               help\u003d\u0027Use this value to specify read \u0027"},{"line_number":161,"context_line":"                    \u0027timeout value (in seconds) for rest call.\u0027),"},{"line_number":162,"context_line":"    cfg.IntOpt(POWERFLEX_MAX_IMAGE_CACHE_VTREE_SIZE,"},{"line_number":163,"context_line":"               default\u003d0, min\u003d0, max\u003drest_client.MAX_SNAPS_IN_VTREE,"},{"line_number":164,"context_line":"               help\u003d\u0027Maximum number of direct child volumes allowed for an \u0027"},{"line_number":165,"context_line":"                    \u0027image volume cache entry. Only immediate clones are \u0027"},{"line_number":166,"context_line":"                    \u0027counted, grandchildren and deeper descendants \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5b3088ee_0da4aece","line":163,"range":{"start_line":163,"start_character":49,"end_line":163,"end_character":67},"in_reply_to":"66eed9ce_bd01c51f","updated":"2026-09-08 04:29:23.000000000","message":"Marked as resolved.","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"}],"cinder/volume/drivers/dell_emc/powerflex/rest_client.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"52d27546dd99ba0e4b790995f726879f3779c315","unresolved":true,"context_lines":[{"line_number":763,"context_line":"                                                         vtree_id\u003dvtree_id)"},{"line_number":764,"context_line":"        if r.status_code !\u003d http_client.OK:"},{"line_number":765,"context_line":"            msg \u003d (_(\"Failed to query vTree volumes: %s.\") %"},{"line_number":766,"context_line":"                   response[\"message\"])"},{"line_number":767,"context_line":"            LOG.error(msg)"},{"line_number":768,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":769,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":2,"id":"68be88f9_1561756f","line":766,"updated":"2026-06-28 14:09:48.000000000","message":"Is message always present in response[\"message\"]","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7667f0c40f3bf4ec1b17d47044dbb2d2bc117228","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                                                         vtree_id\u003dvtree_id)"},{"line_number":764,"context_line":"        if r.status_code !\u003d http_client.OK:"},{"line_number":765,"context_line":"            msg \u003d (_(\"Failed to query vTree volumes: %s.\") %"},{"line_number":766,"context_line":"                   response[\"message\"])"},{"line_number":767,"context_line":"            LOG.error(msg)"},{"line_number":768,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":769,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":2,"id":"a06af367_5f28dbbe","line":766,"in_reply_to":"68be88f9_1561756f","updated":"2026-06-29 10:48:52.000000000","message":"Yes, also used this way in many places.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bc7136fecffe4093f5f71da107e83e7af8e861a1","unresolved":true,"context_lines":[{"line_number":40,"context_line":"TOO_MANY_SNAPS_ERROR \u003d 182"},{"line_number":41,"context_line":"ILLEGAL_SYNTAX \u003d 0"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"MAX_SNAPS_IN_VTREE \u003d 126"},{"line_number":44,"context_line":"TOKEN_REFRESH_SUCC_INTERVAL \u003d 300"},{"line_number":45,"context_line":"TOKEN_REFRESH_FAIL_INTERVAL \u003d 60"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"03d4a9c0_13e57730","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":24},"updated":"2026-09-04 13:58:29.000000000","message":"Isn\u0027t this going to be an issue for PowerFlex 5, where the limit is 1024 ?","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"5c3258e084ffbf470a51cc967f6723de9a6b3f1b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"TOO_MANY_SNAPS_ERROR \u003d 182"},{"line_number":41,"context_line":"ILLEGAL_SYNTAX \u003d 0"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"MAX_SNAPS_IN_VTREE \u003d 126"},{"line_number":44,"context_line":"TOKEN_REFRESH_SUCC_INTERVAL \u003d 300"},{"line_number":45,"context_line":"TOKEN_REFRESH_FAIL_INTERVAL \u003d 60"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6dfedf_d4946d65","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":24},"in_reply_to":"03d4a9c0_13e57730","updated":"2026-09-04 16:30:09.000000000","message":"Removed max\u003drest_client.MAX_SNAPS_IN_VTREE from the config option so it works for both PowerFlex 4 (limit 126) and PowerFlex 5 (limit 1024).","commit_id":"3c714aa97393a1a18ed80d3af8a8ed1a53e9019f"}],"releasenotes/notes/bp-dell-powerflex-improved-vtree-a1b2c3d4e5f6g7h8.yaml":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"52d27546dd99ba0e4b790995f726879f3779c315","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Dell PowerFlex driver: Added support for checking the image"},{"line_number":5,"context_line":"    cache vTree size by counting only direct child volumes of"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"f573e486_f1270369","line":2,"updated":"2026-06-28 14:09:48.000000000","message":"change addresses bug in current implementation. Any new feature is introduced?","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7667f0c40f3bf4ec1b17d47044dbb2d2bc117228","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Dell PowerFlex driver: Added support for checking the image"},{"line_number":5,"context_line":"    cache vTree size by counting only direct child volumes of"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ee6354d8_59ca040f","line":2,"in_reply_to":"f573e486_f1270369","updated":"2026-06-29 10:48:52.000000000","message":"This is not a bug, we are giving new improvement as customer asked.","commit_id":"9fb2d9936cfaf41c249e7302a35f88174a8a1840"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"05cfbe2169311d4a3cbef029d3416f4f531d96de","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Dell PowerFlex driver: Added support for checking the image"},{"line_number":5,"context_line":"    cache vTree size by counting only direct child volumes of"},{"line_number":6,"context_line":"    the cache volume."},{"line_number":7,"context_line":"    Previously, the driver used ``query_vtree_statistics``, which counted"},{"line_number":8,"context_line":"    all descendants in the vTree, including snapshots and deeper nested"},{"line_number":9,"context_line":"    volumes. This could incorrectly block clone creation before the cache"},{"line_number":10,"context_line":"    volume reached the configured direct-child limit."},{"line_number":11,"context_line":"    The driver now uses ``query_vtree_volumes`` with the"},{"line_number":12,"context_line":"    ``ancestorVolumeId`` filter to count only immediate children."},{"line_number":13,"context_line":"    The ``powerflex_max_image_cache_vtree_size`` configuration option name"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"8581ea72_80326522","line":10,"range":{"start_line":7,"start_character":4,"end_line":10,"end_character":53},"updated":"2026-09-01 18:38:47.000000000","message":"This statement makes me believe that we are actually fixing a bug i.e. a functionality was introduced but had flaws that are being fixed here.\nAlso if the original patch that added the counting mechanism is in stable branches, we will need to backport this patch to fix that behavior in stable branches as well which inclines me more towards stating this as a bug fix which will also make the backport process easier.","commit_id":"89e299de2fa5cb9ba601faf53e93b4abb6a24f17"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"91a3751234fb9101a15b6269c657d4c29d30243c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Dell PowerFlex driver: Added support for checking the image"},{"line_number":5,"context_line":"    cache vTree size by counting only direct child volumes of"},{"line_number":6,"context_line":"    the cache volume."},{"line_number":7,"context_line":"    Previously, the driver used ``query_vtree_statistics``, which counted"},{"line_number":8,"context_line":"    all descendants in the vTree, including snapshots and deeper nested"},{"line_number":9,"context_line":"    volumes. This could incorrectly block clone creation before the cache"},{"line_number":10,"context_line":"    volume reached the configured direct-child limit."},{"line_number":11,"context_line":"    The driver now uses ``query_vtree_volumes`` with the"},{"line_number":12,"context_line":"    ``ancestorVolumeId`` filter to count only immediate children."},{"line_number":13,"context_line":"    The ``powerflex_max_image_cache_vtree_size`` configuration option name"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"100377e8_461de397","line":10,"range":{"start_line":7,"start_character":4,"end_line":10,"end_character":53},"in_reply_to":"8581ea72_80326522","updated":"2026-09-02 13:30:20.000000000","message":"Agree on this, I have filed a bug and updated this patch.","commit_id":"89e299de2fa5cb9ba601faf53e93b4abb6a24f17"}]}
