)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9601a6e6695156f690a7e5f6f634b1335d99ee20","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Add a netapp_use_metrics_based_utilization config option (default"},{"line_number":10,"context_line":"True). When enabled and supported (REST client, ONTAP 9.8+), the"},{"line_number":11,"context_line":"driver reads processor_utilization from the ONTAP REST node metrics"},{"line_number":12,"context_line":"endpoint instead of the counter-based calculation. A stale value is"},{"line_number":13,"context_line":"reused for up to 10 minutes before falling back to the default"},{"line_number":14,"context_line":"utilization. Unsupported backends (ZAPI client, ONTAP \u003c 9.8) keep"},{"line_number":15,"context_line":"using the counter-based calculation."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The ASA r2 disaggregated platform has no counter-based path, so"},{"line_number":18,"context_line":"NODE_METRICS is always enabled there and the performance cache is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"70656a01_725dff34","line":15,"range":{"start_line":12,"start_character":51,"end_line":15,"end_character":36},"updated":"2026-08-17 11:10:26.000000000","message":"Is this still true? I think we can reword as we do not have 10 mins fallback anymore?","commit_id":"1ac800957efa7eead2c9a6d91fd846e5efe33b95"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c3326fe758dc95cc83b13f52afea2bd36530a71b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4657f87d_9e83387f","updated":"2026-07-17 15:56:59.000000000","message":"A few things to check noted in line; mostly LGTM.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"124df12a5bd68aae9a2806d8532ad864dc0d466b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"23fd6dac_ff40ab85","updated":"2026-07-17 14:57:34.000000000","message":"Leaving neutral for now as this looks like a good patch to me.  I just had one minor concern about one of the UT (and I may just not fully understand it).  Once I could get a reply (or a fix, if necessary) I will +2.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a69c9b036814b3d3ae73381b74deef6046b1eef1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f4f3c781_c36af478","updated":"2026-07-31 06:40:44.000000000","message":"Please look at comments.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"9c4e14210b22ab02100df445f2fb76efb7c11430","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e6df55e1_f64f18cf","in_reply_to":"23fd6dac_ff40ab85","updated":"2026-08-14 04:54:46.000000000","message":"updated UTs and made it simple to understand. please take a look","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"9c4e14210b22ab02100df445f2fb76efb7c11430","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"155f6e71_8cc2ed84","updated":"2026-08-14 04:54:46.000000000","message":"@rosmaita.fossdev@gmail.com, @anthony.galica@hitachivantara.com and @anoop.shukla@netapp.com... thank you! for detailed review. addressed review comments. please review again.","commit_id":"df921f4a7318315ca5195c8705a138d05ae28da2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9601a6e6695156f690a7e5f6f634b1335d99ee20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3d28ef36_946dba48","updated":"2026-08-17 11:10:26.000000000","message":"LGTM.","commit_id":"1ac800957efa7eead2c9a6d91fd846e5efe33b95"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/performance/test_perf_cmode.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"124df12a5bd68aae9a2806d8532ad864dc0d466b","unresolved":true,"context_lines":[{"line_number":543,"context_line":"    def test_get_aggregates_for_pools_includes_flexgroup_only_aggr(self):"},{"line_number":544,"context_line":"        # A FlexGroup can span an aggregate that no FlexVol pool uses (aggr4)."},{"line_number":545,"context_line":"        volumes \u003d {"},{"line_number":546,"context_line":"            \u0027flexvol_pool\u0027: {\u0027netapp_aggregate\u0027: \u0027aggr1\u0027},"},{"line_number":547,"context_line":"            \u0027fg_pool\u0027: {\u0027netapp_aggregate\u0027: [\u0027aggr1\u0027, \u0027aggr4\u0027]},"},{"line_number":548,"context_line":"        }"},{"line_number":549,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"b5cea2b6_b54fa10d","line":546,"updated":"2026-07-17 14:57:34.000000000","message":"Should this be a different value?  \n\nIt\u0027s possible I don\u0027t fully understand the test, but if a set is returned and checked, I would think that ``aggr1`` here for the flex vol could just be overwritten by the ``aggr1`` below in the flex group or vice versa (i.e. I suspect both can be found and this test would pass).","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"9c4e14210b22ab02100df445f2fb76efb7c11430","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    def test_get_aggregates_for_pools_includes_flexgroup_only_aggr(self):"},{"line_number":544,"context_line":"        # A FlexGroup can span an aggregate that no FlexVol pool uses (aggr4)."},{"line_number":545,"context_line":"        volumes \u003d {"},{"line_number":546,"context_line":"            \u0027flexvol_pool\u0027: {\u0027netapp_aggregate\u0027: \u0027aggr1\u0027},"},{"line_number":547,"context_line":"            \u0027fg_pool\u0027: {\u0027netapp_aggregate\u0027: [\u0027aggr1\u0027, \u0027aggr4\u0027]},"},{"line_number":548,"context_line":"        }"},{"line_number":549,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bc57470e_d11825fa","line":546,"in_reply_to":"b5cea2b6_b54fa10d","updated":"2026-08-14 04:54:46.000000000","message":"updated UTs to use aggr3","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"}],"cinder/volume/drivers/netapp/dataontap/block_cmode.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c3326fe758dc95cc83b13f52afea2bd36530a71b","unresolved":true,"context_lines":[{"line_number":712,"context_line":"        # ASA r2 has no counter-based fallback, so always refresh via metrics."},{"line_number":713,"context_line":"        should_update_performance \u003d True"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        if (self.using_cluster_credentials and should_update_performance):"},{"line_number":716,"context_line":"            # Update the saved cluster performance data only after the set"},{"line_number":717,"context_line":"            # time has passed.This prevents running slow real-time performance"},{"line_number":718,"context_line":"            # checks every time stats are collected. The time of the last"}],"source_content_type":"text/x-python","patch_set":3,"id":"ebb69f81_5bb9a044","line":715,"range":{"start_line":715,"start_character":43,"end_line":715,"end_character":72},"updated":"2026-07-17 15:56:59.000000000","message":"The right side conjunct will always be True because of line 713, so you are really only checking against using_cluster_credentials here -- is that what you want?  (I suspect not because this is the only place should_update_performance is used.)","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a69c9b036814b3d3ae73381b74deef6046b1eef1","unresolved":true,"context_lines":[{"line_number":712,"context_line":"        # ASA r2 has no counter-based fallback, so always refresh via metrics."},{"line_number":713,"context_line":"        should_update_performance \u003d True"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        if (self.using_cluster_credentials and should_update_performance):"},{"line_number":716,"context_line":"            # Update the saved cluster performance data only after the set"},{"line_number":717,"context_line":"            # time has passed.This prevents running slow real-time performance"},{"line_number":718,"context_line":"            # checks every time stats are collected. The time of the last"}],"source_content_type":"text/x-python","patch_set":3,"id":"b42292aa_c91264da","line":715,"range":{"start_line":715,"start_character":43,"end_line":715,"end_character":72},"in_reply_to":"0612c737_06932b33","updated":"2026-07-31 06:40:44.000000000","message":"Since this is under is_disaggregated boolean flag, we do not need hardcoded should_update_performance flag.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"7061a582b0db922134e38b7f29209ba4f2774037","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        # ASA r2 has no counter-based fallback, so always refresh via metrics."},{"line_number":713,"context_line":"        should_update_performance \u003d True"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        if (self.using_cluster_credentials and should_update_performance):"},{"line_number":716,"context_line":"            # Update the saved cluster performance data only after the set"},{"line_number":717,"context_line":"            # time has passed.This prevents running slow real-time performance"},{"line_number":718,"context_line":"            # checks every time stats are collected. The time of the last"}],"source_content_type":"text/x-python","patch_set":3,"id":"ed50bb5c_94bc983c","line":715,"range":{"start_line":715,"start_character":43,"end_line":715,"end_character":72},"in_reply_to":"b42292aa_c91264da","updated":"2026-08-14 04:45:02.000000000","message":"should_update_performance flag is redundant and removed.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"3fa84db30e75d8b614c37b8e2e00fb1856b4f109","unresolved":true,"context_lines":[{"line_number":712,"context_line":"        # ASA r2 has no counter-based fallback, so always refresh via metrics."},{"line_number":713,"context_line":"        should_update_performance \u003d True"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        if (self.using_cluster_credentials and should_update_performance):"},{"line_number":716,"context_line":"            # Update the saved cluster performance data only after the set"},{"line_number":717,"context_line":"            # time has passed.This prevents running slow real-time performance"},{"line_number":718,"context_line":"            # checks every time stats are collected. The time of the last"}],"source_content_type":"text/x-python","patch_set":3,"id":"0612c737_06932b33","line":715,"range":{"start_line":715,"start_character":43,"end_line":715,"end_character":72},"in_reply_to":"ebb69f81_5bb9a044","updated":"2026-07-17 16:02:15.000000000","message":"I got the impression from the comment ``# ASA r2 has no counter-based fallback, so always refresh via metrics.`` that it was just performative / maybe for a future update or something.  Though I suppose I also should have asked.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a69c9b036814b3d3ae73381b74deef6046b1eef1","unresolved":true,"context_lines":[{"line_number":729,"context_line":"            else:"},{"line_number":730,"context_line":"                LOG.debug(\"Using the previous perf stats from last update.\")"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"            if not is_disaggregated:"},{"line_number":733,"context_line":"                # Get up-to-date aggregate capacities just once"},{"line_number":734,"context_line":"                aggregates \u003d self.ssc_library.get_ssc_aggregates()"},{"line_number":735,"context_line":"                LOG.debug(\"Getting aggregate capacities.\")"},{"line_number":736,"context_line":"                aggr_capacities \u003d self.zapi_client.get_aggregate_capacities("},{"line_number":737,"context_line":"                    aggregates)"},{"line_number":738,"context_line":"                LOG.debug(\"Aggregate capacities successfully fetched: %s\","},{"line_number":739,"context_line":"                          aggr_capacities)"},{"line_number":740,"context_line":"            else:"},{"line_number":741,"context_line":"                aggr_capacities \u003d {}"},{"line_number":742,"context_line":"        else:"},{"line_number":743,"context_line":"            aggr_capacities \u003d {}"},{"line_number":744,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"cfab8345_37f50b24","line":741,"range":{"start_line":732,"start_character":12,"end_line":741,"end_character":36},"updated":"2026-07-31 06:40:44.000000000","message":"Why is this block required to be under is_disaggregated? Have you tested this with ASAr2? ASAr2 continues to support aggregate APIs.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"7061a582b0db922134e38b7f29209ba4f2774037","unresolved":false,"context_lines":[{"line_number":729,"context_line":"            else:"},{"line_number":730,"context_line":"                LOG.debug(\"Using the previous perf stats from last update.\")"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"            if not is_disaggregated:"},{"line_number":733,"context_line":"                # Get up-to-date aggregate capacities just once"},{"line_number":734,"context_line":"                aggregates \u003d self.ssc_library.get_ssc_aggregates()"},{"line_number":735,"context_line":"                LOG.debug(\"Getting aggregate capacities.\")"},{"line_number":736,"context_line":"                aggr_capacities \u003d self.zapi_client.get_aggregate_capacities("},{"line_number":737,"context_line":"                    aggregates)"},{"line_number":738,"context_line":"                LOG.debug(\"Aggregate capacities successfully fetched: %s\","},{"line_number":739,"context_line":"                          aggr_capacities)"},{"line_number":740,"context_line":"            else:"},{"line_number":741,"context_line":"                aggr_capacities \u003d {}"},{"line_number":742,"context_line":"        else:"},{"line_number":743,"context_line":"            aggr_capacities \u003d {}"},{"line_number":744,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5baed195_083c085a","line":741,"range":{"start_line":732,"start_character":12,"end_line":741,"end_character":36},"in_reply_to":"cfab8345_37f50b24","updated":"2026-08-14 04:45:02.000000000","message":"Marked as resolved.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.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":"a69c9b036814b3d3ae73381b74deef6046b1eef1","unresolved":true,"context_lines":[{"line_number":176,"context_line":"        self.features.add_feature(\u0027USER_CAPABILITY_LIST\u0027,"},{"line_number":177,"context_line":"                                  supported\u003dontap_9_0)"},{"line_number":178,"context_line":"        self.features.add_feature(\u0027SYSTEM_METRICS\u0027, supported\u003dontap_9_0)"},{"line_number":179,"context_line":"        # NODE_METRICS requires ONTAP 9.13+; older releases use counters."},{"line_number":180,"context_line":"        self.features.add_feature(\u0027NODE_METRICS\u0027, supported\u003dontap_9_13)"},{"line_number":181,"context_line":"        self.features.add_feature(\u0027CLONE_SPLIT_STATUS\u0027, supported\u003dontap_9_0)"},{"line_number":182,"context_line":"        self.features.add_feature(\u0027FAST_CLONE_DELETE\u0027, supported\u003dontap_9_0)"},{"line_number":183,"context_line":"        self.features.add_feature(\u0027SYSTEM_CONSTITUENT_METRICS\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e2ac70e3_4c291991","line":180,"range":{"start_line":179,"start_character":8,"end_line":180,"end_character":71},"updated":"2026-07-31 06:40:44.000000000","message":"Node Metrics APIs are supported from ONTAP 9.8 onwards.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"7061a582b0db922134e38b7f29209ba4f2774037","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.features.add_feature(\u0027USER_CAPABILITY_LIST\u0027,"},{"line_number":177,"context_line":"                                  supported\u003dontap_9_0)"},{"line_number":178,"context_line":"        self.features.add_feature(\u0027SYSTEM_METRICS\u0027, supported\u003dontap_9_0)"},{"line_number":179,"context_line":"        # NODE_METRICS requires ONTAP 9.13+; older releases use counters."},{"line_number":180,"context_line":"        self.features.add_feature(\u0027NODE_METRICS\u0027, supported\u003dontap_9_13)"},{"line_number":181,"context_line":"        self.features.add_feature(\u0027CLONE_SPLIT_STATUS\u0027, supported\u003dontap_9_0)"},{"line_number":182,"context_line":"        self.features.add_feature(\u0027FAST_CLONE_DELETE\u0027, supported\u003dontap_9_0)"},{"line_number":183,"context_line":"        self.features.add_feature(\u0027SYSTEM_CONSTITUENT_METRICS\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f964434e_ab13d245","line":180,"range":{"start_line":179,"start_character":8,"end_line":180,"end_character":71},"in_reply_to":"e2ac70e3_4c291991","updated":"2026-08-14 04:45:02.000000000","message":"update to 9.8 onwards","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a69c9b036814b3d3ae73381b74deef6046b1eef1","unresolved":true,"context_lines":[{"line_number":1127,"context_line":"        if node_uuid:"},{"line_number":1128,"context_line":"            return node_uuid"},{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"        query_args \u003d {\u0027name\u0027: node_name, \u0027fields\u0027: \u0027uuid\u0027}"},{"line_number":1131,"context_line":"        try:"},{"line_number":1132,"context_line":"            response \u003d self.send_request(\u0027/cluster/nodes\u0027, \u0027get\u0027,"},{"line_number":1133,"context_line":"                                         query\u003dquery_args,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f0a43d6e_2c6528c6","line":1130,"updated":"2026-07-31 06:40:44.000000000","message":"you do not need fields query param for getting uuid. ONTAP defaults to sending name and uuid as default.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"7061a582b0db922134e38b7f29209ba4f2774037","unresolved":false,"context_lines":[{"line_number":1127,"context_line":"        if node_uuid:"},{"line_number":1128,"context_line":"            return node_uuid"},{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"        query_args \u003d {\u0027name\u0027: node_name, \u0027fields\u0027: \u0027uuid\u0027}"},{"line_number":1131,"context_line":"        try:"},{"line_number":1132,"context_line":"            response \u003d self.send_request(\u0027/cluster/nodes\u0027, \u0027get\u0027,"},{"line_number":1133,"context_line":"                                         query\u003dquery_args,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c431a0d9_2560023a","line":1130,"in_reply_to":"f0a43d6e_2c6528c6","updated":"2026-08-14 04:45:02.000000000","message":"good to have not removed after discussion.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a69c9b036814b3d3ae73381b74deef6046b1eef1","unresolved":true,"context_lines":[{"line_number":1168,"context_line":"                action_url, \u0027get\u0027, query\u003dquery_args, enable_tunneling\u003dFalse)"},{"line_number":1169,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":1170,"context_line":"            if e.code \u003d\u003d netapp_api.REST_UNAUTHORIZED:"},{"line_number":1171,"context_line":"                LOG.warning(\u0027Node utilization metrics require cluster scoped \u0027"},{"line_number":1172,"context_line":"                            \u0027credentials; using the default utilization for \u0027"},{"line_number":1173,"context_line":"                            \u0027node %s.\u0027, node_name)"},{"line_number":1174,"context_line":"            elif e.code \u003d\u003d netapp_api.REST_API_NOT_FOUND:"},{"line_number":1175,"context_line":"                LOG.warning(\u0027Node utilization metrics are not available for \u0027"},{"line_number":1176,"context_line":"                            \u0027node %s.\u0027, node_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c425d72b_be8c8e11","line":1173,"range":{"start_line":1171,"start_character":15,"end_line":1173,"end_character":50},"updated":"2026-07-31 06:40:44.000000000","message":"The unauthorized response can be due to wrong credentials used as well. So instead, we can say - \"Could not fetch Node utilization metrics due to unauthorized exception; falling back to default utilization for node %s\".","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"9c4e14210b22ab02100df445f2fb76efb7c11430","unresolved":false,"context_lines":[{"line_number":1168,"context_line":"                action_url, \u0027get\u0027, query\u003dquery_args, enable_tunneling\u003dFalse)"},{"line_number":1169,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":1170,"context_line":"            if e.code \u003d\u003d netapp_api.REST_UNAUTHORIZED:"},{"line_number":1171,"context_line":"                LOG.warning(\u0027Node utilization metrics require cluster scoped \u0027"},{"line_number":1172,"context_line":"                            \u0027credentials; using the default utilization for \u0027"},{"line_number":1173,"context_line":"                            \u0027node %s.\u0027, node_name)"},{"line_number":1174,"context_line":"            elif e.code \u003d\u003d netapp_api.REST_API_NOT_FOUND:"},{"line_number":1175,"context_line":"                LOG.warning(\u0027Node utilization metrics are not available for \u0027"},{"line_number":1176,"context_line":"                            \u0027node %s.\u0027, node_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"834efa46_2418730e","line":1173,"range":{"start_line":1171,"start_character":15,"end_line":1173,"end_character":50},"in_reply_to":"c425d72b_be8c8e11","updated":"2026-08-14 04:54:46.000000000","message":"updated log message to reflect above message.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c3326fe758dc95cc83b13f52afea2bd36530a71b","unresolved":true,"context_lines":[{"line_number":545,"context_line":"        # ASA r2 has no counter-based fallback, so always refresh via metrics."},{"line_number":546,"context_line":"        should_update_performance \u003d True"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        if self.using_cluster_credentials and should_update_performance:"},{"line_number":549,"context_line":"            # Get up-to-date node utilization metrics just once"},{"line_number":550,"context_line":"            self.perf_library.update_performance_cache(ssc)"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"66f5c889_048080b1","line":548,"updated":"2026-07-17 15:56:59.000000000","message":"See my comment in block_cmode.py","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"9c4e14210b22ab02100df445f2fb76efb7c11430","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        # ASA r2 has no counter-based fallback, so always refresh via metrics."},{"line_number":546,"context_line":"        should_update_performance \u003d True"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        if self.using_cluster_credentials and should_update_performance:"},{"line_number":549,"context_line":"            # Get up-to-date node utilization metrics just once"},{"line_number":550,"context_line":"            self.perf_library.update_performance_cache(ssc)"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ae5dac8b_4dc5af1d","line":548,"in_reply_to":"66f5c889_048080b1","updated":"2026-08-14 04:54:46.000000000","message":"removed redundant should_update_performance","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"}],"cinder/volume/drivers/netapp/dataontap/utils/capabilities.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c3326fe758dc95cc83b13f52afea2bd36530a71b","unresolved":true,"context_lines":[{"line_number":188,"context_line":"            \u0027netapp_thin_provisioned\u0027: str(not netapp_thick).lower(),"},{"line_number":189,"context_line":"            \u0027thick_provisioning_support\u0027: thick,"},{"line_number":190,"context_line":"            \u0027thin_provisioning_support\u0027: not thick,"},{"line_number":191,"context_line":"            \u0027netapp_aggregate\u0027: aggregates if is_flexgroup else aggregates[0],"},{"line_number":192,"context_line":"            \u0027netapp_is_flexgroup\u0027: str(is_flexgroup).lower(),"},{"line_number":193,"context_line":"        }"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"2031cfdd_980f8bf5","line":191,"range":{"start_line":191,"start_character":64,"end_line":191,"end_character":77},"updated":"2026-07-17 15:56:59.000000000","message":"from line 185, \u0027aggregates\u0027 could be \u0027[]\u0027, in which case this will raise an IndexError","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"9c4e14210b22ab02100df445f2fb76efb7c11430","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            \u0027netapp_thin_provisioned\u0027: str(not netapp_thick).lower(),"},{"line_number":189,"context_line":"            \u0027thick_provisioning_support\u0027: thick,"},{"line_number":190,"context_line":"            \u0027thin_provisioning_support\u0027: not thick,"},{"line_number":191,"context_line":"            \u0027netapp_aggregate\u0027: aggregates if is_flexgroup else aggregates[0],"},{"line_number":192,"context_line":"            \u0027netapp_is_flexgroup\u0027: str(is_flexgroup).lower(),"},{"line_number":193,"context_line":"        }"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"b6b027b4_8c607af6","line":191,"range":{"start_line":191,"start_character":64,"end_line":191,"end_character":77},"in_reply_to":"2031cfdd_980f8bf5","updated":"2026-08-14 04:54:46.000000000","message":"added additional checks to avoid index erros.","commit_id":"0bc5ce4ab8ba2016cbfb8aed4e68300e8f7f893e"}]}
