)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9d76313819b7559019f4c7b2e169ded2cf4a2e10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"94749730_aa3f7b06","updated":"2021-10-21 12:40:33.000000000","message":"You should add extension \"quota-check-limit\" (definition is already in the neutron-lib AFAICT) and add it to the list of the supported extensions in ML2 so this feature will be discoverable in API.","commit_id":"ef86a156365c3c268b1f07fc7149d22eabc5a5be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27b86991f2895f07bcd61236c85b7e6a1c78b52a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"48db5eae_fb5cc98d","in_reply_to":"94749730_aa3f7b06","updated":"2021-10-22 07:40:02.000000000","message":"Right!","commit_id":"ef86a156365c3c268b1f07fc7149d22eabc5a5be"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fe0bd9e017da68e5b44505d2cf7cf8c3615ed682","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"36366726_b398346b","updated":"2021-10-28 13:39:23.000000000","message":"Now it seems to be ok. Thx 😊","commit_id":"5a7a8db0d87c2027287e8fb074ee0f681e6369bb"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1e592966117f9e7ff6fc49d7adc89ecba8985504","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"de7efe7e_75188a4a","updated":"2021-11-02 08:32:29.000000000","message":"recheck","commit_id":"5a7a8db0d87c2027287e8fb074ee0f681e6369bb"}],"neutron/db/quota/api.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f65e02ecf1204a6722a02fd03d8bc7cf5ca3034e","unresolved":true,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @staticmethod"},{"line_number":367,"context_line":"    @abc.abstractmethod"},{"line_number":368,"context_line":"    def get_resource_usage(context, project_id, resources, resource_name):"},{"line_number":369,"context_line":"        \"\"\"Return the resource current usage"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param context: The request context, for access checks."}],"source_content_type":"text/x-python","patch_set":2,"id":"6719473f_a5eb74f6","line":368,"range":{"start_line":368,"start_character":48,"end_line":368,"end_character":72},"updated":"2021-09-06 09:01:45.000000000","message":"why need both? Can it just be resource (an item from resources dict)?","commit_id":"38146104507d22597e89ce58d4da71eac23c07f3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14368f5a94998356a50409ed214cfd4bb80028b1","unresolved":true,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @staticmethod"},{"line_number":367,"context_line":"    @abc.abstractmethod"},{"line_number":368,"context_line":"    def get_resource_usage(context, project_id, resources, resource_name):"},{"line_number":369,"context_line":"        \"\"\"Return the resource current usage"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param context: The request context, for access checks."}],"source_content_type":"text/x-python","patch_set":2,"id":"e1f7b281_0e31cdcf","line":368,"range":{"start_line":368,"start_character":48,"end_line":368,"end_character":72},"in_reply_to":"6719473f_a5eb74f6","updated":"2021-09-08 14:17:50.000000000","message":"Right but I prefer to leave to the driver implementation the logic of what to do if the resource does not exist. For example, in both drivers [1][2] we are just returning None. But does depends on the driver, this is why I pass both, the resource name and the resources dictionary (that is a common structure in the quota engine).\n\n[1]https://review.opendev.org/c/openstack/neutron/+/801470/2/neutron/db/quota/driver.py#316\n[2]https://review.opendev.org/c/openstack/neutron/+/801470/2/neutron/db/quota/driver_nolock.py#81","commit_id":"38146104507d22597e89ce58d4da71eac23c07f3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d9607233ef8ae72c43c1d733b36fdf0d2ddf625f","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @staticmethod"},{"line_number":367,"context_line":"    @abc.abstractmethod"},{"line_number":368,"context_line":"    def get_resource_usage(context, project_id, resources, resource_name):"},{"line_number":369,"context_line":"        \"\"\"Return the resource current usage"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param context: The request context, for access checks."}],"source_content_type":"text/x-python","patch_set":2,"id":"940e88c9_9760edd8","line":368,"range":{"start_line":368,"start_character":48,"end_line":368,"end_character":72},"in_reply_to":"e1f7b281_0e31cdcf","updated":"2021-10-20 14:17:12.000000000","message":"Done","commit_id":"38146104507d22597e89ce58d4da71eac23c07f3"}],"neutron/db/quota/driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f65e02ecf1204a6722a02fd03d8bc7cf5ca3034e","unresolved":true,"context_lines":[{"line_number":222,"context_line":"            requested_resources \u003d (set(requested_resources) -"},{"line_number":223,"context_line":"                                   unlimited_resources)"},{"line_number":224,"context_line":"            # Gather current usage information"},{"line_number":225,"context_line":"            # TODO(salv-orlando): calling count() for every resource triggers"},{"line_number":226,"context_line":"            # multiple queries on quota usage. This should be improved, however"},{"line_number":227,"context_line":"            # this is not an urgent matter as the REST API currently only"},{"line_number":228,"context_line":"            # allows allocation of a resource at a time"},{"line_number":229,"context_line":"            # NOTE: pass plugin too for compatibility with CountableResource"},{"line_number":230,"context_line":"            # instances"},{"line_number":231,"context_line":"            current_usages \u003d dict("}],"source_content_type":"text/x-python","patch_set":2,"id":"1e89dbd5_5994cdd3","line":228,"range":{"start_line":225,"start_character":12,"end_line":228,"end_character":55},"updated":"2021-09-06 09:01:45.000000000","message":"should this be moved to get_resource_usage() now?","commit_id":"38146104507d22597e89ce58d4da71eac23c07f3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14368f5a94998356a50409ed214cfd4bb80028b1","unresolved":true,"context_lines":[{"line_number":222,"context_line":"            requested_resources \u003d (set(requested_resources) -"},{"line_number":223,"context_line":"                                   unlimited_resources)"},{"line_number":224,"context_line":"            # Gather current usage information"},{"line_number":225,"context_line":"            # TODO(salv-orlando): calling count() for every resource triggers"},{"line_number":226,"context_line":"            # multiple queries on quota usage. This should be improved, however"},{"line_number":227,"context_line":"            # this is not an urgent matter as the REST API currently only"},{"line_number":228,"context_line":"            # allows allocation of a resource at a time"},{"line_number":229,"context_line":"            # NOTE: pass plugin too for compatibility with CountableResource"},{"line_number":230,"context_line":"            # instances"},{"line_number":231,"context_line":"            current_usages \u003d dict("}],"source_content_type":"text/x-python","patch_set":2,"id":"39d14adc_bebd6f33","line":228,"range":{"start_line":225,"start_character":12,"end_line":228,"end_character":55},"in_reply_to":"1e89dbd5_5994cdd3","updated":"2021-09-08 14:17:50.000000000","message":"Right!","commit_id":"38146104507d22597e89ce58d4da71eac23c07f3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d9607233ef8ae72c43c1d733b36fdf0d2ddf625f","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            requested_resources \u003d (set(requested_resources) -"},{"line_number":223,"context_line":"                                   unlimited_resources)"},{"line_number":224,"context_line":"            # Gather current usage information"},{"line_number":225,"context_line":"            # TODO(salv-orlando): calling count() for every resource triggers"},{"line_number":226,"context_line":"            # multiple queries on quota usage. This should be improved, however"},{"line_number":227,"context_line":"            # this is not an urgent matter as the REST API currently only"},{"line_number":228,"context_line":"            # allows allocation of a resource at a time"},{"line_number":229,"context_line":"            # NOTE: pass plugin too for compatibility with CountableResource"},{"line_number":230,"context_line":"            # instances"},{"line_number":231,"context_line":"            current_usages \u003d dict("}],"source_content_type":"text/x-python","patch_set":2,"id":"b8885d21_b8e804a0","line":228,"range":{"start_line":225,"start_character":12,"end_line":228,"end_character":55},"in_reply_to":"39d14adc_bebd6f33","updated":"2021-10-20 14:17:12.000000000","message":"Done","commit_id":"38146104507d22597e89ce58d4da71eac23c07f3"}],"neutron/db/quota/driver_nolock.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9d76313819b7559019f4c7b2e169ded2cf4a2e10","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        tracked_resource \u003d resources.get(resource_name)"},{"line_number":80,"context_line":"        if not tracked_resource:"},{"line_number":81,"context_line":"            return"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return tracked_resource.count(context, None, project_id,"},{"line_number":84,"context_line":"                                      count_db_registers\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"f8450027_81ad145e","line":82,"updated":"2021-10-21 12:40:33.000000000","message":"nitty nit: unrelated change","commit_id":"ef86a156365c3c268b1f07fc7149d22eabc5a5be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27b86991f2895f07bcd61236c85b7e6a1c78b52a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        tracked_resource \u003d resources.get(resource_name)"},{"line_number":80,"context_line":"        if not tracked_resource:"},{"line_number":81,"context_line":"            return"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return tracked_resource.count(context, None, project_id,"},{"line_number":84,"context_line":"                                      count_db_registers\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"97acaeb9_40493525","line":82,"in_reply_to":"f8450027_81ad145e","updated":"2021-10-22 07:40:02.000000000","message":"Done","commit_id":"ef86a156365c3c268b1f07fc7149d22eabc5a5be"}]}
