)]}'
{"id":"openstack%2Foslo.limit~794851","triplet_id":"openstack%2Foslo.limit~master~Ic0632cc5ec52aefb85a04f879651963bfa54dcbe","project":"openstack/oslo.limit","branch":"master","topic":"add-calc-limits","hashtags":[],"change_id":"Ic0632cc5ec52aefb85a04f879651963bfa54dcbe","subject":"Add Enforcer.calculate_usage()","status":"MERGED","created":"2021-06-04 15:26:17.000000000","updated":"2021-06-09 04:15:39.000000000","submitted":"2021-06-09 04:14:17.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":6,"unresolved_comment_count":1,"has_review_started":true,"submission_id":"794851-add-calc-limits","meta_rev_id":"ce567f53225f2e95953f5406d80a24c77b1b8bcf","_number":794851,"virtual_id_number":794851,"owner":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2021-06-09 04:14:16.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"all":[{"value":2,"date":"2021-06-07 15:52:23.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":2,"date":"2021-06-09 02:23:41.000000000","_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"all":[{"value":0,"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":1,"date":"2021-06-09 02:23:41.000000000","_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Backport-Candidate":{"all":[{"value":0,"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"}],"values":{"-2":"Do Not Backport","-1":"Not A Backport Candidate"," 0":"Backport Review Needed","+1":"Proposed Backport","+2":"Should Backport"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"}],"reviewers":{"REVIEWER":[{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2021-06-04 16:50:41.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2021-06-04 18:37:40.000000000","updated_by":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"reviewer":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"state":"REVIEWER"},{"updated":"2021-06-07 15:38:06.000000000","updated_by":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"reviewer":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"state":"REVIEWER"},{"updated":"2021-06-09 02:23:41.000000000","updated_by":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"reviewer":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"state":"REVIEWER"}],"messages":[{"id":"28147f93a3d54608a081328d1f86eb16ded2ba36","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2021-06-04 15:26:17.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"dfce221bcb0563bf52c0118a650589f69a86bf8f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-06-04 16:50:41.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/c3bed9e52d5f4df498de705bc77d8056 : SUCCESS in 1h 22m 35s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/41072262a9164cc9b691a23e071010ab : SUCCESS in 5m 13s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/305cc37184fc4002b1ab331bef4380d1 : SUCCESS in 4m 01s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/12453b1ca8834debb296c088b9e8c28e : SUCCESS in 4m 37s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/9f562f5a19984e9a9c22f38ab1843412 : SUCCESS in 4m 51s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/e4d8d6ad7258490292bec7650fb0ae37 : SUCCESS in 4m 19s\n- oslo-limit-functional-devstack https://zuul.opendev.org/t/openstack/build/afdd524f11894938958153ea88da5d07 : SUCCESS in 28m 52s","accounts_in_message":[],"_revision_number":1},{"id":"f99e07a31443b01e650660aa7f266996fd21b6fb","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2021-06-04 18:37:40.000000000","message":"Patch Set 1:\n\nJohn, I\u0027m not sure if you\u0027re the right person to review this, but maybe you know who to poke?\n\nFYI, I\u0027m using this here, as an example:\n\nhttps://review.opendev.org/c/openstack/glance/+/794860","accounts_in_message":[],"_revision_number":1},{"id":"93fb2a3e4fa1c9aa4b5d9925b896f99c0d9cebe6","author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"date":"2021-06-07 15:38:06.000000000","message":"Patch Set 1: Code-Review+2\n\n(2 comments)\n\nOne nit on the docstring, but that could be added later. Overall it seems like a good thing to have a common place to calculate usage so each project doesn\u0027t have its own logic.","accounts_in_message":[],"_revision_number":1},{"id":"68aa8abc1dc2ae0c44e77cee689415d3d4c0b1c1","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2021-06-07 15:42:10.000000000","message":"Patch Set 1:\n\n(2 comments)","accounts_in_message":[],"_revision_number":1},{"id":"ac4fd4b6d1c028e3dc8226949a1c36be839440db","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2021-06-07 15:45:37.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"ffc557a3ccafce4e8c7163a4a5d592d5795e4315","author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"date":"2021-06-07 15:52:23.000000000","message":"Patch Set 2: Code-Review+2\n\n(1 comment)\n\nThanks!","accounts_in_message":[],"_revision_number":2},{"id":"9bd1abbbb1bd5a814dddd35a9ed335648b584067","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2021-06-07 15:55:05.000000000","message":"Patch Set 2:\n\n(1 comment)\n\nThanks Ben!","accounts_in_message":[],"_revision_number":2},{"id":"c8e1b664ffb7795d06ac511987573d3b0d6ed726","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-06-07 17:17:49.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/a0a1c624f76b4d5c845fe4a68f3a632c : SUCCESS in 1h 29m 18s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/8ffa8dfc6d1140c285586e753e8b86ca : SUCCESS in 4m 18s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/4aa06b46086a4f05b77a232c4e6a73ae : SUCCESS in 4m 15s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/900f08e5e5a44b20bb758c3b30b02ac6 : SUCCESS in 4m 24s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/eeb22c08c7754d5d823de57c1b663a8d : SUCCESS in 4m 02s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f5e112e43efa4b5fabe6409d448b717e : SUCCESS in 4m 32s\n- oslo-limit-functional-devstack https://zuul.opendev.org/t/openstack/build/f491ad555abf4e97b8e183834fc2c1eb : SUCCESS in 34m 34s","accounts_in_message":[],"_revision_number":2},{"id":"166431b73ebbda89aeae184df272c532c0979461","author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"date":"2021-06-09 02:23:41.000000000","message":"Patch Set 2: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":2},{"id":"423081e7b1b27629a27d11d0a27f29ca8a72bdb3","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-06-09 02:23:58.000000000","message":"Patch Set 2: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":2},{"id":"f12219edd306c09a423f9ffe48ef6b6112bd801c","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-06-09 04:14:16.000000000","message":"Patch Set 2: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/27f6b2ce03ed46daa1e69ecaa3bccfb2 : SUCCESS in 1h 44m 53s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/82d71f3d5f7d4a25bfea3b566ad93cf8 : SUCCESS in 3m 18s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/2f57a863d36940f9a74c9e383dae43b0 : SUCCESS in 3m 39s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/f30ef029c418418ab0a0539dea55c632 : SUCCESS in 3m 21s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f8783df56cee4bfdba935b03273116ed : SUCCESS in 4m 05s\n- oslo-limit-functional-devstack https://zuul.opendev.org/t/openstack/build/25a134460ffd4a99a3fc61037c1890c2 : SUCCESS in 31m 19s","accounts_in_message":[],"_revision_number":2},{"id":"8188276013636ae52f16a672a1db71182e0475ad","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-06-09 04:14:17.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":2},{"id":"ce567f53225f2e95953f5406d80a24c77b1b8bcf","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-06-09 04:15:39.000000000","message":"Patch Set 2:\n\nBuild succeeded (promote pipeline).\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/feecb6ead646492e90e4df2bb3a1b9d9 : SUCCESS in 1m 07s","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"1175b0f7c1bc4f042d611396ecee5720e1b2d7bd","revisions":{"11549709bb4c84afbf83e87015574f8ba810e086":{"kind":"REWORK","_number":1,"created":"2021-06-04 15:26:17.000000000","uploader":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"ref":"refs/changes/51/794851/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.limit","ref":"refs/changes/51/794851/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/1"}}},"commit":{"parents":[{"commit":"efc26ae724d504ce3bdd5fc21b39a79fa93552a8","subject":"Upgrade the pre-commit-hooks version","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.limit/commit/efc26ae724d504ce3bdd5fc21b39a79fa93552a8"}]}],"author":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2021-06-04 15:00:41.000000000","tz":-420},"committer":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2021-06-04 15:28:17.000000000","tz":-420},"subject":"Add Enforcer.calculate_usage()","message":"Add Enforcer.calculate_usage()\n\nIn multiple situations, it is necessary to be able to probe the limits\nset for a project without actually enforcing. Examples:\n\n1. Exposing a usage API where we want to not only report the current\n   usage, but the limit as well. Otherwise clients have to do their\n   own calls to keystone and correlation to get a single integer\n   limit value, which we should be able to expose for them.\n2. When checking quota as part of a long-running process of consuming\n   an unbounded data stream, we need to be able to determine how much\n   quota remains so that we can stop the transfer if we exceed the\n   limit. Without this, we have to periodically call to keystone\n   during the transfer, which is expensive and could fail.\n\nThis patch adds a calculate_usage() method to the Enforcer which\ncalculates the usage using the enforcement model and returns a\nmapping of resource names to namedtuples that contain limit and usage\ninformation.\n\nChange-Id: Ic0632cc5ec52aefb85a04f879651963bfa54dcbe\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.limit/commit/11549709bb4c84afbf83e87015574f8ba810e086"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.limit/commit/11549709bb4c84afbf83e87015574f8ba810e086"}]},"branch":"refs/heads/master"},"1175b0f7c1bc4f042d611396ecee5720e1b2d7bd":{"kind":"REWORK","_number":2,"created":"2021-06-07 15:45:37.000000000","uploader":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"ref":"refs/changes/51/794851/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.limit","ref":"refs/changes/51/794851/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.limit refs/changes/51/794851/2"}}},"commit":{"parents":[{"commit":"efc26ae724d504ce3bdd5fc21b39a79fa93552a8","subject":"Upgrade the pre-commit-hooks version","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.limit/commit/efc26ae724d504ce3bdd5fc21b39a79fa93552a8"}]}],"author":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2021-06-04 15:00:41.000000000","tz":-420},"committer":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2021-06-07 15:47:38.000000000","tz":-420},"subject":"Add Enforcer.calculate_usage()","message":"Add Enforcer.calculate_usage()\n\nIn multiple situations, it is necessary to be able to probe the limits\nset for a project without actually enforcing. Examples:\n\n1. Exposing a usage API where we want to not only report the current\n   usage, but the limit as well. Otherwise clients have to do their\n   own calls to keystone and correlation to get a single integer\n   limit value, which we should be able to expose for them.\n2. When checking quota as part of a long-running process of consuming\n   an unbounded data stream, we need to be able to determine how much\n   quota remains so that we can stop the transfer if we exceed the\n   limit. Without this, we have to periodically call to keystone\n   during the transfer, which is expensive and could fail.\n\nThis patch adds a calculate_usage() method to the Enforcer which\ncalculates the usage using the enforcement model and returns a\nmapping of resource names to namedtuples that contain limit and usage\ninformation.\n\nChange-Id: Ic0632cc5ec52aefb85a04f879651963bfa54dcbe\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.limit/commit/1175b0f7c1bc4f042d611396ecee5720e1b2d7bd"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.limit/commit/1175b0f7c1bc4f042d611396ecee5720e1b2d7bd"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"status":"CLOSED","labels":[{"label":"Verified","status":"OK","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"OK","applied_by":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"}},{"label":"Workflow","status":"OK","applied_by":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"}},{"label":"Backport-Candidate","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Workflow","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Workflow\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}}]}
