)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bbca2837_60403802","updated":"2026-05-04 18:04:49.000000000","message":"Please look at the comments.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"a014d30370bc3834eac6ecd9db63806c89d3e231","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"677ae66d_31b38205","updated":"2026-04-23 16:31:50.000000000","message":"recheck - devstack-plugin-nfs-tempest-full No valid host","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"20f1c689c92c715954070592aa32a26c08af2e34","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a1be2eb8_a03935c9","updated":"2026-04-27 09:01:05.000000000","message":"recheck - devstack-plugin-nfs-tempest-full No valid host","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"76f02601c1a79181d9c58e23e3977586b3799c55","unresolved":true,"context_lines":[{"line_number":2403,"context_line":"        api_args \u003d {"},{"line_number":2404,"context_line":"            \u0027desired-attributes\u0027: {"},{"line_number":2405,"context_line":"                \u0027qos-policy-group-info\u0027: {"},{"line_number":2406,"context_line":"                    \u0027policy-group\u0027: None,"},{"line_number":2407,"context_line":"                    \u0027num-workloads\u0027: None,"},{"line_number":2408,"context_line":"                }"},{"line_number":2409,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":2,"id":"b29fdf98_b0d4842b","line":2406,"updated":"2026-04-30 18:11:54.000000000","message":"policy-group never used","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"}],"cinder/volume/drivers/netapp/dataontap/block_cmode.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"76f02601c1a79181d9c58e23e3977586b3799c55","unresolved":true,"context_lines":[{"line_number":410,"context_line":"                aggregates)"},{"line_number":411,"context_line":"            LOG.debug(\"Aggregate capacities successfully fetched: %s\","},{"line_number":412,"context_line":"                      aggr_capacities)"},{"line_number":413,"context_line":"            qos_wl_stats \u003d self.zapi_client.get_cluster_qos_statistics()"},{"line_number":414,"context_line":"        else:"},{"line_number":415,"context_line":"            aggr_capacities \u003d {}"},{"line_number":416,"context_line":"            qos_wl_stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3289d350_931355e3","line":413,"updated":"2026-04-30 18:11:54.000000000","message":"QoS stats are cluster scoped. what if user set vsadmin in cinder.conf?","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":true,"context_lines":[{"line_number":410,"context_line":"                aggregates)"},{"line_number":411,"context_line":"            LOG.debug(\"Aggregate capacities successfully fetched: %s\","},{"line_number":412,"context_line":"                      aggr_capacities)"},{"line_number":413,"context_line":"            qos_wl_stats \u003d self.zapi_client.get_cluster_qos_statistics()"},{"line_number":414,"context_line":"        else:"},{"line_number":415,"context_line":"            aggr_capacities \u003d {}"},{"line_number":416,"context_line":"            qos_wl_stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"143ac96a_9ed2b89d","line":413,"in_reply_to":"3289d350_931355e3","updated":"2026-05-04 18:04:49.000000000","message":"Not sure if this is true for the QoS Policy GET APIs. The creation of QoS policies at cluster level is only possible via the cluster level credentials. GET IMO should be possible. But this needs to be double checked.\n\nAnother thing is, we are calling this capability netapp_cluster_qos_policy_groups_used and netapp_cluster_qos_workloads_used while this may not be possible to be fetched via SVM level credentials. That handling is missing from the code. Ideally (and we may need to check if GET API for QoS with SVM credential works) if the SVM credentials work, these capabilities must just be called netapp_qos_workloads_used and netapp_qos_policy_groups_used. Can you please verify this part as this is important.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":true,"context_lines":[{"line_number":497,"context_line":"            pool[\u0027netapp_aggregate_used_percent\u0027] \u003d aggr_capacity.get("},{"line_number":498,"context_line":"                \u0027percent-used\u0027, 0)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"            pool[\u0027netapp_cluster_qos_policy_groups_used\u0027] \u003d \\"},{"line_number":501,"context_line":"                qos_wl_stats.get(\u0027qos_policies\u0027, 0)"},{"line_number":502,"context_line":"            pool[\u0027netapp_cluster_qos_workloads_used\u0027] \u003d \\"},{"line_number":503,"context_line":"                qos_wl_stats.get(\u0027qos_assigned_workloads\u0027, 0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"69473a4c_0e1f676b","line":500,"updated":"2026-05-04 18:04:49.000000000","message":"A more apt name would be: \"netapp_cluster_qos_policy_groups_count\" maybe?","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":true,"context_lines":[{"line_number":499,"context_line":""},{"line_number":500,"context_line":"            pool[\u0027netapp_cluster_qos_policy_groups_used\u0027] \u003d \\"},{"line_number":501,"context_line":"                qos_wl_stats.get(\u0027qos_policies\u0027, 0)"},{"line_number":502,"context_line":"            pool[\u0027netapp_cluster_qos_workloads_used\u0027] \u003d \\"},{"line_number":503,"context_line":"                qos_wl_stats.get(\u0027qos_assigned_workloads\u0027, 0)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"            # Add utilization data"}],"source_content_type":"text/x-python","patch_set":2,"id":"48526b0c_7fe193d8","line":502,"updated":"2026-05-04 18:04:49.000000000","message":"netapp_cluster_qos_workloads_assigned?","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"76f02601c1a79181d9c58e23e3977586b3799c55","unresolved":true,"context_lines":[{"line_number":1650,"context_line":"            result \u003d self.send_iter_request(\u0027qos-policy-group-get-iter\u0027,"},{"line_number":1651,"context_line":"                                            api_args, enable_tunneling\u003dFalse)"},{"line_number":1652,"context_line":"        except netapp_api.NaApiError:"},{"line_number":1653,"context_line":"            LOG.exception(\u0027Failed to get QoS info for cluster.\u0027)"},{"line_number":1654,"context_line":"            return qos_stats"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"        if not self._has_records(result):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1cfd478f_2805a55c","line":1653,"updated":"2026-04-30 18:11:54.000000000","message":"NaApiError can be other errors like ex:networks. Hear assumption is QoS related error always.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":true,"context_lines":[{"line_number":1650,"context_line":"            result \u003d self.send_iter_request(\u0027qos-policy-group-get-iter\u0027,"},{"line_number":1651,"context_line":"                                            api_args, enable_tunneling\u003dFalse)"},{"line_number":1652,"context_line":"        except netapp_api.NaApiError:"},{"line_number":1653,"context_line":"            LOG.exception(\u0027Failed to get QoS info for cluster.\u0027)"},{"line_number":1654,"context_line":"            return qos_stats"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"        if not self._has_records(result):"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c251a2a_4be9da78","line":1653,"in_reply_to":"1cfd478f_2805a55c","updated":"2026-05-04 18:04:49.000000000","message":"I think this handling should be fine since the method is to get the qos statistics.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"76f02601c1a79181d9c58e23e3977586b3799c55","unresolved":true,"context_lines":[{"line_number":712,"context_line":"            return qos_stats"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        qos_stats[\u0027qos_policies\u0027] \u003d response[\u0027num_records\u0027]"},{"line_number":715,"context_line":"        for qos_pol in response[\u0027records\u0027]:"},{"line_number":716,"context_line":"            qos_stats[\u0027qos_assigned_workloads\u0027] +\u003d qos_pol.get(\u0027object_count\u0027,"},{"line_number":717,"context_line":"                                                               0)"},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"36c4eb42_d6953ffb","line":715,"updated":"2026-04-30 18:11:54.000000000","message":"can you maintain consistency between records and num_records.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":true,"context_lines":[{"line_number":712,"context_line":"            return qos_stats"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        qos_stats[\u0027qos_policies\u0027] \u003d response[\u0027num_records\u0027]"},{"line_number":715,"context_line":"        for qos_pol in response[\u0027records\u0027]:"},{"line_number":716,"context_line":"            qos_stats[\u0027qos_assigned_workloads\u0027] +\u003d qos_pol.get(\u0027object_count\u0027,"},{"line_number":717,"context_line":"                                                               0)"},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4c620a46_a0790e66","line":715,"in_reply_to":"36c4eb42_d6953ffb","updated":"2026-05-04 18:04:49.000000000","message":"records is the records array and num_records tells the number of records. I guess the intention is to get the number of qos_policies and assign it to qos_stats[\u0027qos_policies\u0027] while here the idea is to loop through the records and sum all the assigned workloads for all QoS policies.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"}],"releasenotes/notes/netapp-qos-stats-72d577fdb21496e2.yaml":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1b06a4bfe89c2128887e81b1d6aded702928f7ad","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    ONTAP can handle up to about 12,000 QoS policies on releases newer"},{"line_number":7,"context_line":"    than 9.4 [1]. In environments using backend QoS policies, this"},{"line_number":8,"context_line":"    effectively limits the number of volumes that can be created on a"},{"line_number":9,"context_line":"    single NetApp cluster. In order to avoid hitting this limit, operators can"},{"line_number":10,"context_line":"    now monitor QoS usage and set thresholds to exclude pools before reaching"},{"line_number":11,"context_line":"    this limit."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    The following pool attributes are added to the pool statistics:"},{"line_number":14,"context_line":"    ``netapp_cluster_qos_policy_groups_used`` and ``netapp_cluster_qos_workloads_used``"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"294e4c1a_a2b88156","line":11,"range":{"start_line":9,"start_character":27,"end_line":11,"end_character":15},"updated":"2026-05-04 18:04:49.000000000","message":"Is the idea to also be able to filter backends based on the qos workload assignment? If so, I think we should mention that in the release notes.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"}]}
