)]}'
{"/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"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","unresolved":false,"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":"5623dc93_5f51ffce","line":2406,"in_reply_to":"b29fdf98_b0d4842b","updated":"2026-05-12 09:02:57.000000000","message":"removed it :)","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":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","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":"3b392276_2ef13916","line":413,"in_reply_to":"143ac96a_9ed2b89d","updated":"2026-05-12 09:02:57.000000000","message":"So I tried it on our side. With a svm scoped \"vsadmin\" user we can\u0027t even fetch QOS policies on svm level.\n\nresp:\n  \"error\": {\n    \"message\": \"not authorized for that command\",\n    \"code\": \"6\"\n  }\n\nTherefore I added an log statement after the query. Similar to other endpoints","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":"5c919604ecaf71baf11b138beca67077c1b28b91","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":"e24a2a09_88271257","line":413,"in_reply_to":"3b392276_2ef13916","updated":"2026-05-21 16:00:35.000000000","message":"Acknowledged.","commit_id":"e4b43d9ec182112c4453eeb3bdc68cff4221f69e"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"f21a53926009145cdeaaa33767489132a44c4159","unresolved":false,"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":"30ee8e15_dbe89f28","line":413,"in_reply_to":"e24a2a09_88271257","updated":"2026-05-21 16:10:45.000000000","message":"Done","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":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","unresolved":false,"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":"98813c2b_88a78860","line":500,"in_reply_to":"69473a4c_0e1f676b","updated":"2026-05-12 09:02:57.000000000","message":"Done","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"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","unresolved":false,"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":"c2b756bd_1c242af7","line":502,"in_reply_to":"48526b0c_7fe193d8","updated":"2026-05-12 09:02:57.000000000","message":"Done, renamed","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"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","unresolved":false,"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":"f7b76468_a1eff850","line":1653,"in_reply_to":"2c251a2a_4be9da78","updated":"2026-05-12 09:02:57.000000000","message":"Acknowledged","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"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","unresolved":false,"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":"1c01e93a_dd995b1c","line":715,"in_reply_to":"4c620a46_a0790e66","updated":"2026-05-12 09:02:57.000000000","message":"Exactly - num_records is the amount of qos_policies returned by the netapp api\n\nfor the workloads we need to iterate over the entries and sum the object_count per policy.","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"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"46786051987d71efabc63871892014da57a8c33e","unresolved":false,"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":"ddb2e6a3_1dbeaee3","line":11,"range":{"start_line":9,"start_character":27,"end_line":11,"end_character":15},"in_reply_to":"294e4c1a_a2b88156","updated":"2026-05-12 09:02:57.000000000","message":"Mentioned it in the releasenote","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":"5c919604ecaf71baf11b138beca67077c1b28b91","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp ONTAP driver: added cluster-level QoS statistics to pool reporting."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    ONTAP can handle up to about 12k QoS policies and 40k workloads 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 capabilities are added to the pool statistics:"},{"line_number":14,"context_line":"    ``netapp_cluster_qos_policy_groups_count`` and ``netapp_cluster_qos_workloads_assigned``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"2e3faac4_4f5b852c","line":11,"range":{"start_line":6,"start_character":4,"end_line":11,"end_character":15},"updated":"2026-05-21 16:00:35.000000000","message":"Ideally, QoS policies were meant to be \u0027reused\u0027 since a 1:1 mapping of Volumes to QoS is not the best design. The reason why we support \u0027passing\u0027 a QoS policy to create a Cinder Volume. Do you think that would be a better approach instead of reaching ONTAP limits of 12000?","commit_id":"4f937bc0837a015ee41e085be8a6ded8df1e3042"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"f21a53926009145cdeaaa33767489132a44c4159","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp ONTAP driver: added cluster-level QoS statistics to pool reporting."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    ONTAP can handle up to about 12k QoS policies and 40k workloads 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 capabilities are added to the pool statistics:"},{"line_number":14,"context_line":"    ``netapp_cluster_qos_policy_groups_count`` and ``netapp_cluster_qos_workloads_assigned``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"e4d4d035_4d220b9d","line":11,"range":{"start_line":6,"start_character":4,"end_line":11,"end_character":15},"in_reply_to":"2e3faac4_4f5b852c","updated":"2026-05-21 16:10:45.000000000","message":"I totally agree with that. We did this on our end to be able to schedule 40k instead 12k volumes per cluster. Thats also why I directly added both counters to the pool stats.\n\nhttps://gitlab.com/yaook/images/cinder/-/blob/devel/patches/cinder/feat-netapp_use_policy_group_per_volume_type_master.patch\n- This is a draft patch to introduce a \"netapp_use_policy_group_per_volume_type\" config option in order to create QOS policy per volume type instead of per volume.\n\nMy plan is to make this patch nice and bring it upstream :)\n\nAnyway it would be good to have this \"usage reporting\" independently for scheduling.","commit_id":"4f937bc0837a015ee41e085be8a6ded8df1e3042"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"58f565038ba9c8482a723c79ebee1dbfa1a41b83","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp ONTAP driver: added cluster-level QoS statistics to pool reporting."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    ONTAP can handle up to about 12k QoS policies and 40k workloads 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 capabilities are added to the pool statistics:"},{"line_number":14,"context_line":"    ``netapp_cluster_qos_policy_groups_count`` and ``netapp_cluster_qos_workloads_assigned``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ed60e6b2_5c897a9e","line":11,"range":{"start_line":6,"start_character":4,"end_line":11,"end_character":15},"in_reply_to":"e4d4d035_4d220b9d","updated":"2026-05-26 15:37:06.000000000","message":"Fair point. The reason I am asking this question is its alarming to see 12000 limits on QoS was reached. In my knowledge I havent seen such a scenario till date 🙂\n\nThat said, I think I am okay with the approach for it to be added as a filter param via capability so that someone can decide on how loaded the QoS policies per cluster are. Although, I would still point to reuse the QoS where possible because each volume provisioning a QoS of its own is unnecessary load on the storage.","commit_id":"4f937bc0837a015ee41e085be8a6ded8df1e3042"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"02177f32bafd37b4ced3860441c31311e047bc69","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp ONTAP driver: added cluster-level QoS statistics to pool reporting."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    ONTAP can handle up to about 12k QoS policies and 40k workloads 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 capabilities are added to the pool statistics:"},{"line_number":14,"context_line":"    ``netapp_cluster_qos_policy_groups_count`` and ``netapp_cluster_qos_workloads_assigned``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"afe68a80_6471c3df","line":11,"range":{"start_line":6,"start_character":4,"end_line":11,"end_character":15},"in_reply_to":"ed60e6b2_5c897a9e","updated":"2026-05-26 15:45:55.000000000","message":"To be honest... I made the change because we\u0027re close in reaching the 40k limit :D","commit_id":"4f937bc0837a015ee41e085be8a6ded8df1e3042"}]}
