)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"6eba3b65b64fbb42c832bb915f757084578690e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"78825555_6ac3beaf","updated":"2021-10-11 19:12:49.000000000","message":"Hi Felipe, the code looks good to me, I don\u0027t have any comment to add. Thank you!","commit_id":"4c1f1fcbbcef80a55eb11aa7f0982ac4f162d093"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"d348ed9b07617df6493e8b15de19d45b906c5aaa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"92c18a95_63f62dfc","updated":"2021-10-13 03:38:16.000000000","message":"recheck","commit_id":"4c1f1fcbbcef80a55eb11aa7f0982ac4f162d093"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"29ef31ca7201dc7994a89819197f9c37dda44cab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b9eb5ab0_c5521461","updated":"2026-02-26 12:11:18.000000000","message":"Adding NetApp reviewers.","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"8910293e744c13fbf601b1c42812d5a894722153","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a05666b3_e4457535","updated":"2022-01-20 14:38:49.000000000","message":"Great job on this patch.\nJust pointed out some minor observations regarding the UTs.\nThey aren\u0027t a big deal, so feel free to fix them only if you need to send a new PS in the future.\nThank you, Felipe","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":30615,"name":"Tushar Trambak Gite","email":"tushargite96@gmail.com","username":"tushargite96"},"change_message_id":"b25108615bd387aaccf159dd8091d69f0ca401b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ce470818_0444c48f","updated":"2022-01-10 08:59:17.000000000","message":"LGTM","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":33648,"name":"Nahim Alves de Souza","email":"nahimsouza@outlook.com","username":"nahimsouza"},"change_message_id":"3fbc671c6220c42779a8f9042a010bf698375ab7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"570eca0c_58c601a4","updated":"2021-10-13 12:24:12.000000000","message":"LGTM, thanks Felipe.","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"df2aa0ce1757662bd4cc3c579f0a445a475454d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"91b6915c_1f52ba95","updated":"2022-11-23 00:05:53.000000000","message":"Long time without running: recheck","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00b739fb244d925b8e9d0544406ed665cb9b0c79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"71e58ed2_9e14c2c7","updated":"2026-02-26 14:41:03.000000000","message":"Please take a look at the comments. I am a little unsure about the changes.Can you please also list down what was tested to validate regression impact?","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"8efe01e762a0a733c9bb83ba3e2a88c7e4aea596","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"caf8bbb0_263947b8","updated":"2022-01-20 12:06:42.000000000","message":"run-NetApp CI","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py":[{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"8910293e744c13fbf601b1c42812d5a894722153","unresolved":true,"context_lines":[{"line_number":2186,"context_line":"        expected \u003d {\u0027provider_location\u0027: fake.DEST_POOL_NAME}"},{"line_number":2187,"context_line":"        self.assertEqual(expected, result)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"    def test_migrate_volume(self):"},{"line_number":2190,"context_line":"        ctx \u003d mock.Mock()"},{"line_number":2191,"context_line":"        self.driver.backend_name \u003d fake.BACKEND_NAME"},{"line_number":2192,"context_line":"        self.driver.netapp_vserver \u003d fake.VSERVER_NAME"}],"source_content_type":"text/x-python","patch_set":4,"id":"c13b0152_1c8e72b9","line":2189,"range":{"start_line":2189,"start_character":4,"end_line":2189,"end_character":34},"updated":"2022-01-20 14:38:49.000000000","message":"you could have used ddt to avoid test duplication. there are only volume_status and _is_flexgroup that differ from one to another","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"7955946a791790826ed0c4d74b1f5f4634797e77","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        expected \u003d {\u0027provider_location\u0027: fake.DEST_POOL_NAME}"},{"line_number":2187,"context_line":"        self.assertEqual(expected, result)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"    def test_migrate_volume(self):"},{"line_number":2190,"context_line":"        ctx \u003d mock.Mock()"},{"line_number":2191,"context_line":"        self.driver.backend_name \u003d fake.BACKEND_NAME"},{"line_number":2192,"context_line":"        self.driver.netapp_vserver \u003d fake.VSERVER_NAME"}],"source_content_type":"text/x-python","patch_set":4,"id":"d4284f66_53195196","line":2189,"range":{"start_line":2189,"start_character":4,"end_line":2189,"end_character":34},"in_reply_to":"c13b0152_1c8e72b9","updated":"2022-11-23 00:05:04.000000000","message":"Done","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/utils/test_data_motion.py":[{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"8910293e744c13fbf601b1c42812d5a894722153","unresolved":true,"context_lines":[{"line_number":1064,"context_line":"                         actual_active_backend_name)"},{"line_number":1065,"context_line":"        self.assertEqual(expected_volume_updates, actual_volume_updates)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    def test_migrate_volume_ontap_assisted_to_flexgroup_pool(self):"},{"line_number":1068,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1069,"context_line":"        vol_fields \u003d {\u0027id\u0027: dataontap_fakes.VOLUME_ID,"},{"line_number":1070,"context_line":"                      \u0027host\u0027: dataontap_fakes.HOST_STRING}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5c77933f_d4b5d911","line":1067,"range":{"start_line":1067,"start_character":4,"end_line":1067,"end_character":67},"updated":"2022-01-20 14:38:49.000000000","message":"same duplication here. With ddt, it gets easier to follow through the test cases","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"7955946a791790826ed0c4d74b1f5f4634797e77","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"                         actual_active_backend_name)"},{"line_number":1065,"context_line":"        self.assertEqual(expected_volume_updates, actual_volume_updates)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    def test_migrate_volume_ontap_assisted_to_flexgroup_pool(self):"},{"line_number":1068,"context_line":"        ctxt \u003d mock.Mock()"},{"line_number":1069,"context_line":"        vol_fields \u003d {\u0027id\u0027: dataontap_fakes.VOLUME_ID,"},{"line_number":1070,"context_line":"                      \u0027host\u0027: dataontap_fakes.HOST_STRING}"}],"source_content_type":"text/x-python","patch_set":4,"id":"66c98f14_3dce6807","line":1067,"range":{"start_line":1067,"start_character":4,"end_line":1067,"end_character":67},"in_reply_to":"5c77933f_d4b5d911","updated":"2022-11-23 00:05:04.000000000","message":"Done","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"8910293e744c13fbf601b1c42812d5a894722153","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"        self.assertTrue(migrated)"},{"line_number":1294,"context_line":"        self.assertEqual({}, updates)"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"    @ddt.data((True, False), (False, False), (True, True))"},{"line_number":1297,"context_line":"    @ddt.unpack"},{"line_number":1298,"context_line":"    def test_migrate_volume_ontap_assisted_different_vserver(self,"},{"line_number":1299,"context_line":"                                                             is_qos_lost,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8e16109e_bd8f06d2","line":1296,"range":{"start_line":1296,"start_character":4,"end_line":1296,"end_character":58},"updated":"2022-01-20 14:38:49.000000000","message":"nice","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}],"cinder/volume/drivers/netapp/dataontap/block_cmode.py":[{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"8910293e744c13fbf601b1c42812d5a894722153","unresolved":true,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _setup_qos_for_volume(self, volume, extra_specs, use_client\u003dNone,"},{"line_number":428,"context_line":"                              qos_min_support\u003dNone):"},{"line_number":429,"context_line":"        client \u003d use_client if use_client else self.zapi_client"},{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            qos_policy_group_info \u003d na_utils.get_valid_qos_policy_group_info("},{"line_number":432,"context_line":"                volume, extra_specs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f9f76b9_1c306d39","line":429,"range":{"start_line":429,"start_character":8,"end_line":429,"end_character":63},"updated":"2022-01-20 14:38:49.000000000","message":"may be good to cover this part on the UTs - there are some other places where this repeats, but I wont fill this review with repeated comments","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":31721,"name":"Felipe Rodrigues","email":"felipefuty01@gmail.com","username":"felipefutty"},"change_message_id":"7955946a791790826ed0c4d74b1f5f4634797e77","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _setup_qos_for_volume(self, volume, extra_specs, use_client\u003dNone,"},{"line_number":428,"context_line":"                              qos_min_support\u003dNone):"},{"line_number":429,"context_line":"        client \u003d use_client if use_client else self.zapi_client"},{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            qos_policy_group_info \u003d na_utils.get_valid_qos_policy_group_info("},{"line_number":432,"context_line":"                volume, extra_specs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"c96a8459_e67bb983","line":429,"range":{"start_line":429,"start_character":8,"end_line":429,"end_character":63},"in_reply_to":"5f9f76b9_1c306d39","updated":"2022-11-23 00:05:04.000000000","message":"Done","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00b739fb244d925b8e9d0544406ed665cb9b0c79","unresolved":true,"context_lines":[{"line_number":987,"context_line":"            deleted_name \u003d client_base.DELETED_PREFIX + current_name"},{"line_number":988,"context_line":"            new_name \u003d deleted_name"},{"line_number":989,"context_line":"            policy_index \u003d 0"},{"line_number":990,"context_line":"            while policy_index \u003c 100:"},{"line_number":991,"context_line":"                try:"},{"line_number":992,"context_line":"                    self.qos_policy_group_rename(current_name, new_name,"},{"line_number":993,"context_line":"                                                 is_adaptive)"}],"source_content_type":"text/x-python","patch_set":4,"id":"4bebe28c_cc6d0f88","line":990,"updated":"2026-02-26 14:41:03.000000000","message":"Why do we need a while loop to iterate soft deleting the QoS policy? If name collision happens, shouldn\u0027t it throw an error and return?","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}],"cinder/volume/drivers/netapp/dataontap/nfs_cmode.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00b739fb244d925b8e9d0544406ed665cb9b0c79","unresolved":true,"context_lines":[{"line_number":185,"context_line":"                self.ssc_library.get_ssc_flexvol_names())"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def _do_qos_for_volume(self, volume, extra_specs, cleanup\u003dTrue,"},{"line_number":188,"context_line":"                           use_client\u003dNone, use_vserver\u003dNone, use_pool\u003dNone,"},{"line_number":189,"context_line":"                           qos_min_support\u003dNone):"},{"line_number":190,"context_line":"        client \u003d use_client if use_client else self.zapi_client"},{"line_number":191,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac2b4dc_acdbf568","line":188,"updated":"2026-02-26 14:41:03.000000000","message":"What is the use_pool attribute here? Are we trying to set the QoS policy at pool level?","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00b739fb244d925b8e9d0544406ed665cb9b0c79","unresolved":true,"context_lines":[{"line_number":232,"context_line":"        vserver \u003d use_vserver if use_vserver else self.vserver"},{"line_number":233,"context_line":"        target_path \u003d \u0027%s\u0027 % (volume[\u0027name\u0027])"},{"line_number":234,"context_line":"        share \u003d use_share"},{"line_number":235,"context_line":"        if not share:"},{"line_number":236,"context_line":"            share \u003d volume_utils.extract_host(volume[\u0027host\u0027], level\u003d\u0027pool\u0027)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        __, export_path \u003d na_utils.get_export_host_junction_path(share)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ee175edf_0e6a1bbc","line":235,"updated":"2026-02-26 14:41:03.000000000","message":"Why do we expect share to be None here?","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00b739fb244d925b8e9d0544406ed665cb9b0c79","unresolved":true,"context_lines":[{"line_number":1232,"context_line":"            return False, {}"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        if self._is_flexgroup(host\u003dvolume[\u0027host\u0027]):"},{"line_number":1235,"context_line":"            LOG.info(\"Storage assisted migration is not supported from a  \""},{"line_number":1236,"context_line":"                     \"FlexGroup pool. Falling back to host assisted \""},{"line_number":1237,"context_line":"                     \"migration.\")"},{"line_number":1238,"context_line":"            return False, {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"8917e87e_072e56c4","line":1235,"updated":"2026-02-26 14:41:03.000000000","message":"Shouldnt this be LOG.warn?","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}],"cinder/volume/drivers/netapp/dataontap/utils/data_motion.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00b739fb244d925b8e9d0544406ed665cb9b0c79","unresolved":true,"context_lines":[{"line_number":785,"context_line":"            dest_backend_name)"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        if self.is_dest_flexgroup(dest_pool, dest_client):"},{"line_number":788,"context_line":"            LOG.info(\"Storage assisted migration is not supported to a \""},{"line_number":789,"context_line":"                     \"FlexGroup pool. Falling back to host assisted \""},{"line_number":790,"context_line":"                     \"migration.\")"},{"line_number":791,"context_line":"            return False, {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6499ed_bddc6cd0","line":788,"updated":"2026-02-26 14:41:03.000000000","message":"LOG.warn?","commit_id":"334d8d6d378027b0186b0ef65adc2603ba852162"}]}
