)]}'
{"id":"openstack%2Fopenstacksdk~1006240","triplet_id":"openstack%2Fopenstacksdk~master~I859b05fde8a61128d033677d605ec95434f698f9","project":"openstack/openstacksdk","branch":"master","topic":"placement-gaps","attention_set":{},"removed_from_attention_set":{"15334":{"account":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"last_update":"2026-09-22 18:37:02.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"I859b05fde8a61128d033677d605ec95434f698f9","subject":"placement: Add support for allocation candidates","status":"MERGED","created":"2026-09-18 15:12:08.000000000","updated":"2026-09-22 18:38:32.000000000","submitted":"2026-09-22 18:37:02.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"1006240-placement-gaps","meta_rev_id":"0467a2c988836d35bc174d414e0c2cc4bfd16a01","_number":1006240,"virtual_id_number":1006240,"owner":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-09-22 18:37:01.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"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":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"all":[{"value":2,"date":"2026-09-22 17:05:07.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"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":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"all":[{"value":1,"date":"2026-09-22 17:05:07.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Allow-Post-Review":{"all":[{"value":0,"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Abstain","+1":"Approved for Zuul Post Review Pipeline"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-18 16:45:33.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-09-22 17:05:07.000000000","updated_by":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"reviewer":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"state":"REVIEWER"}],"messages":[{"id":"a33fb9fe59777e7cb857468c3c60408c15f887f7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2026-09-18 15:12:08.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"8dcd2d8d8f4921f9752f017de8b5eda8adfa1995","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-18 16:45:33.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/c1ffcaf3c6fd4218bc16ef4a06680c6e\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/e820833145ea4c9ca4288afb2b707eee : SUCCESS in 5m 19s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/cd0375dc15934edbb200cbe4748a5b49 : SUCCESS in 5m 32s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/bca99c5e8ca84fb594725fea2dd0a47d : SUCCESS in 4m 57s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/3e665bb2ddc04747bb2a6f6029a8fa8e : SUCCESS in 4m 39s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/19d2b4ba50724021ad62210cf0c6418b : SUCCESS in 8m 04s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/acdbd0f5e1ed4c669cda986a2053030e : SUCCESS in 7m 31s (non-voting)\n- openstacksdk-functional-devstack-tips https://zuul.opendev.org/t/openstack/build/439a3b32e1a640299f037c7e6fc30c13 : SUCCESS in 1h 15m 49s\n- os-client-config-tox-py311-tips https://zuul.opendev.org/t/openstack/build/f031f7687b714262a9bb39f5f6187ef9 : SUCCESS in 4m 45s\n- osc-tox-py311-tips https://zuul.opendev.org/t/openstack/build/ef556d5d411b40bca97056a1191ca9fd : SUCCESS in 7m 13s\n- osc-tox-py314-tips https://zuul.opendev.org/t/openstack/build/415dcad844e74694ae43d3b5956e7350 : SUCCESS in 8m 24s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/be0a999a9dbd4e41a86243230465026d : SUCCESS in 12m 45s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/605d349b0d2a45e89296acbaf4314d76 : SUCCESS in 4m 41s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/bb6d5c83f7854d6880337a855c6a0539 : SUCCESS in 50m 13s\n- openstacksdk-functional-devstack-networking https://zuul.opendev.org/t/openstack/build/f902bf1d42aa4fe6b40f2c05fc6b9931 : SUCCESS in 1h 22m 10s\n- openstacksdk-functional-devstack-networking-ext https://zuul.opendev.org/t/openstack/build/6597e9004109404e8bdfbb65c84541b7 : FAILURE in 1h 24m 51s (non-voting)\n- openstacksdk-functional-devstack-magnum https://zuul.opendev.org/t/openstack/build/138f26c21dd74993ac593144b3f53daf : SUCCESS in 41m 52s\n- openstacksdk-functional-devstack-manila https://zuul.opendev.org/t/openstack/build/bfdef4bd17074ebabb9d59eae979fafa : SUCCESS in 35m 09s\n- openstacksdk-functional-devstack-compute-manila https://zuul.opendev.org/t/openstack/build/a8df6bdf3f38472ba00a6864bd3795e8 : SUCCESS in 31m 49s\n- openstacksdk-functional-devstack-cyborg https://zuul.opendev.org/t/openstack/build/9a4ea1c67b5d44a394093cc388898967 : SUCCESS in 21m 07s\n- openstacksdk-functional-devstack-masakari https://zuul.opendev.org/t/openstack/build/f6c612c4e9ee4369bde03d374f58e6d5 : SUCCESS in 38m 00s\n- openstacksdk-functional-devstack-ironic https://zuul.opendev.org/t/openstack/build/c985e9c1fe8c481e942a79fe2849dd18 : SUCCESS in 28m 58s\n- osc-functional-devstack-tips https://zuul.opendev.org/t/openstack/build/f71bc2e2fe4644f480cf21564a4e31d1 : SUCCESS in 54m 47s (non-voting)\n- ansible-collections-openstack-functional-devstack https://zuul.opendev.org/t/openstack/build/c7d23b98b35640caaf6cb94aabd3d643 : SUCCESS in 50m 29s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"4e0200f2fbbb13ecdb64191f4bb47596de701095","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2026-09-21 15:50:43.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"05aded5927151072d012a5d5340052ce70b0aa0a","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-21 17:35:35.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/dad94226fcfd409596496e4217852653\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/8e0769a22cbf4631b06de9e3689a2c82 : SUCCESS in 6m 43s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/df05699b41014982b620ce33ac9b6c4f : SUCCESS in 5m 36s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/a3c81aec6ec44f538d7ed2c43da5479e : SUCCESS in 6m 31s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/f694a98bf0ff47928343949f61726ab5 : SUCCESS in 4m 32s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a1d24514a1d642a78d959d6efe8b66d4 : SUCCESS in 6m 21s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/84a6d2f4da5b451eba8c10db666b7f43 : SUCCESS in 8m 00s (non-voting)\n- openstacksdk-functional-devstack-tips https://zuul.opendev.org/t/openstack/build/bf75b749c55c431d85397bc244e7f18c : SUCCESS in 1h 09m 06s\n- os-client-config-tox-py311-tips https://zuul.opendev.org/t/openstack/build/a042482aed274c42b8b341124f4a6275 : SUCCESS in 4m 09s\n- osc-tox-py311-tips https://zuul.opendev.org/t/openstack/build/d8c680eacf8d4249a416fd8c39b1b1d4 : SUCCESS in 4m 59s\n- osc-tox-py314-tips https://zuul.opendev.org/t/openstack/build/e245999501ed4830912d9c1fae68d8ac : SUCCESS in 5m 32s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/140d801ccbda4ebda88a3d82cc714eac : SUCCESS in 11m 38s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/b449e05a411a40b2abbb079bb7f5200c : SUCCESS in 5m 33s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/add0c65465e14e58bb39f6a7c3a6f46b : SUCCESS in 1h 00m 41s\n- openstacksdk-functional-devstack-networking https://zuul.opendev.org/t/openstack/build/b031865d78d14b519afa9fba1b5e91a8 : SUCCESS in 1h 27m 53s\n- openstacksdk-functional-devstack-networking-ext https://zuul.opendev.org/t/openstack/build/006d9fc1b38548ffbf068bac1b9d03aa : FAILURE in 1h 26m 16s (non-voting)\n- openstacksdk-functional-devstack-magnum https://zuul.opendev.org/t/openstack/build/f1ebcc0aadb640b39227df4212baa26d : SUCCESS in 57m 17s\n- openstacksdk-functional-devstack-manila https://zuul.opendev.org/t/openstack/build/00e46c7e2ebc4a6585619e8e6b8e58ef : SUCCESS in 45m 34s\n- openstacksdk-functional-devstack-compute-manila https://zuul.opendev.org/t/openstack/build/9c0c3c626dfa442297f0751db1c85884 : SUCCESS in 21m 26s\n- openstacksdk-functional-devstack-cyborg https://zuul.opendev.org/t/openstack/build/80356ea9bdcb4c66a4fad63f24356016 : SUCCESS in 30m 50s\n- openstacksdk-functional-devstack-masakari https://zuul.opendev.org/t/openstack/build/448eb0806b974d43a4d3535841c925d5 : SUCCESS in 30m 37s\n- openstacksdk-functional-devstack-ironic https://zuul.opendev.org/t/openstack/build/7e8515119fd249cfa9b578e58c7cf80e : SUCCESS in 42m 36s\n- osc-functional-devstack-tips https://zuul.opendev.org/t/openstack/build/12d0c0cacc9349759389fa4ec733311b : SUCCESS in 1h 15m 13s (non-voting)\n- ansible-collections-openstack-functional-devstack https://zuul.opendev.org/t/openstack/build/3f6c9986a3ae476797e670e50bf2c520 : FAILURE in 41m 21s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"c0399f4d03a9266fa47099f458828f583ffd2b0f","author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"date":"2026-09-22 17:05:07.000000000","message":"Patch Set 2: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":2},{"id":"beb608f60239a96739b72c48516ec451f561b86c","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 17:06:36.000000000","message":"Patch Set 2: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":2},{"id":"f6f39c61dbd52deb06fff9ba71d8d11850841b2d","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 18:37:01.000000000","message":"Patch Set 2: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/280173dad6404d5fb150cd5d04af4420\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/e554781eb5b448df91db05dd43b68883 : SUCCESS in 5m 17s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/245fc20534bc420c81adc9440b3ac9a4 : SUCCESS in 4m 22s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/5836195fad5340a3a380f451b122caf9 : SUCCESS in 4m 12s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/712581c5435e4924a333c260511d23d0 : SUCCESS in 6m 37s\n- openstacksdk-functional-devstack-tips https://zuul.opendev.org/t/openstack/build/25952c62fd1f4d1784d1c4ba3132b5e9 : SUCCESS in 29m 41s\n- os-client-config-tox-py311-tips https://zuul.opendev.org/t/openstack/build/d46a44702a4c4929aaac55d2bd23631d : SUCCESS in 3m 30s\n- osc-tox-py311-tips https://zuul.opendev.org/t/openstack/build/36c1c334457d413eba2882b4d421b69c : SUCCESS in 3m 43s\n- osc-tox-py314-tips https://zuul.opendev.org/t/openstack/build/4e61ce7e9d1c4521b9a3a4b2fd989c2f : SUCCESS in 7m 31s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a0c6c1361cee470f88af9548200c7ed5 : SUCCESS in 12m 30s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/c23fd7734cf94f028885311924617e79 : SUCCESS in 5m 01s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/06af1ea7cbce4f78b1893d2daf2d7493 : SUCCESS in 28m 52s\n- openstacksdk-functional-devstack-networking https://zuul.opendev.org/t/openstack/build/1918ff0ec8ff4444949aa3443cbb9b18 : SUCCESS in 1h 25m 06s\n- openstacksdk-functional-devstack-ironic https://zuul.opendev.org/t/openstack/build/48e387ffeabd43a8b9c37219a23366ee : SUCCESS in 30m 09s","accounts_in_message":[],"_revision_number":2},{"id":"821f8a9aaad084859dfeae0ecd6ed62b442a87c5","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 18:37:02.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":2},{"id":"0467a2c988836d35bc174d414e0c2cc4bfd16a01","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 18:38:32.000000000","message":"Patch Set 2:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/7c4b63aaeaae49be98ecda6433a615f0\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c373f7ade06847f88c81eca2acc81346 : SUCCESS in 1m 03s","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"e8f4ab18b9011a1aae88f4134c517c92c7ff0e27","revisions":{"88cb2e6a41a5ac72818be226c5112497926f1a64":{"kind":"REWORK","_number":1,"created":"2026-09-18 15:12:08.000000000","uploader":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"ref":"refs/changes/40/1006240/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstacksdk","ref":"refs/changes/40/1006240/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/1"}}},"commit":{"parents":[{"commit":"10f505e68b65af73651d7d4cd7e987a31f9fc1de","subject":"placement: Add support for resource provider allocations","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/10f505e68b65af73651d7d4cd7e987a31f9fc1de"}]}],"author":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2026-09-16 18:14:52.000000000","tz":60},"committer":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2026-09-18 15:11:39.000000000","tz":60},"subject":"placement: Add support for allocation candidates","message":"placement: Add support for allocation candidates\n\nLike resource provider allocations before, placement is using multiple\ntop-level keys again. We see:\n\n  {\n    \"allocation_requests\": [\n      {\n        \"allocations\": {\n          \"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757\": {\n            \"resources\": {\"VCPU\": 1}\n          }\n        }\n      }\n    ],\n    \"provider_summaries\": {\n      \"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757\": {\n        \"resources\": {\"VCPU\": {\"capacity\": 4, \"used\": 0}},\n        \"traits\": [\"HW_NUMA_ROOT\"]\n      }\n    }\n  }\n\nWhere \u0027allocation_requests\u0027 is a list of candidate sets of allocations\nand \u0027provider_summaries\u0027 supplies normalized capacity and trait\ninformation for every provider referenced in the former key. This is\ninstead of the more typical:\n\n  [\n    {\n      \"resource_provider\": \"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757\",\n      \"resource_class\": \"VCPU\",\n      \"amount\": 1\n    },\n    ...\n  ]\n\nThis once again needs special handling code, namely a reimplementation\nof the \u0027list\u0027 class method, mirroring what was done for resource\nprovider allocations.\n\nThe query parameters for this endpoint are unusually open-ended: in\naddition to the standard parameters (resources, required, member_of,\nin_tree, limit, group_policy, root_required, same_subtree), placement\nalso accepts numbered variants for granular request groups\n(resources1, required1, member_of1, in_tree1, …). These are forwarded\ndirectly to placement via **query rather than through a fixed\n_query_mapping.\n\nChange-Id: I859b05fde8a61128d033677d605ec95434f698f9\nSigned-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e\nAssisted-By: Claude Sonnet 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/88cb2e6a41a5ac72818be226c5112497926f1a64"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/88cb2e6a41a5ac72818be226c5112497926f1a64"}]},"branch":"refs/heads/master"},"e8f4ab18b9011a1aae88f4134c517c92c7ff0e27":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2026-09-21 15:50:43.000000000","uploader":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"ref":"refs/changes/40/1006240/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstacksdk","ref":"refs/changes/40/1006240/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstacksdk refs/changes/40/1006240/2"}}},"commit":{"parents":[{"commit":"a4d41985e5bc3061f99ac00bdbf4a6359019293a","subject":"placement: Add support for resource provider allocations","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/a4d41985e5bc3061f99ac00bdbf4a6359019293a"}]}],"author":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2026-09-16 18:14:52.000000000","tz":60},"committer":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2026-09-21 15:49:15.000000000","tz":60},"subject":"placement: Add support for allocation candidates","message":"placement: Add support for allocation candidates\n\nLike resource provider allocations before, placement is using multiple\ntop-level keys again. We see:\n\n  {\n    \"allocation_requests\": [\n      {\n        \"allocations\": {\n          \"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757\": {\n            \"resources\": {\"VCPU\": 1}\n          }\n        }\n      }\n    ],\n    \"provider_summaries\": {\n      \"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757\": {\n        \"resources\": {\"VCPU\": {\"capacity\": 4, \"used\": 0}},\n        \"traits\": [\"HW_NUMA_ROOT\"]\n      }\n    }\n  }\n\nWhere \u0027allocation_requests\u0027 is a list of candidate sets of allocations\nand \u0027provider_summaries\u0027 supplies normalized capacity and trait\ninformation for every provider referenced in the former key. This is\ninstead of the more typical:\n\n  [\n    {\n      \"resource_provider\": \"9a9c6b0f-e8d1-4d16-b053-a2bfe8a76757\",\n      \"resource_class\": \"VCPU\",\n      \"amount\": 1\n    },\n    ...\n  ]\n\nThis once again needs special handling code, namely a reimplementation\nof the \u0027list\u0027 class method, mirroring what was done for resource\nprovider allocations.\n\nThe query parameters for this endpoint are unusually open-ended: in\naddition to the standard parameters (resources, required, member_of,\nin_tree, limit, group_policy, root_required, same_subtree), placement\nalso accepts numbered variants for granular request groups\n(resources1, required1, member_of1, in_tree1, …). These are forwarded\ndirectly to placement via **query rather than through a fixed\n_query_mapping.\n\nChange-Id: I859b05fde8a61128d033677d605ec95434f698f9\nSigned-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e\nAssisted-By: Claude Sonnet 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/e8f4ab18b9011a1aae88f4134c517c92c7ff0e27"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/e8f4ab18b9011a1aae88f4134c517c92c7ff0e27"}]},"branch":"refs/heads/master"}},"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":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"}},{"label":"Allow-Post-Review","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":"Allow-Post-Review","description":"Allow Post Review","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":"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":"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":""}}}]}
