)]}'
{"id":"openstack%2Fplacement~998874","triplet_id":"openstack%2Fplacement~stable%2F2026.1~I9bac03b0162009cdcea024f091bf63b177eaa279","project":"openstack/placement","branch":"stable/2026.1","topic":"bug/2160721","attention_set":{},"removed_from_attention_set":{"9708":{"account":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"last_update":"2026-08-05 20:07:58.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"I9bac03b0162009cdcea024f091bf63b177eaa279","subject":"Check overall capacity before generating candidates","status":"MERGED","created":"2026-07-28 08:04:21.000000000","updated":"2026-08-05 20:10:38.000000000","submitted":"2026-08-05 20:07:58.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":1,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"998874-bug/2160721","meta_rev_id":"afc2f7a70a33becac767c2ed452aa21185c5ca61","_number":998874,"virtual_id_number":998874,"owner":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-08-05 20:07:58.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"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":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"all":[{"value":2,"date":"2026-08-05 18:11:00.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":2,"date":"2026-07-28 08:39:30.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"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":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"all":[{"value":1,"date":"2026-08-05 18:11:00.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-07-28 08:39:30.000000000","updated_by":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"reviewer":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"state":"REVIEWER"},{"updated":"2026-07-28 10:14:50.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":"2026-08-05 18:11:00.000000000","updated_by":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"reviewer":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"state":"REVIEWER"}],"messages":[{"id":"8527cc8b04c0a4d777831fce1679aa841f98fa85","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2026-07-28 08:04:21.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"3632e1624f7be3e3b9a13d80f765ff0c8e6f06c7","author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"date":"2026-07-28 08:39:30.000000000","message":"Patch Set 1: Code-Review+2","accounts_in_message":[],"_revision_number":1},{"id":"423ddcd988e51edaedbdd6a909a54f653af5c986","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-28 10:14:50.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/309ba9bf428942e28e5579f03b1faed3\n\n- grenade https://zuul.opendev.org/t/openstack/build/c4353f554aba4b6eaff3a88ec794c8a7 : SUCCESS in 41m 49s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/c98ca0959ccb4a9d9d3187441cd9bd68 : SUCCESS in 43m 50s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/1a20f3a22f6c48bbb7413e97d2fff8b6 : SUCCESS in 2h 02m 59s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/4b3d7957ebce4d0fbd99d96d8073e809 : SUCCESS in 1h 07m 03s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/4849017534f04371ab3e84fa17feb119 : SUCCESS in 12m 54s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/335f9a83ddc143ef91a44487040858d5 : SUCCESS in 4m 01s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/c2ecdfc2c3074d778bbcc7b07e6d6d9e : SUCCESS in 3m 32s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/1a18f05d15ab4814b7ddd693df1a5972 : SUCCESS in 3m 33s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/5d248d1454884e739ba90ab597acc5de : FAILURE in 8m 12s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/b50da113c3c34c778e8fdbaa0cd81a11 : SUCCESS in 9m 44s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/7c14d9ac1ebe4648ad4737387abe4b38 : SUCCESS in 7m 55s\n- openstack-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/27b264c90fc64d829790e69e6371d286 : SUCCESS in 5m 22s\n- openstack-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/8be75769b927449a90fd210aaaa8b636 : SUCCESS in 5m 41s\n- placement-nova-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/c5c6403ed55e4337830c5e8e3671fb60 : SUCCESS in 25m 06s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/70830579b156455cb7c4d21190d008f0 : FAILURE in 3m 27s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/f81f06c558b04f58acc86566e79eea74 : FAILURE in 4m 15s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/1cc0db7d2e254014a89e62605f8805a5 : SUCCESS in 51m 00s","accounts_in_message":[],"_revision_number":1},{"id":"222bc594010a3b06b73cc49727be22f755f89851","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-08-05 18:11:00.000000000","message":"Patch Set 1: Code-Review+2 Workflow+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"e6d41e897ff7819ce62c078d0b6eb9f3e04bd94d","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-05 18:11:37.000000000","message":"Patch Set 1: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":1},{"id":"8f486a2344795a657633662450e4453a6c494570","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-05 20:07:58.000000000","message":"Patch Set 1: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/320cd2f98b8a4789ba1cb817c372ecaa\n\n- grenade https://zuul.opendev.org/t/openstack/build/434de1bb9eac40f1a3db65b6dbd05cee : SUCCESS in 1h 07m 57s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/a7118745f3f14d11899c7f283e3453eb : SUCCESS in 1h 15m 27s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/ef1e4ec3bf20432199f3f8274fee39d8 : SUCCESS in 1h 01m 46s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/4f2d1329c00d4c8986c3bf1d3b815494 : SUCCESS in 1h 03m 32s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/d83086bf14ae49dbba9e5b99a9c9e0e9 : SUCCESS in 4m 29s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/5643feee8ec24c9c90df49ee64f0dfbd : SUCCESS in 5m 01s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/37451a28aa6a4aa4b2aff9dc00caa97c : SUCCESS in 4m 07s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/25d1aa7482a44f9d8605f1c825f5691f : SUCCESS in 8m 32s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/8c8aa1c1b6564f8f81602a92e325bb1d : SUCCESS in 3m 53s\n- openstack-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/d492b6d7cd60487eac11505dc91bf12f : SUCCESS in 6m 02s\n- openstack-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/0907af21a4424eca832fefec0be1ad55 : SUCCESS in 6m 34s\n- placement-nova-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/a1dfb26be0f043598500107fdb643c9a : SUCCESS in 20m 13s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/8409db1ae13f46ef9d2c96bfeef9783c : SUCCESS in 40m 56s","accounts_in_message":[],"_revision_number":1},{"id":"7113c94366158d7a1f8c66d17a3b93d2cfaacd57","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-05 20:07:58.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":1},{"id":"afc2f7a70a33becac767c2ed452aa21185c5ca61","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-05 20:10:38.000000000","message":"Patch Set 1:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/21502920544141558dd5e4d8091441d9\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/8e51084b95f64971b95ef3705d60ae39 : SUCCESS in 42s\n- promote-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/144dfaac725b4aa8994ce0aa0ee41b51 : SUCCESS in 50s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"2fcbb6adc02f0619c4a47fdb2f1b5cdac15903d9","revisions":{"2fcbb6adc02f0619c4a47fdb2f1b5cdac15903d9":{"kind":"REWORK","_number":1,"created":"2026-07-28 08:04:21.000000000","uploader":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"ref":"refs/changes/74/998874/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/74/998874/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/74/998874/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/74/998874/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/74/998874/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/74/998874/1"}}},"commit":{"parents":[{"commit":"c69a1984fb9b9c6225d6b96b5b91ddfac3600092","subject":"Reproduce bug 2160721","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/c69a1984fb9b9c6225d6b96b5b91ddfac3600092"}]}],"author":{"name":"Balazs Gibizer","email":"gibi@redhat.com","date":"2026-07-16 16:19:09.000000000","tz":120},"committer":{"name":"Balazs Gibizer","email":"gibi@redhat.com","date":"2026-07-28 08:04:00.000000000","tz":120},"subject":"Check overall capacity before generating candidates","message":"Check overall capacity before generating candidates\n\nThis is a performance optimization for an edge case where\n* We have wide, symmetric provider trees. E.g. 10+ children RPs within a\n  tree providing the same type of resources\n* A GET allocation_candidates request that asks for 10+ request groups\n  of such resources\n* But the tree has less available resources left than the number of\n  requested groups by a small amount. I.e. the request almost fits but\n  does not.\n\nIn this case even the wide tree optimized allocation candidate\ngeneration algorithm produces a lot of partially valid candidates before\nit finds that the last (couple of) group in the request cannot be\nfulfilled. This takes excessive time.\n\nThis patch adds a check before the allocation candidate generation\nalgorithm runs. This check runs on each tree. It compares the total\nrequested resources per resource class with the total available\nresources per resource class in the tree and filters out the tree if it\nfinds that the overall pool of resources from the tree is not enough.\n\nAs testing shows that the cost of this pre-check is reasonable for the\nsimple cases too the pre-check is enabled unconditionally. However there\nis a small optimization in the pre-check. If a resource class only\nrequested in a single request group then it is ignored as our edge case\nis already eliminated when that group individually failed to be\nfulfilled. As an extension if the request has no resource class\nused in multiple groups, or only have a single group, then the pre-check\nis a no-op.\n\nCloses-Bug: #2160721\nSigned-off-by: Balazs Gibizer \u003cgibi@redhat.com\u003e\nChange-Id: I9bac03b0162009cdcea024f091bf63b177eaa279\n(cherry picked from commit 3457ecd69aa966c9f278c8bf7b2a90a5d9f96a3a)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2fcbb6adc02f0619c4a47fdb2f1b5cdac15903d9"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2fcbb6adc02f0619c4a47fdb2f1b5cdac15903d9"}]},"branch":"refs/heads/stable/2026.1"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"}},{"label":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Review-Priority","description":"Review Priority","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
