)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2d4dd08bfe47c0bc505945e121412d240e03cf7","unresolved":true,"context_lines":[{"line_number":17,"context_line":"when pci_in_placement is enabled, ensuring PCI resource classes like"},{"line_number":18,"context_line":"CUSTOM_GPU are included in the unified limits quota check."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Closes-bug: #2140631"},{"line_number":21,"context_line":"Generated-By: Claude-code Opus 4.5"},{"line_number":22,"context_line":"Change-Id: If8964128ecca1712a3bbf187e814b19ca042bfcd"},{"line_number":23,"context_line":"Signed-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"754c069c_e6b422ec","line":20,"updated":"2026-02-05 22:39:49.000000000","message":"ill just note that the same bug exists for cyborg resouce usage\nand neutron ports\n\nit could exist for intel perstent memery too but i dont recall if that is true of the top of my head adn that technology is dead\n\ntl;dr this shoudl adress the current gap for pci passthough and we can follow up for the other too.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"when pci_in_placement is enabled, ensuring PCI resource classes like"},{"line_number":18,"context_line":"CUSTOM_GPU are included in the unified limits quota check."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Closes-bug: #2140631"},{"line_number":21,"context_line":"Generated-By: Claude-code Opus 4.5"},{"line_number":22,"context_line":"Change-Id: If8964128ecca1712a3bbf187e814b19ca042bfcd"},{"line_number":23,"context_line":"Signed-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"b214f360_16ce8370","line":20,"in_reply_to":"754c069c_e6b422ec","updated":"2026-02-07 13:07:51.000000000","message":"Done","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":12,"context_line":"missing because resources_for_limits() built a minimal RequestSpec"},{"line_number":13,"context_line":"from just the flavor."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Refactor enforce_num_instances_and_flavor() to accept a RequestSpec"},{"line_number":16,"context_line":"instead of flavor + is_bfv. The caller now builds a RequestSpec that"},{"line_number":17,"context_line":"includes PCI requests, port bandwidth resource requests, and cyborg"},{"line_number":18,"context_line":"device profile request groups. The enforcement code uses"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"073b82b2_ff872963","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"updated":"2026-02-07 13:07:51.000000000","message":"this should be past tense","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"missing because resources_for_limits() built a minimal RequestSpec"},{"line_number":13,"context_line":"from just the flavor."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Refactor enforce_num_instances_and_flavor() to accept a RequestSpec"},{"line_number":16,"context_line":"instead of flavor + is_bfv. The caller now builds a RequestSpec that"},{"line_number":17,"context_line":"includes PCI requests, port bandwidth resource requests, and cyborg"},{"line_number":18,"context_line":"device profile request groups. The enforcement code uses"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"43debd17_52e1bba0","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"in_reply_to":"073b82b2_ff872963","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":18,"context_line":"device profile request groups. The enforcement code uses"},{"line_number":19,"context_line":"ResourceRequest.from_request_spec() to extract all resources, which"},{"line_number":20,"context_line":"naturally includes every resource type on the RequestSpec."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This removes the need for the resources_for_limits() helper and the"},{"line_number":23,"context_line":"PCI-specific code that was added to _get_resources() in"},{"line_number":24,"context_line":"scheduler/utils.py."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Generated-By: claude-code"},{"line_number":27,"context_line":"Closes-Bug: #2140631"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"6747dc9e_0684279d","line":24,"range":{"start_line":21,"start_character":1,"end_line":24,"end_character":19},"updated":"2026-02-07 13:07:51.000000000","message":"this was not actully merged  so ill drop this","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"device profile request groups. The enforcement code uses"},{"line_number":19,"context_line":"ResourceRequest.from_request_spec() to extract all resources, which"},{"line_number":20,"context_line":"naturally includes every resource type on the RequestSpec."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This removes the need for the resources_for_limits() helper and the"},{"line_number":23,"context_line":"PCI-specific code that was added to _get_resources() in"},{"line_number":24,"context_line":"scheduler/utils.py."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Generated-By: claude-code"},{"line_number":27,"context_line":"Closes-Bug: #2140631"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"f673dfd9_8ee34992","line":24,"range":{"start_line":21,"start_character":1,"end_line":24,"end_character":19},"in_reply_to":"6747dc9e_0684279d","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":23,"context_line":"PCI-specific code that was added to _get_resources() in"},{"line_number":24,"context_line":"scheduler/utils.py."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Generated-By: claude-code"},{"line_number":27,"context_line":"Closes-Bug: #2140631"},{"line_number":28,"context_line":"Change-Id: If8964128ecca1712a3bbf187e814b19ca042bfcd"},{"line_number":29,"context_line":"Signed-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a53e345_e8082f3a","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":25},"updated":"2026-02-07 13:07:51.000000000","message":"i swapped to opus 4.6 i shoudl add that","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"PCI-specific code that was added to _get_resources() in"},{"line_number":24,"context_line":"scheduler/utils.py."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Generated-By: claude-code"},{"line_number":27,"context_line":"Closes-Bug: #2140631"},{"line_number":28,"context_line":"Change-Id: If8964128ecca1712a3bbf187e814b19ca042bfcd"},{"line_number":29,"context_line":"Signed-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7baa700f_fbe97af7","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":25},"in_reply_to":"1a53e345_e8082f3a","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d3428111edc8cc8ef99638245866f22cece1243","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"8aa8b23d_fb985aa3","updated":"2026-02-06 20:15:40.000000000","message":"i neeed to review this myself im just pushing this before i finish for the weekend","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fdc392ab444041fabffdcd1e57d3a8a225781349","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"169be899_4f38ba0f","updated":"2026-02-07 13:08:34.000000000","message":"teim-ci: manual","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7a1a877b_8bd3492a","updated":"2026-02-07 13:07:51.000000000","message":"this seams sortof reasonable\n\nthere are one or two cleanups that i cnamake and there are is one unit and one  functionla test i need to update.\n\nso i will have at least one more revsions fo this but i thinks its ok for others to review","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc9308ffd5e8dedbcf49ff3a4a8cac284fe4a973","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"290ec05c_fc782f0f","updated":"2026-02-19 16:56:54.000000000","message":"recheck ceph job should be fixed","commit_id":"5d4acb39a26738789271428e74f97dcba18bb477"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"180f9ec12888877e3959b66972e8378ac3d6d874","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"786b859a_5a2859fd","updated":"2026-02-16 19:05:25.000000000","message":"recheck grenade should now be fixed","commit_id":"5d4acb39a26738789271428e74f97dcba18bb477"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"86c66be4e766fba4f846ab6d28fc27c442d270b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"70bdce22_384f5801","updated":"2026-02-10 01:29:05.000000000","message":"teim-ci: manual","commit_id":"5d4acb39a26738789271428e74f97dcba18bb477"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8084ff86_30259d3f","updated":"2026-04-08 21:31:58.000000000","message":"Nothing major that I found, but would like to add a bit more to the debug logging if possible and other miscellaneous organization/maintainability/readability things inline.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6db5b04b7564a28b09f9d5458abc8645a76a917","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1118ce1f_60646487","updated":"2026-05-21 22:23:33.000000000","message":"This looks so much better, thanks! One small question inline on the logging, to avoid potential expense.","commit_id":"510b0587db94222e792d2da899f8b0e5c779177a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b179d6a70191a3f39df0e530e566b37cc2036971","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0e7b52f3_aac7d5f3","updated":"2026-05-21 21:18:22.000000000","message":"recheck https://review.opendev.org/c/openstack/tempest/+/938766 has merged","commit_id":"510b0587db94222e792d2da899f8b0e5c779177a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5debef91ed6f0fb675c99d4cf2abcb3cc4035667","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9c823611_0e2faeca","updated":"2026-06-02 12:09:09.000000000","message":"Looks OK to me.","commit_id":"2de9de080cbf4e59fde5f813f78439cdff32358b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e1231f9eebbaf672ed632f3d66c9093ce9e99cb2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"251ed839_ed4e56c6","updated":"2026-05-29 21:02:20.000000000","message":"This looks good to me now, thanks for adding the guard on the debug logging of the merged resource calc.","commit_id":"2de9de080cbf4e59fde5f813f78439cdff32358b"}],"nova/compute/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":true,"context_lines":[{"line_number":1415,"context_line":"            dp_request_groups \u003d cyborg.get_device_profile_request_groups("},{"line_number":1416,"context_line":"                context, dp_name)"},{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"        # NOTE(johngarbutt) when unified limits not used, this just"},{"line_number":1419,"context_line":"        #   returns num_instances back again"},{"line_number":1420,"context_line":"        # Build a RequestSpec that includes all requested resources"},{"line_number":1421,"context_line":"        # (flavor, PCI, port bandwidth, cyborg) for the unified"}],"source_content_type":"text/x-python","patch_set":4,"id":"9e114db4_08daa7da","line":1418,"range":{"start_line":1418,"start_character":15,"end_line":1418,"end_character":26},"updated":"2026-02-07 13:53:26.000000000","message":"the orginal comment wsa form john but maybe i should update this sicne it has largely been rewritten","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"            dp_request_groups \u003d cyborg.get_device_profile_request_groups("},{"line_number":1416,"context_line":"                context, dp_name)"},{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"        # NOTE(johngarbutt) when unified limits not used, this just"},{"line_number":1419,"context_line":"        #   returns num_instances back again"},{"line_number":1420,"context_line":"        # Build a RequestSpec that includes all requested resources"},{"line_number":1421,"context_line":"        # (flavor, PCI, port bandwidth, cyborg) for the unified"}],"source_content_type":"text/x-python","patch_set":4,"id":"c88265f3_f51e2360","line":1418,"range":{"start_line":1418,"start_character":15,"end_line":1418,"end_character":26},"in_reply_to":"9e114db4_08daa7da","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":false,"context_lines":[{"line_number":1429,"context_line":"                pci_request.get_pci_requests_from_flavor(flavor))"},{"line_number":1430,"context_line":"            req_spec_for_limits.\\"},{"line_number":1431,"context_line":"                generate_request_groups_from_pci_requests()"},{"line_number":1432,"context_line":"        req_spec_for_limits.requested_resources \u003d []"},{"line_number":1433,"context_line":"        if port_resource_requests:"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1435,"context_line":"                port_resource_requests)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7b89dcc6_3b5af8c4","line":1432,"in_reply_to":"6b4fa905_12b14869","updated":"2026-02-07 13:53:26.000000000","message":"ah so this is a ne example that i need to teach it about.\n\ni shoudl collect these somewhere\nanyway its confucted and thinks\n\n req_spec_for_limits.\\\n                generate_request_groups_from_pci_requests()\n                \nwoudl breach our formating rules and wihtout the \\ it would but i need to add this to the good examples.\n\n\nalso confused about ruff vs auto pep8 i am planning to enchance the away it gathere context form the repo under review so that iw will read files like HACKING.rst and pyproject.toml or pre-commit to understand the conventions of the repo under review better.\n\n\nim using ruff in my code review repo and it thinks that is also used here.","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":false,"context_lines":[{"line_number":1429,"context_line":"                pci_request.get_pci_requests_from_flavor(flavor))"},{"line_number":1430,"context_line":"            req_spec_for_limits.\\"},{"line_number":1431,"context_line":"                generate_request_groups_from_pci_requests()"},{"line_number":1432,"context_line":"        req_spec_for_limits.requested_resources \u003d []"},{"line_number":1433,"context_line":"        if port_resource_requests:"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1435,"context_line":"                port_resource_requests)"}],"source_content_type":"text/x-python","patch_set":4,"id":"07e20d57_ad52b602","line":1432,"in_reply_to":"b6835adc_8cb2b9e1","updated":"2026-02-07 13:53:26.000000000","message":"am no this is not helpful\n\na better recomentation would be for num_instnace to not use line continuation and instead use perens ()\nbecause that actully the prefered stype in that case.","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":true,"context_lines":[{"line_number":1433,"context_line":"        if port_resource_requests:"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1435,"context_line":"                port_resource_requests)"},{"line_number":1436,"context_line":"        if dp_request_groups:"},{"line_number":1437,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1438,"context_line":"                dp_request_groups)"},{"line_number":1439,"context_line":"        num_instances \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"240afe5e_1937f14a","line":1436,"in_reply_to":"0a4cbdaa_9a528053","updated":"2026-02-07 13:53:26.000000000","message":"generate_request_groups_from_pci_requests may not initalise it if there are no pci request or pci in placement is disable but this is a bug\n\nif we are intialsiing we need to do it earlier on line 1427\nnot after the pci requests are generated","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"        if port_resource_requests:"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1435,"context_line":"                port_resource_requests)"},{"line_number":1436,"context_line":"        if dp_request_groups:"},{"line_number":1437,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1438,"context_line":"                dp_request_groups)"},{"line_number":1439,"context_line":"        num_instances \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"324e943a_1f5cc74f","line":1436,"in_reply_to":"240afe5e_1937f14a","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":true,"context_lines":[{"line_number":1433,"context_line":"        if port_resource_requests:"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1435,"context_line":"                port_resource_requests)"},{"line_number":1436,"context_line":"        if dp_request_groups:"},{"line_number":1437,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1438,"context_line":"                dp_request_groups)"},{"line_number":1439,"context_line":"        num_instances \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd71abf0_5e986e5e","line":1436,"in_reply_to":"821ad2c4_3c286c5b","updated":"2026-02-07 13:53:26.000000000","message":"ya so ^ is the bug i was referring too.","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"        if port_resource_requests:"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1435,"context_line":"                port_resource_requests)"},{"line_number":1436,"context_line":"        if dp_request_groups:"},{"line_number":1437,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1438,"context_line":"                dp_request_groups)"},{"line_number":1439,"context_line":"        num_instances \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"74259903_139d01dd","line":1436,"in_reply_to":"dd71abf0_5e986e5e","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":true,"context_lines":[{"line_number":1436,"context_line":"        if dp_request_groups:"},{"line_number":1437,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1438,"context_line":"                dp_request_groups)"},{"line_number":1439,"context_line":"        num_instances \u003d \\"},{"line_number":1440,"context_line":"            placement_limits.enforce_num_instances_and_flavor("},{"line_number":1441,"context_line":"                context, context.project_id,"},{"line_number":1442,"context_line":"                req_spec_for_limits,"}],"source_content_type":"text/x-python","patch_set":4,"id":"cfdd2739_e6762e99","line":1439,"updated":"2026-02-07 13:53:26.000000000","message":"so here () would be cleaner then \\\nbut either work","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        if dp_request_groups:"},{"line_number":1437,"context_line":"            req_spec_for_limits.requested_resources.extend("},{"line_number":1438,"context_line":"                dp_request_groups)"},{"line_number":1439,"context_line":"        num_instances \u003d \\"},{"line_number":1440,"context_line":"            placement_limits.enforce_num_instances_and_flavor("},{"line_number":1441,"context_line":"                context, context.project_id,"},{"line_number":1442,"context_line":"                req_spec_for_limits,"}],"source_content_type":"text/x-python","patch_set":4,"id":"340f57b1_0e78e6c3","line":1439,"in_reply_to":"cfdd2739_e6762e99","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":2802,"context_line":"            context, instance)"},{"line_number":2803,"context_line":"        req_spec \u003d objects.RequestSpec("},{"line_number":2804,"context_line":"            flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":2805,"context_line":"        placement_limits.enforce_num_instances_and_flavor("},{"line_number":2806,"context_line":"            context, project_id, req_spec, 1, 1)"},{"line_number":2807,"context_line":""},{"line_number":2808,"context_line":"        self._record_action_start(context, instance, instance_actions.RESTORE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"adbb8c63_1658cc87","line":2805,"range":{"start_line":2805,"start_character":25,"end_line":2805,"end_character":57},"updated":"2026-02-07 13:07:51.000000000","message":"i might want to rename this now that it taske a request spec instead fo flavor but im not really sure what to call it so for now ill leave it unless folks have a sugestion","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"03a33e39e285e21b0adc107cb090c417d1a62126","unresolved":false,"context_lines":[{"line_number":2802,"context_line":"            context, instance)"},{"line_number":2803,"context_line":"        req_spec \u003d objects.RequestSpec("},{"line_number":2804,"context_line":"            flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":2805,"context_line":"        placement_limits.enforce_num_instances_and_flavor("},{"line_number":2806,"context_line":"            context, project_id, req_spec, 1, 1)"},{"line_number":2807,"context_line":""},{"line_number":2808,"context_line":"        self._record_action_start(context, instance, instance_actions.RESTORE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ca0792c_76d5d0fd","line":2805,"range":{"start_line":2805,"start_character":25,"end_line":2805,"end_character":57},"in_reply_to":"adbb8c63_1658cc87","updated":"2026-02-10 01:27:15.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":2803,"context_line":"        req_spec \u003d objects.RequestSpec("},{"line_number":2804,"context_line":"            flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":2805,"context_line":"        placement_limits.enforce_num_instances_and_flavor("},{"line_number":2806,"context_line":"            context, project_id, req_spec, 1, 1)"},{"line_number":2807,"context_line":""},{"line_number":2808,"context_line":"        self._record_action_start(context, instance, instance_actions.RESTORE)"},{"line_number":2809,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"23e11dfd_6c4e32b1","line":2806,"range":{"start_line":2806,"start_character":42,"end_line":2806,"end_character":48},"updated":"2026-02-07 13:07:51.000000000","message":"i think this is min and max vms which again can and is encoded in the request epsc so i could probly drop those as well","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":2803,"context_line":"        req_spec \u003d objects.RequestSpec("},{"line_number":2804,"context_line":"            flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":2805,"context_line":"        placement_limits.enforce_num_instances_and_flavor("},{"line_number":2806,"context_line":"            context, project_id, req_spec, 1, 1)"},{"line_number":2807,"context_line":""},{"line_number":2808,"context_line":"        self._record_action_start(context, instance, instance_actions.RESTORE)"},{"line_number":2809,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"472e9002_4b3aa20c","line":2806,"range":{"start_line":2806,"start_character":42,"end_line":2806,"end_character":48},"in_reply_to":"23e11dfd_6c4e32b1","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7fbbca0aace267aa3a20b5cc89cfe95d264f78d2","unresolved":true,"context_lines":[{"line_number":1422,"context_line":"        # limits quota check. Only do this work when unified limits"},{"line_number":1423,"context_line":"        # is enabled to avoid unnecessary overhead."},{"line_number":1424,"context_line":"        if limit_utils.use_unified_limits():"},{"line_number":1425,"context_line":"            # NOTE(sean-k-mooney): We use .get() here to read the"},{"line_number":1426,"context_line":"            # port resource requests without removing them from"},{"line_number":1427,"context_line":"            # base_options. They are later consumed with .pop()"},{"line_number":1428,"context_line":"            # below after the quota check, when building"},{"line_number":1429,"context_line":"            # per-instance RequestSpecs."},{"line_number":1430,"context_line":"            port_resource_requests \u003d base_options.get("},{"line_number":1431,"context_line":"                \u0027port_resource_requests\u0027)"},{"line_number":1432,"context_line":"            req_spec_for_limits \u003d objects.RequestSpec("},{"line_number":1433,"context_line":"                flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources \u003d []"},{"line_number":1435,"context_line":"            if CONF.filter_scheduler.pci_in_placement:"},{"line_number":1436,"context_line":"                req_spec_for_limits.pci_requests \u003d ("},{"line_number":1437,"context_line":"                    pci_request.get_pci_requests_from_flavor("},{"line_number":1438,"context_line":"                        flavor))"},{"line_number":1439,"context_line":"                req_spec_for_limits.\\"},{"line_number":1440,"context_line":"                    generate_request_groups_from_pci_requests()"},{"line_number":1441,"context_line":"            if port_resource_requests:"},{"line_number":1442,"context_line":"                req_spec_for_limits.requested_resources.extend("},{"line_number":1443,"context_line":"                    port_resource_requests)"},{"line_number":1444,"context_line":"            if dp_request_groups:"},{"line_number":1445,"context_line":"                req_spec_for_limits.requested_resources.extend("},{"line_number":1446,"context_line":"                    dp_request_groups)"},{"line_number":1447,"context_line":"            num_instances \u003d ("},{"line_number":1448,"context_line":"                placement_limits.enforce_num_instances_and_resources("},{"line_number":1449,"context_line":"                    context, context.project_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"80e2c79d_11eb491d","line":1446,"range":{"start_line":1425,"start_character":0,"end_line":1446,"end_character":38},"updated":"2026-03-18 23:45:10.000000000","message":"Hm, OK, initially I was thinking \"why call use_unified_limits() when it\u0027s already built in to enforce_num_instances_and_resources()?\" but it seems like gathering all of the resource requests is only necessary for a unified limits quota check and would otherwise not be used.\n\nSo ... I\u0027m wondering, could we put this code into a helper maybe in nova/scheduler/utils.py? There is actually a resources_for_limits() function already in there. I don\u0027t know enough about resource request stuff to know if/why that can or cannot be used but regardless it seems like this sort of logic would go best in scheduler utils?","commit_id":"5d4acb39a26738789271428e74f97dcba18bb477"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"651bb62aa3d39a87132ccf812536fd755454d600","unresolved":true,"context_lines":[{"line_number":1422,"context_line":"        # limits quota check. Only do this work when unified limits"},{"line_number":1423,"context_line":"        # is enabled to avoid unnecessary overhead."},{"line_number":1424,"context_line":"        if limit_utils.use_unified_limits():"},{"line_number":1425,"context_line":"            # NOTE(sean-k-mooney): We use .get() here to read the"},{"line_number":1426,"context_line":"            # port resource requests without removing them from"},{"line_number":1427,"context_line":"            # base_options. They are later consumed with .pop()"},{"line_number":1428,"context_line":"            # below after the quota check, when building"},{"line_number":1429,"context_line":"            # per-instance RequestSpecs."},{"line_number":1430,"context_line":"            port_resource_requests \u003d base_options.get("},{"line_number":1431,"context_line":"                \u0027port_resource_requests\u0027)"},{"line_number":1432,"context_line":"            req_spec_for_limits \u003d objects.RequestSpec("},{"line_number":1433,"context_line":"                flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources \u003d []"},{"line_number":1435,"context_line":"            if CONF.filter_scheduler.pci_in_placement:"},{"line_number":1436,"context_line":"                req_spec_for_limits.pci_requests \u003d ("},{"line_number":1437,"context_line":"                    pci_request.get_pci_requests_from_flavor("},{"line_number":1438,"context_line":"                        flavor))"},{"line_number":1439,"context_line":"                req_spec_for_limits.\\"},{"line_number":1440,"context_line":"                    generate_request_groups_from_pci_requests()"},{"line_number":1441,"context_line":"            if port_resource_requests:"},{"line_number":1442,"context_line":"                req_spec_for_limits.requested_resources.extend("},{"line_number":1443,"context_line":"                    port_resource_requests)"},{"line_number":1444,"context_line":"            if dp_request_groups:"},{"line_number":1445,"context_line":"                req_spec_for_limits.requested_resources.extend("},{"line_number":1446,"context_line":"                    dp_request_groups)"},{"line_number":1447,"context_line":"            num_instances \u003d ("},{"line_number":1448,"context_line":"                placement_limits.enforce_num_instances_and_resources("},{"line_number":1449,"context_line":"                    context, context.project_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"b194c3f8_971370ef","line":1446,"range":{"start_line":1425,"start_character":0,"end_line":1446,"end_character":38},"in_reply_to":"80e2c79d_11eb491d","updated":"2026-03-23 18:27:00.000000000","message":"i do not have a reason off the top of my head not to do what you suggest so ill look into it.\n\n\ni agree it feels a little odd  to do this here.","commit_id":"5d4acb39a26738789271428e74f97dcba18bb477"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":1422,"context_line":"        # limits quota check. Only do this work when unified limits"},{"line_number":1423,"context_line":"        # is enabled to avoid unnecessary overhead."},{"line_number":1424,"context_line":"        if limit_utils.use_unified_limits():"},{"line_number":1425,"context_line":"            # NOTE(sean-k-mooney): We use .get() here to read the"},{"line_number":1426,"context_line":"            # port resource requests without removing them from"},{"line_number":1427,"context_line":"            # base_options. They are later consumed with .pop()"},{"line_number":1428,"context_line":"            # below after the quota check, when building"},{"line_number":1429,"context_line":"            # per-instance RequestSpecs."},{"line_number":1430,"context_line":"            port_resource_requests \u003d base_options.get("},{"line_number":1431,"context_line":"                \u0027port_resource_requests\u0027)"},{"line_number":1432,"context_line":"            req_spec_for_limits \u003d objects.RequestSpec("},{"line_number":1433,"context_line":"                flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":1434,"context_line":"            req_spec_for_limits.requested_resources \u003d []"},{"line_number":1435,"context_line":"            if CONF.filter_scheduler.pci_in_placement:"},{"line_number":1436,"context_line":"                req_spec_for_limits.pci_requests \u003d ("},{"line_number":1437,"context_line":"                    pci_request.get_pci_requests_from_flavor("},{"line_number":1438,"context_line":"                        flavor))"},{"line_number":1439,"context_line":"                req_spec_for_limits.\\"},{"line_number":1440,"context_line":"                    generate_request_groups_from_pci_requests()"},{"line_number":1441,"context_line":"            if port_resource_requests:"},{"line_number":1442,"context_line":"                req_spec_for_limits.requested_resources.extend("},{"line_number":1443,"context_line":"                    port_resource_requests)"},{"line_number":1444,"context_line":"            if dp_request_groups:"},{"line_number":1445,"context_line":"                req_spec_for_limits.requested_resources.extend("},{"line_number":1446,"context_line":"                    dp_request_groups)"},{"line_number":1447,"context_line":"            num_instances \u003d ("},{"line_number":1448,"context_line":"                placement_limits.enforce_num_instances_and_resources("},{"line_number":1449,"context_line":"                    context, context.project_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"656fa24a_29e0a694","line":1446,"range":{"start_line":1425,"start_character":0,"end_line":1446,"end_character":38},"in_reply_to":"b194c3f8_971370ef","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"5d4acb39a26738789271428e74f97dcba18bb477"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":1433,"context_line":"            # If we have no BDMs, we\u0027re clearly not BFV"},{"line_number":1434,"context_line":"            is_bfv \u003d False"},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"        # Compute cyborg device profile request groups before the"},{"line_number":1437,"context_line":"        # quota check so they can be included in the RequestSpec"},{"line_number":1438,"context_line":"        # used for unified limits enforcement. These are also used"},{"line_number":1439,"context_line":"        # later when building per-instance RequestSpecs."}],"source_content_type":"text/x-python","patch_set":6,"id":"438c0e88_6ad97e84","line":1436,"range":{"start_line":1436,"start_character":18,"end_line":1436,"end_character":39},"updated":"2026-04-08 21:31:58.000000000","message":"This shouldn\u0027t be only cyborg right, but also PCI and port bandwidth?","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"            # If we have no BDMs, we\u0027re clearly not BFV"},{"line_number":1434,"context_line":"            is_bfv \u003d False"},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"        # Compute cyborg device profile request groups before the"},{"line_number":1437,"context_line":"        # quota check so they can be included in the RequestSpec"},{"line_number":1438,"context_line":"        # used for unified limits enforcement. These are also used"},{"line_number":1439,"context_line":"        # later when building per-instance RequestSpecs."}],"source_content_type":"text/x-python","patch_set":6,"id":"d7618ad6_914723a1","line":1436,"range":{"start_line":1436,"start_character":18,"end_line":1436,"end_character":39},"in_reply_to":"2e38ef58_3c6e0655","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":1433,"context_line":"            # If we have no BDMs, we\u0027re clearly not BFV"},{"line_number":1434,"context_line":"            is_bfv \u003d False"},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"        # Compute cyborg device profile request groups before the"},{"line_number":1437,"context_line":"        # quota check so they can be included in the RequestSpec"},{"line_number":1438,"context_line":"        # used for unified limits enforcement. These are also used"},{"line_number":1439,"context_line":"        # later when building per-instance RequestSpecs."}],"source_content_type":"text/x-python","patch_set":6,"id":"2e38ef58_3c6e0655","line":1436,"range":{"start_line":1436,"start_character":18,"end_line":1436,"end_character":39},"in_reply_to":"438c0e88_6ad97e84","updated":"2026-04-09 00:18:23.000000000","message":"ya this commeitn is for the next five lien i proably shoudl put it in the if\n```\n  if dp_name:\n            dp_request_groups \u003d cyborg.get_device_profile_request_groups(\n                context, dp_name)\n```\n\nalthough at that piong i guess it proably not really needed.\nro at least not this long","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":1444,"context_line":"            dp_request_groups \u003d cyborg.get_device_profile_request_groups("},{"line_number":1445,"context_line":"                context, dp_name)"},{"line_number":1446,"context_line":""},{"line_number":1447,"context_line":"        # Build a RequestSpec that includes all requested resources"},{"line_number":1448,"context_line":"        # (flavor, PCI, port bandwidth, cyborg) for the unified"},{"line_number":1449,"context_line":"        # limits quota check. Only do this work when unified limits"},{"line_number":1450,"context_line":"        # is enabled to avoid unnecessary overhead."},{"line_number":1451,"context_line":"        if limit_utils.use_unified_limits():"},{"line_number":1452,"context_line":"            # NOTE(sean-k-mooney): We use .get() here to read the"},{"line_number":1453,"context_line":"            # port resource requests without removing them from"},{"line_number":1454,"context_line":"            # base_options. They are later consumed with .pop()"},{"line_number":1455,"context_line":"            # below after the quota check, when building"},{"line_number":1456,"context_line":"            # per-instance RequestSpecs."},{"line_number":1457,"context_line":"            port_resource_requests \u003d base_options.get(\u0027port_resource_requests\u0027)"},{"line_number":1458,"context_line":"            req_spec_for_limits \u003d scheduler_utils.request_spec_for_limits("},{"line_number":1459,"context_line":"                flavor, is_bfv, port_resource_requests, dp_request_groups)"},{"line_number":1460,"context_line":"            num_instances \u003d ("},{"line_number":1461,"context_line":"                placement_limits.enforce_num_instances_and_resources("},{"line_number":1462,"context_line":"                    context, context.project_id, req_spec_for_limits,"},{"line_number":1463,"context_line":"                    min_count, num_instances))"},{"line_number":1464,"context_line":""},{"line_number":1465,"context_line":"        security_groups \u003d security_group_api.populate_security_groups("},{"line_number":1466,"context_line":"            security_groups)"}],"source_content_type":"text/x-python","patch_set":6,"id":"e53b2bc8_e7229c05","line":1463,"range":{"start_line":1447,"start_character":0,"end_line":1463,"end_character":46},"updated":"2026-04-08 21:31:58.000000000","message":"Could we put this part in a helper method? _provision_instances() is already quite large and since this is for unified limits only, it seems it could be nicely self-contained. It could take and return num_instances, like the previous code did.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"            dp_request_groups \u003d cyborg.get_device_profile_request_groups("},{"line_number":1445,"context_line":"                context, dp_name)"},{"line_number":1446,"context_line":""},{"line_number":1447,"context_line":"        # Build a RequestSpec that includes all requested resources"},{"line_number":1448,"context_line":"        # (flavor, PCI, port bandwidth, cyborg) for the unified"},{"line_number":1449,"context_line":"        # limits quota check. Only do this work when unified limits"},{"line_number":1450,"context_line":"        # is enabled to avoid unnecessary overhead."},{"line_number":1451,"context_line":"        if limit_utils.use_unified_limits():"},{"line_number":1452,"context_line":"            # NOTE(sean-k-mooney): We use .get() here to read the"},{"line_number":1453,"context_line":"            # port resource requests without removing them from"},{"line_number":1454,"context_line":"            # base_options. They are later consumed with .pop()"},{"line_number":1455,"context_line":"            # below after the quota check, when building"},{"line_number":1456,"context_line":"            # per-instance RequestSpecs."},{"line_number":1457,"context_line":"            port_resource_requests \u003d base_options.get(\u0027port_resource_requests\u0027)"},{"line_number":1458,"context_line":"            req_spec_for_limits \u003d scheduler_utils.request_spec_for_limits("},{"line_number":1459,"context_line":"                flavor, is_bfv, port_resource_requests, dp_request_groups)"},{"line_number":1460,"context_line":"            num_instances \u003d ("},{"line_number":1461,"context_line":"                placement_limits.enforce_num_instances_and_resources("},{"line_number":1462,"context_line":"                    context, context.project_id, req_spec_for_limits,"},{"line_number":1463,"context_line":"                    min_count, num_instances))"},{"line_number":1464,"context_line":""},{"line_number":1465,"context_line":"        security_groups \u003d security_group_api.populate_security_groups("},{"line_number":1466,"context_line":"            security_groups)"}],"source_content_type":"text/x-python","patch_set":6,"id":"310577a2_96f81455","line":1463,"range":{"start_line":1447,"start_character":0,"end_line":1463,"end_character":46},"in_reply_to":"9823bb93_ddb23bbf","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":1444,"context_line":"            dp_request_groups \u003d cyborg.get_device_profile_request_groups("},{"line_number":1445,"context_line":"                context, dp_name)"},{"line_number":1446,"context_line":""},{"line_number":1447,"context_line":"        # Build a RequestSpec that includes all requested resources"},{"line_number":1448,"context_line":"        # (flavor, PCI, port bandwidth, cyborg) for the unified"},{"line_number":1449,"context_line":"        # limits quota check. Only do this work when unified limits"},{"line_number":1450,"context_line":"        # is enabled to avoid unnecessary overhead."},{"line_number":1451,"context_line":"        if limit_utils.use_unified_limits():"},{"line_number":1452,"context_line":"            # NOTE(sean-k-mooney): We use .get() here to read the"},{"line_number":1453,"context_line":"            # port resource requests without removing them from"},{"line_number":1454,"context_line":"            # base_options. They are later consumed with .pop()"},{"line_number":1455,"context_line":"            # below after the quota check, when building"},{"line_number":1456,"context_line":"            # per-instance RequestSpecs."},{"line_number":1457,"context_line":"            port_resource_requests \u003d base_options.get(\u0027port_resource_requests\u0027)"},{"line_number":1458,"context_line":"            req_spec_for_limits \u003d scheduler_utils.request_spec_for_limits("},{"line_number":1459,"context_line":"                flavor, is_bfv, port_resource_requests, dp_request_groups)"},{"line_number":1460,"context_line":"            num_instances \u003d ("},{"line_number":1461,"context_line":"                placement_limits.enforce_num_instances_and_resources("},{"line_number":1462,"context_line":"                    context, context.project_id, req_spec_for_limits,"},{"line_number":1463,"context_line":"                    min_count, num_instances))"},{"line_number":1464,"context_line":""},{"line_number":1465,"context_line":"        security_groups \u003d security_group_api.populate_security_groups("},{"line_number":1466,"context_line":"            security_groups)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9823bb93_ddb23bbf","line":1463,"range":{"start_line":1447,"start_character":0,"end_line":1463,"end_character":46},"in_reply_to":"e53b2bc8_e7229c05","updated":"2026-04-09 00:18:23.000000000","message":"ok i have moved most of the logic into the schduler utisl \n\ni think the comment are makign this lareger then it needt o be i think ill just drop/simplry most of them to look like this\n\n```\n        port_resource_requests \u003d base_options.pop(\u0027port_resource_requests\u0027)\n        # Build a RequestSpec that includes all requested resources\n        # (flavor, PCI, port bandwidth, cyborg) for the unified limits quota\n        #  check. Only do this work when unified limits is enabled to avoid\n        # unnecessary overhead.\n        if limit_utils.use_unified_limits():\n            req_spec_for_limits \u003d scheduler_utils.request_spec_for_limits(\n                flavor, is_bfv, port_resource_requests, dp_request_groups)\n            num_instances \u003d (\n                placement_limits.enforce_num_instances_and_resources(\n                    context, context.project_id, req_spec_for_limits,\n                    min_count, num_instances))\n\n        security_groups \u003d security_group_api.populate_security_groups(\n            security_groups)\n        req_lvl_params \u003d base_options.pop(\u0027request_level_params\u0027)\n        instances_to_build \u003d []\n        # We could be iterating over several instances with several BDMs per\n        # instance and those BDMs could be using a lot of the same images so\n        # we want to cache the image API GET results for performance.\n        image_cache \u003d {}  # dict of image dicts keyed by image id\n        # Before processing the list of instances get all of the requested\n        # pre-existing volumes so we can do some validation here rather than\n        # down in the bowels of _validate_bdm.\n        volumes \u003d self._get_volumes_for_bdms(context, block_device_mapping)\n```\n\nthe only thin i change form the orgial code was movign the pop of the port request up,so i could pass it into the scheduler_utils.request_spec_for_limits call and pull the if out but i cna put the if check into request_spec_for_limits","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":1465,"context_line":"        security_groups \u003d security_group_api.populate_security_groups("},{"line_number":1466,"context_line":"            security_groups)"},{"line_number":1467,"context_line":"        port_resource_requests \u003d base_options.pop("},{"line_number":1468,"context_line":"            \u0027port_resource_requests\u0027)"},{"line_number":1469,"context_line":"        req_lvl_params \u003d base_options.pop(\u0027request_level_params\u0027)"},{"line_number":1470,"context_line":"        instances_to_build \u003d []"},{"line_number":1471,"context_line":"        # We could be iterating over several instances with several"}],"source_content_type":"text/x-python","patch_set":6,"id":"c9abffbc_d2b870ff","line":1468,"updated":"2026-04-08 21:31:58.000000000","message":"This shouldn\u0027t be line wrapped.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"        security_groups \u003d security_group_api.populate_security_groups("},{"line_number":1466,"context_line":"            security_groups)"},{"line_number":1467,"context_line":"        port_resource_requests \u003d base_options.pop("},{"line_number":1468,"context_line":"            \u0027port_resource_requests\u0027)"},{"line_number":1469,"context_line":"        req_lvl_params \u003d base_options.pop(\u0027request_level_params\u0027)"},{"line_number":1470,"context_line":"        instances_to_build \u003d []"},{"line_number":1471,"context_line":"        # We could be iterating over several instances with several"}],"source_content_type":"text/x-python","patch_set":6,"id":"6837489c_9ea254ae","line":1468,"in_reply_to":"4752227c_5274cc8e","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":1465,"context_line":"        security_groups \u003d security_group_api.populate_security_groups("},{"line_number":1466,"context_line":"            security_groups)"},{"line_number":1467,"context_line":"        port_resource_requests \u003d base_options.pop("},{"line_number":1468,"context_line":"            \u0027port_resource_requests\u0027)"},{"line_number":1469,"context_line":"        req_lvl_params \u003d base_options.pop(\u0027request_level_params\u0027)"},{"line_number":1470,"context_line":"        instances_to_build \u003d []"},{"line_number":1471,"context_line":"        # We could be iterating over several instances with several"}],"source_content_type":"text/x-python","patch_set":6,"id":"4752227c_5274cc8e","line":1468,"in_reply_to":"c9abffbc_d2b870ff","updated":"2026-04-09 00:18:23.000000000","message":"actually i can delete thei sas i jut moved it put so i could pass it to\n\nscheduler_utils.request_spec_for_limits\n\nso this is a copy pasta bug","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":1476,"context_line":"        # Before processing the list of instances get all of the"},{"line_number":1477,"context_line":"        # requested pre-existing volumes so we can do some"},{"line_number":1478,"context_line":"        # validation here rather than down in the bowels of"},{"line_number":1479,"context_line":"        # _validate_bdm."},{"line_number":1480,"context_line":"        volumes \u003d self._get_volumes_for_bdms("},{"line_number":1481,"context_line":"            context, block_device_mapping)"},{"line_number":1482,"context_line":"        volume_az \u003d self._validate_vol_az_for_create("}],"source_content_type":"text/x-python","patch_set":6,"id":"35b63475_6394ece8","line":1479,"updated":"2026-04-08 21:31:58.000000000","message":"All of this code comment line wrapping is too short 😭 I remember when people wanted to update the style rules to allow 100 or 120 chars, why is this like 50?? Complete opposite direction.\n\nShouldn\u0027t it be easy to have Claude create code that fits the style of the project? It seems like it has been able to when I used it.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":1476,"context_line":"        # Before processing the list of instances get all of the"},{"line_number":1477,"context_line":"        # requested pre-existing volumes so we can do some"},{"line_number":1478,"context_line":"        # validation here rather than down in the bowels of"},{"line_number":1479,"context_line":"        # _validate_bdm."},{"line_number":1480,"context_line":"        volumes \u003d self._get_volumes_for_bdms("},{"line_number":1481,"context_line":"            context, block_device_mapping)"},{"line_number":1482,"context_line":"        volume_az \u003d self._validate_vol_az_for_create("}],"source_content_type":"text/x-python","patch_set":6,"id":"d437f7d9_1124e1fb","line":1479,"in_reply_to":"35b63475_6394ece8","updated":"2026-04-09 00:18:23.000000000","message":"i would still be happy to have longer line limtis for what its worth\n\nhttps://peps.python.org/pep-0008/#maximum-line-length\n\npep8 recommedn comment be limtied to 72 while code can be 79 but i think\nthis is just begin overaly conservative at ~66\n\ni reflowed the repoducer to be more compat and better use the linen limits but i didnt do that for the fix patch let me do that for all the now/chagned code in the ext version.\n\nClaude is better at this yes i used composer 2 in cursor for this last iteration and its notable less good at that. i have noticed it not following my rules since i started using it a week or two ago.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":1476,"context_line":"        # Before processing the list of instances get all of the"},{"line_number":1477,"context_line":"        # requested pre-existing volumes so we can do some"},{"line_number":1478,"context_line":"        # validation here rather than down in the bowels of"},{"line_number":1479,"context_line":"        # _validate_bdm."},{"line_number":1480,"context_line":"        volumes \u003d self._get_volumes_for_bdms("},{"line_number":1481,"context_line":"            context, block_device_mapping)"},{"line_number":1482,"context_line":"        volume_az \u003d self._validate_vol_az_for_create("}],"source_content_type":"text/x-python","patch_set":6,"id":"f299ed20_6eff973e","line":1479,"in_reply_to":"d437f7d9_1124e1fb","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":1478,"context_line":"        # validation here rather than down in the bowels of"},{"line_number":1479,"context_line":"        # _validate_bdm."},{"line_number":1480,"context_line":"        volumes \u003d self._get_volumes_for_bdms("},{"line_number":1481,"context_line":"            context, block_device_mapping)"},{"line_number":1482,"context_line":"        volume_az \u003d self._validate_vol_az_for_create("},{"line_number":1483,"context_line":"            base_options[\u0027availability_zone\u0027], volumes.values())"},{"line_number":1484,"context_line":"        if volume_az:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bae853f5_0ae86bf6","line":1481,"updated":"2026-04-08 21:31:58.000000000","message":"Same.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":1478,"context_line":"        # validation here rather than down in the bowels of"},{"line_number":1479,"context_line":"        # _validate_bdm."},{"line_number":1480,"context_line":"        volumes \u003d self._get_volumes_for_bdms("},{"line_number":1481,"context_line":"            context, block_device_mapping)"},{"line_number":1482,"context_line":"        volume_az \u003d self._validate_vol_az_for_create("},{"line_number":1483,"context_line":"            base_options[\u0027availability_zone\u0027], volumes.values())"},{"line_number":1484,"context_line":"        if volume_az:"}],"source_content_type":"text/x-python","patch_set":6,"id":"97c61d12_8a543f7c","line":1481,"in_reply_to":"41cc7d8f_8db19b54","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":1478,"context_line":"        # validation here rather than down in the bowels of"},{"line_number":1479,"context_line":"        # _validate_bdm."},{"line_number":1480,"context_line":"        volumes \u003d self._get_volumes_for_bdms("},{"line_number":1481,"context_line":"            context, block_device_mapping)"},{"line_number":1482,"context_line":"        volume_az \u003d self._validate_vol_az_for_create("},{"line_number":1483,"context_line":"            base_options[\u0027availability_zone\u0027], volumes.values())"},{"line_number":1484,"context_line":"        if volume_az:"}],"source_content_type":"text/x-python","patch_set":6,"id":"41cc7d8f_8db19b54","line":1481,"in_reply_to":"bae853f5_0ae86bf6","updated":"2026-04-09 00:18:23.000000000","message":"yep ill fix this i didnt look at the formating fixes yestereday so no worries.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"}],"nova/limit/placement.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        if limit_utils.should_enforce(e):"},{"line_number":179,"context_line":"            # NOTE(johngarbutt) we can do better, but this is very simple"},{"line_number":180,"context_line":"            LOG.debug("},{"line_number":181,"context_line":"                \"Limit check failed with count %s retrying with count %s\","},{"line_number":182,"context_line":"                max_count, max_count - 1)"},{"line_number":183,"context_line":"            try:"},{"line_number":184,"context_line":"                return enforce_num_instances_and_flavor("}],"source_content_type":"text/x-python","patch_set":4,"id":"6cdf5cea_2052884d","side":"PARENT","line":181,"updated":"2026-02-07 13:07:51.000000000","message":"this is not requried.","commit_id":"cbdc38f418998174fe1c273285ad82a3a7829667"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        if limit_utils.should_enforce(e):"},{"line_number":179,"context_line":"            # NOTE(johngarbutt) we can do better, but this is very simple"},{"line_number":180,"context_line":"            LOG.debug("},{"line_number":181,"context_line":"                \"Limit check failed with count %s retrying with count %s\","},{"line_number":182,"context_line":"                max_count, max_count - 1)"},{"line_number":183,"context_line":"            try:"},{"line_number":184,"context_line":"                return enforce_num_instances_and_flavor("}],"source_content_type":"text/x-python","patch_set":4,"id":"c455e4c8_aa1c29b4","side":"PARENT","line":181,"in_reply_to":"6cdf5cea_2052884d","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"cbdc38f418998174fe1c273285ad82a3a7829667"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f2f40bd7a8eb598f1c431f62127b52f52fdb597f","unresolved":true,"context_lines":[{"line_number":186,"context_line":"                    max_count - 1, enforcer\u003denforcer)"},{"line_number":187,"context_line":"            except ValueError:"},{"line_number":188,"context_line":"                # Copy the *original* exception message to a OverQuota to"},{"line_number":189,"context_line":"                # propagate to the API layer"},{"line_number":190,"context_line":"                raise exception.TooManyInstances(str(e))"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    # no problems with max_count, so we return max count"}],"source_content_type":"text/x-python","patch_set":4,"id":"00361fc4_b1327b04","side":"PARENT","line":189,"updated":"2026-02-07 13:07:51.000000000","message":"or this but it sjust reformatigin so i twont break anything.","commit_id":"cbdc38f418998174fe1c273285ad82a3a7829667"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    max_count - 1, enforcer\u003denforcer)"},{"line_number":187,"context_line":"            except ValueError:"},{"line_number":188,"context_line":"                # Copy the *original* exception message to a OverQuota to"},{"line_number":189,"context_line":"                # propagate to the API layer"},{"line_number":190,"context_line":"                raise exception.TooManyInstances(str(e))"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    # no problems with max_count, so we return max count"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3ba955_b6e650a3","side":"PARENT","line":189,"in_reply_to":"00361fc4_b1327b04","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"cbdc38f418998174fe1c273285ad82a3a7829667"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    return limit.Enforcer(callback)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def enforce_num_instances_and_flavor("},{"line_number":148,"context_line":"    context: \u0027nova.context.RequestContext\u0027,"},{"line_number":149,"context_line":"    project_id: str,"},{"line_number":150,"context_line":"    request_spec: \u0027objects.RequestSpec\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"f78a3de4_cfd78561","line":147,"in_reply_to":"e582d506_2290e261","updated":"2026-02-07 13:53:26.000000000","message":"oh yes we could do that and swap form the strign to the object form.\n\ni like to use the direct refences if we have the objects in scope in the moduel already but i tened not to so the if TYPE_CHECKING import thing so i think ill lave thsi as is","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":179,"context_line":"    :param delta_updates: Optional extra deltas to merge."},{"line_number":180,"context_line":"    :returns: The highest instance count that fits within limits."},{"line_number":181,"context_line":"    :raises TooManyInstances: When even min_count exceeds limits."},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    if not limit_utils.use_unified_limits():"},{"line_number":184,"context_line":"        return max_count"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"46c0af32_5ddca04c","line":182,"updated":"2026-04-08 21:31:58.000000000","message":"This is the needlessly short line wrapping again I think. I think there should be a way to tell Claude to wrap at 79 chars, no?","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6db5b04b7564a28b09f9d5458abc8645a76a917","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    :param delta_updates: Optional extra deltas to merge."},{"line_number":180,"context_line":"    :returns: The highest instance count that fits within limits."},{"line_number":181,"context_line":"    :raises TooManyInstances: When even min_count exceeds limits."},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    if not limit_utils.use_unified_limits():"},{"line_number":184,"context_line":"        return max_count"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"235f0a33_b06f73a3","line":182,"in_reply_to":"37094108_1985a4c5","updated":"2026-05-21 22:23:33.000000000","message":"Thanks for the link on docstring pep8 ... I actually had no idea it prescribes 72 chars in that case.\n\nThat was my mistake and I will note it for myself for future reference.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":179,"context_line":"    :param delta_updates: Optional extra deltas to merge."},{"line_number":180,"context_line":"    :returns: The highest instance count that fits within limits."},{"line_number":181,"context_line":"    :raises TooManyInstances: When even min_count exceeds limits."},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    if not limit_utils.use_unified_limits():"},{"line_number":184,"context_line":"        return max_count"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"84c08c43_5d7bfb50","line":182,"in_reply_to":"46c0af32_5ddca04c","updated":"2026-04-09 00:18:23.000000000","message":"yes althogh the limti for docs srtign in pep8 is techinialy 72\nhttps://peps.python.org/pep-0008/#maximum-line-length which surpising cause a lot more reflow then you would think but we have never enforce the shorter one for docs string so ill fix this in the next pass\n\n`    resource groups (PCI, neutron port bandwidth, cyborg device profile)`\nis actuly exactly 72 long to that is the maximum under strict pep8 compliance that why it refloaed it like that.\n\nbut ya i can compat this in the next version","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    :param delta_updates: Optional extra deltas to merge."},{"line_number":180,"context_line":"    :returns: The highest instance count that fits within limits."},{"line_number":181,"context_line":"    :raises TooManyInstances: When even min_count exceeds limits."},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    if not limit_utils.use_unified_limits():"},{"line_number":184,"context_line":"        return max_count"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"37094108_1985a4c5","line":182,"in_reply_to":"84c08c43_5d7bfb50","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"}],"nova/objects/request_spec.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8ca4a71f1dd341b282f963b8f8625f44173ee91f","unresolved":true,"context_lines":[{"line_number":578,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":579,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"            if pci_request.count and not self.requested_resources:"},{"line_number":582,"context_line":"                self.requested_resources \u003d []"},{"line_number":583,"context_line":"            for i in range(pci_request.count):"},{"line_number":584,"context_line":"                rg \u003d objects.RequestGroup("},{"line_number":585,"context_line":"                    use_same_provider\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f5f1e22e_78e54854","line":582,"range":{"start_line":581,"start_character":0,"end_line":582,"end_character":45},"updated":"2026-02-06 09:52:25.000000000","message":"* The pci_request.count part feels strange. \n* The rest feels out of place. I guess this patch calls the function from different places having different pre-conditions than before. I would love to see this untangled and having a common pre-condition for all call sites.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":578,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":579,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"            if pci_request.count and not self.requested_resources:"},{"line_number":582,"context_line":"                self.requested_resources \u003d []"},{"line_number":583,"context_line":"            for i in range(pci_request.count):"},{"line_number":584,"context_line":"                rg \u003d objects.RequestGroup("},{"line_number":585,"context_line":"                    use_same_provider\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"73bb3a12_9fc49d59","line":582,"range":{"start_line":581,"start_character":0,"end_line":582,"end_character":45},"in_reply_to":"6627e5c8_3acf3a2d","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9adbc3ddb8aaa6df5c68aa79211a4a324e84b6","unresolved":true,"context_lines":[{"line_number":578,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":579,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"            if pci_request.count and not self.requested_resources:"},{"line_number":582,"context_line":"                self.requested_resources \u003d []"},{"line_number":583,"context_line":"            for i in range(pci_request.count):"},{"line_number":584,"context_line":"                rg \u003d objects.RequestGroup("},{"line_number":585,"context_line":"                    use_same_provider\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"6627e5c8_3acf3a2d","line":582,"range":{"start_line":581,"start_character":0,"end_line":582,"end_character":45},"in_reply_to":"f5f1e22e_78e54854","updated":"2026-02-06 10:55:21.000000000","message":"the previous version assigned the [] before clling this fucntion but that felt wrng because this fucntion uncodtionlly appends to it.\n\nso to me this is a latent bug because we should not be assumtin gits an array below","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9adbc3ddb8aaa6df5c68aa79211a4a324e84b6","unresolved":true,"context_lines":[{"line_number":595,"context_line":"                    # TODO(gibi): later we can add support for complex trait"},{"line_number":596,"context_line":"                    # queries here including forbidden_traits."},{"line_number":597,"context_line":"                )"},{"line_number":598,"context_line":"                self.requested_resources.append(rg)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    @classmethod"},{"line_number":601,"context_line":"    def from_components("}],"source_content_type":"text/x-python","patch_set":3,"id":"db7b6ca3_8e42ef60","line":598,"updated":"2026-02-06 10:55:21.000000000","message":"^\nwe should have always been checkign that it was not None or similar","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                    # TODO(gibi): later we can add support for complex trait"},{"line_number":596,"context_line":"                    # queries here including forbidden_traits."},{"line_number":597,"context_line":"                )"},{"line_number":598,"context_line":"                self.requested_resources.append(rg)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    @classmethod"},{"line_number":601,"context_line":"    def from_components("}],"source_content_type":"text/x-python","patch_set":3,"id":"6d19d9b9_a770b136","line":598,"in_reply_to":"db7b6ca3_8e42ef60","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":true,"context_lines":[{"line_number":578,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":579,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"            if pci_request.count and not self.requested_resources:"},{"line_number":582,"context_line":"                self.requested_resources \u003d []"},{"line_number":583,"context_line":"            for i in range(pci_request.count):"},{"line_number":584,"context_line":"                rg \u003d objects.RequestGroup("}],"source_content_type":"text/x-python","patch_set":4,"id":"eee4e891_abb7d554","line":581,"in_reply_to":"ece15b98_1b8e0491","updated":"2026-02-07 13:53:26.000000000","message":"fine ill remove this.\n\nbut i think i should preably add an assert so that if we are depending on this anywhere it will find it.","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":578,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":579,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"            if pci_request.count and not self.requested_resources:"},{"line_number":582,"context_line":"                self.requested_resources \u003d []"},{"line_number":583,"context_line":"            for i in range(pci_request.count):"},{"line_number":584,"context_line":"                rg \u003d objects.RequestGroup("}],"source_content_type":"text/x-python","patch_set":4,"id":"84e749ef_f56a0f6c","line":581,"in_reply_to":"eee4e891_abb7d554","updated":"2026-02-09 22:37:53.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"}],"nova/scheduler/utils.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"57173ea086c185fefe67a8ae057c19eaf482caa5","unresolved":true,"context_lines":[{"line_number":668,"context_line":"    # and convert them to placement request groups so that unified limits"},{"line_number":669,"context_line":"    # checking includes PCI resource classes."},{"line_number":670,"context_line":"    if CONF.filter_scheduler.pci_in_placement:"},{"line_number":671,"context_line":"        from nova.pci import request as pci_request"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.requested_resources \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"7387a3a3_2d2112f5","line":671,"updated":"2026-02-05 21:52:42.000000000","message":"no ... let go with no in random imports in the middel fo the function","commit_id":"9cdc1a605d34ab7e505c3ee025a47dcf4d0e59d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7ef18624c990afd3d1c17003d1b07cef4dcd740e","unresolved":false,"context_lines":[{"line_number":668,"context_line":"    # and convert them to placement request groups so that unified limits"},{"line_number":669,"context_line":"    # checking includes PCI resource classes."},{"line_number":670,"context_line":"    if CONF.filter_scheduler.pci_in_placement:"},{"line_number":671,"context_line":"        from nova.pci import request as pci_request"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.requested_resources \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac074b9_0a5faa71","line":671,"in_reply_to":"7387a3a3_2d2112f5","updated":"2026-02-05 22:11:51.000000000","message":"Done","commit_id":"9cdc1a605d34ab7e505c3ee025a47dcf4d0e59d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"57173ea086c185fefe67a8ae057c19eaf482caa5","unresolved":true,"context_lines":[{"line_number":671,"context_line":"        from nova.pci import request as pci_request"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.requested_resources \u003d []"},{"line_number":675,"context_line":"        req_spec.generate_request_groups_from_pci_requests()"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    # TODO(efried): This method is currently only used from places that"}],"source_content_type":"text/x-python","patch_set":1,"id":"35a756f3_55160598","line":674,"updated":"2026-02-05 21:52:42.000000000","message":"we also shoudl not need to null this out","commit_id":"9cdc1a605d34ab7e505c3ee025a47dcf4d0e59d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7ef18624c990afd3d1c17003d1b07cef4dcd740e","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        from nova.pci import request as pci_request"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.requested_resources \u003d []"},{"line_number":675,"context_line":"        req_spec.generate_request_groups_from_pci_requests()"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    # TODO(efried): This method is currently only used from places that"}],"source_content_type":"text/x-python","patch_set":1,"id":"afc241dc_69c290e6","line":674,"in_reply_to":"35a756f3_55160598","updated":"2026-02-05 22:11:51.000000000","message":"Done","commit_id":"9cdc1a605d34ab7e505c3ee025a47dcf4d0e59d0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8ca4a71f1dd341b282f963b8f8625f44173ee91f","unresolved":true,"context_lines":[{"line_number":661,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"def _get_resources(flavor, is_bfv):"},{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"238d3272_2bf3c456","line":664,"updated":"2026-02-06 09:52:25.000000000","message":"This is called from two distinct places, the unified limits codepath resources_for_limits() and resources_from_flavor() code path. Either we figure out what this change means for both code paths or we should limit this change to the unified limit path.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9adbc3ddb8aaa6df5c68aa79211a4a324e84b6","unresolved":true,"context_lines":[{"line_number":661,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"def _get_resources(flavor, is_bfv):"},{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"6549f0e6_e25df9c5","line":664,"in_reply_to":"238d3272_2bf3c456","updated":"2026-02-06 10:55:21.000000000","message":"yes it is and this is put here so that both have the same behaviour\n\nshort term i think we should fold one into the other and by removing resources_for_limits and having the limits path use resources_from_flavor longer term i don\u0027t like that resources_from_flavor exists either and would prefer to build the full request spec properly form componets.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d859175614e65203590b1be12eb1256da3a74f5b","unresolved":false,"context_lines":[{"line_number":661,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"def _get_resources(flavor, is_bfv):"},{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0af9afec_0e6e4ad0","line":664,"in_reply_to":"6549f0e6_e25df9c5","updated":"2026-02-09 22:37:53.000000000","message":"Acknowledged","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8ca4a71f1dd341b282f963b8f8625f44173ee91f","unresolved":true,"context_lines":[{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # When pci_in_placement is enabled, extract PCI requests from the flavor"},{"line_number":669,"context_line":"    # and convert them to placement request groups so that unified limits"},{"line_number":670,"context_line":"    # checking includes PCI resource classes."},{"line_number":671,"context_line":"    if CONF.filter_scheduler.pci_in_placement:"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.generate_request_groups_from_pci_requests()"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    # TODO(efried): This method is currently only used from places that"},{"line_number":677,"context_line":"    # assume the compute node is the only resource provider.  So for now, we"},{"line_number":678,"context_line":"    # just merge together all the resources specified in the flavor and pass"},{"line_number":679,"context_line":"    # them along.  This will need to be adjusted when nested and/or shared RPs"},{"line_number":680,"context_line":"    # are in play."},{"line_number":681,"context_line":"    res_req \u003d ResourceRequest.from_request_spec(req_spec)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"    return res_req.merged_resources()"},{"line_number":684,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"8a45edb1_66c0062b","line":681,"range":{"start_line":668,"start_character":0,"end_line":681,"end_character":57},"updated":"2026-02-06 09:52:25.000000000","message":"So the code added above invalidates the assumption made in efried\u0027s  note. So I don\u0027t think this is correct as is. Either the assumption does no needed any more or we are silently breaking something here.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"03a33e39e285e21b0adc107cb090c417d1a62126","unresolved":false,"context_lines":[{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # When pci_in_placement is enabled, extract PCI requests from the flavor"},{"line_number":669,"context_line":"    # and convert them to placement request groups so that unified limits"},{"line_number":670,"context_line":"    # checking includes PCI resource classes."},{"line_number":671,"context_line":"    if CONF.filter_scheduler.pci_in_placement:"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.generate_request_groups_from_pci_requests()"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    # TODO(efried): This method is currently only used from places that"},{"line_number":677,"context_line":"    # assume the compute node is the only resource provider.  So for now, we"},{"line_number":678,"context_line":"    # just merge together all the resources specified in the flavor and pass"},{"line_number":679,"context_line":"    # them along.  This will need to be adjusted when nested and/or shared RPs"},{"line_number":680,"context_line":"    # are in play."},{"line_number":681,"context_line":"    res_req \u003d ResourceRequest.from_request_spec(req_spec)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"    return res_req.merged_resources()"},{"line_number":684,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0325dade_bf31a47f","line":681,"range":{"start_line":668,"start_character":0,"end_line":681,"end_character":57},"in_reply_to":"0e5254c3_ffe4b9ba","updated":"2026-02-10 01:27:15.000000000","message":"Done","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9adbc3ddb8aaa6df5c68aa79211a4a324e84b6","unresolved":true,"context_lines":[{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # When pci_in_placement is enabled, extract PCI requests from the flavor"},{"line_number":669,"context_line":"    # and convert them to placement request groups so that unified limits"},{"line_number":670,"context_line":"    # checking includes PCI resource classes."},{"line_number":671,"context_line":"    if CONF.filter_scheduler.pci_in_placement:"},{"line_number":672,"context_line":"        req_spec.pci_requests \u003d pci_request.get_pci_requests_from_flavor("},{"line_number":673,"context_line":"            flavor)"},{"line_number":674,"context_line":"        req_spec.generate_request_groups_from_pci_requests()"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    # TODO(efried): This method is currently only used from places that"},{"line_number":677,"context_line":"    # assume the compute node is the only resource provider.  So for now, we"},{"line_number":678,"context_line":"    # just merge together all the resources specified in the flavor and pass"},{"line_number":679,"context_line":"    # them along.  This will need to be adjusted when nested and/or shared RPs"},{"line_number":680,"context_line":"    # are in play."},{"line_number":681,"context_line":"    res_req \u003d ResourceRequest.from_request_spec(req_spec)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"    return res_req.merged_resources()"},{"line_number":684,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0e5254c3_ffe4b9ba","line":681,"range":{"start_line":668,"start_character":0,"end_line":681,"end_character":57},"in_reply_to":"8a45edb1_66c0062b","updated":"2026-02-06 10:55:21.000000000","message":"hum i see what your saying but im not sure why this need to be adjusted.\n\nfor unifed limits checking at any rate tehre is no issue with merging the requests\n\nwe dont care how its groups we just need to count them all.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8ca4a71f1dd341b282f963b8f8625f44173ee91f","unresolved":true,"context_lines":[{"line_number":685,"context_line":""},{"line_number":686,"context_line":"def resources_for_limits(flavor, is_bfv):"},{"line_number":687,"context_line":"    \"\"\"Work out what unified limits may be exceeded.\"\"\""},{"line_number":688,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"def resources_from_request_spec(ctxt, spec_obj, host_manager,"}],"source_content_type":"text/x-python","patch_set":3,"id":"14c6468d_a279467d","line":688,"updated":"2026-02-06 09:52:25.000000000","message":"I\u0027m tempted to suggest to try to re-implement this based on the same calls that our VM scheduling code path uses \n* RequestSpec.from_component() to create a complete req_spec (this will automatically call generate_request_groups_from_pci_requests() for us)\n* ResourceRequest.from_request_spec(req_spec)","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9adbc3ddb8aaa6df5c68aa79211a4a324e84b6","unresolved":true,"context_lines":[{"line_number":685,"context_line":""},{"line_number":686,"context_line":"def resources_for_limits(flavor, is_bfv):"},{"line_number":687,"context_line":"    \"\"\"Work out what unified limits may be exceeded.\"\"\""},{"line_number":688,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"def resources_from_request_spec(ctxt, spec_obj, host_manager,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f99a6073_e8717887","line":688,"in_reply_to":"14c6468d_a279467d","updated":"2026-02-06 10:55:21.000000000","message":"that was my first tought too but i was not sure where to get all the peisce i needed to do that. with that said lets try and see what it takes.","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"03a33e39e285e21b0adc107cb090c417d1a62126","unresolved":false,"context_lines":[{"line_number":685,"context_line":""},{"line_number":686,"context_line":"def resources_for_limits(flavor, is_bfv):"},{"line_number":687,"context_line":"    \"\"\"Work out what unified limits may be exceeded.\"\"\""},{"line_number":688,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"def resources_from_request_spec(ctxt, spec_obj, host_manager,"}],"source_content_type":"text/x-python","patch_set":3,"id":"933d97c1_f205183e","line":688,"in_reply_to":"f99a6073_e8717887","updated":"2026-02-10 01:27:15.000000000","message":"Done","commit_id":"b36e00771b6a71952f1f4a262a2bd3cfe4db37e9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":661,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"def _get_resources(flavor, is_bfv):"},{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d4564c9c_be794326","line":664,"range":{"start_line":664,"start_character":4,"end_line":664,"end_character":18},"updated":"2026-04-08 21:31:58.000000000","message":"I think we should make this public since nova-manage is now calling it ... doesn\u0027t look right to be calling a private method from a different module.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":661,"context_line":"    return _get_resources(flavor, is_bfv)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"def _get_resources(flavor, is_bfv):"},{"line_number":665,"context_line":"    # create a fake RequestSpec as a wrapper to the caller"},{"line_number":666,"context_line":"    req_spec \u003d objects.RequestSpec(flavor\u003dflavor, is_bfv\u003dis_bfv)"},{"line_number":667,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"8f742ae5_0150dc8f","line":664,"range":{"start_line":664,"start_character":4,"end_line":664,"end_character":18},"in_reply_to":"d4564c9c_be794326","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":678,"context_line":"    return res_req.merged_resources()"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"def request_spec_for_limits("},{"line_number":682,"context_line":"    flavor, is_bfv, port_resource_requests\u003dNone,"},{"line_number":683,"context_line":"    dp_request_groups\u003dNone,"},{"line_number":684,"context_line":"):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bbe03313_4463672e","line":681,"range":{"start_line":681,"start_character":4,"end_line":681,"end_character":27},"updated":"2026-04-09 00:18:23.000000000","message":"oh this was the helper i added last time i think i forgot to move the api stuff into a helper when i added this.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":678,"context_line":"    return res_req.merged_resources()"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"def request_spec_for_limits("},{"line_number":682,"context_line":"    flavor, is_bfv, port_resource_requests\u003dNone,"},{"line_number":683,"context_line":"    dp_request_groups\u003dNone,"},{"line_number":684,"context_line":"):"}],"source_content_type":"text/x-python","patch_set":6,"id":"389b4679_6cb3355a","line":681,"range":{"start_line":681,"start_character":4,"end_line":681,"end_character":27},"in_reply_to":"bbe03313_4463672e","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":706,"context_line":"        if req_spec.pci_requests.requests:"},{"line_number":707,"context_line":"            LOG.debug("},{"line_number":708,"context_line":"                \"Including PCI resource requests in unified limits \""},{"line_number":709,"context_line":"                \"quota deltas\")"},{"line_number":710,"context_line":"    if port_resource_requests:"},{"line_number":711,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":712,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":6,"id":"8ac43dc9_bcdc00dd","line":709,"updated":"2026-04-08 21:31:58.000000000","message":"Could we also log the actual resource requests, given that this is intended for debugging?","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":706,"context_line":"        if req_spec.pci_requests.requests:"},{"line_number":707,"context_line":"            LOG.debug("},{"line_number":708,"context_line":"                \"Including PCI resource requests in unified limits \""},{"line_number":709,"context_line":"                \"quota deltas\")"},{"line_number":710,"context_line":"    if port_resource_requests:"},{"line_number":711,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":712,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":6,"id":"0c26bec2_963b3145","line":709,"in_reply_to":"405839d1_90aa00f1","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":706,"context_line":"        if req_spec.pci_requests.requests:"},{"line_number":707,"context_line":"            LOG.debug("},{"line_number":708,"context_line":"                \"Including PCI resource requests in unified limits \""},{"line_number":709,"context_line":"                \"quota deltas\")"},{"line_number":710,"context_line":"    if port_resource_requests:"},{"line_number":711,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":712,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":6,"id":"405839d1_90aa00f1","line":709,"in_reply_to":"8ac43dc9_bcdc00dd","updated":"2026-04-09 00:18:23.000000000","message":"sure.\n\nalthough i coudl alterntiive add one log for the final requested resocues that might eb nicer at the end fo the function.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":710,"context_line":"    if port_resource_requests:"},{"line_number":711,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":712,"context_line":"        LOG.debug("},{"line_number":713,"context_line":"            \"Including neutron port bandwidth in unified limits quota deltas\")"},{"line_number":714,"context_line":"    if dp_request_groups:"},{"line_number":715,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":716,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":6,"id":"8907ca79_d60aaf25","line":713,"updated":"2026-04-08 21:31:58.000000000","message":"Ditto","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":710,"context_line":"    if port_resource_requests:"},{"line_number":711,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":712,"context_line":"        LOG.debug("},{"line_number":713,"context_line":"            \"Including neutron port bandwidth in unified limits quota deltas\")"},{"line_number":714,"context_line":"    if dp_request_groups:"},{"line_number":715,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":716,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":6,"id":"55c54935_a5635d83","line":713,"in_reply_to":"8907ca79_d60aaf25","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":715,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":716,"context_line":"        LOG.debug("},{"line_number":717,"context_line":"            \"Including cyborg device profile resources in unified limits \""},{"line_number":718,"context_line":"            \"quota deltas\")"},{"line_number":719,"context_line":"    return req_spec"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"b725a8e8_5959104a","line":718,"updated":"2026-04-08 21:31:58.000000000","message":"Ditto","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":716,"context_line":"        LOG.debug("},{"line_number":717,"context_line":"            \"Including cyborg device profile resources in unified limits \""},{"line_number":718,"context_line":"            \"quota deltas\")"},{"line_number":719,"context_line":"    return req_spec"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"e7230f05_b157af60","line":718,"in_reply_to":"b725a8e8_5959104a","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6db5b04b7564a28b09f9d5458abc8645a76a917","unresolved":true,"context_lines":[{"line_number":710,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":711,"context_line":"    if dp_request_groups:"},{"line_number":712,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":713,"context_line":"    resources \u003d ResourceRequest.from_request_spec(req_spec).merged_resources()"},{"line_number":714,"context_line":"    LOG.debug("},{"line_number":715,"context_line":"        \"Unified limits quota request includes resources: %s\", resources)"},{"line_number":716,"context_line":"    return req_spec"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d23b4d81_8afa68bd","line":715,"range":{"start_line":713,"start_character":0,"end_line":715,"end_character":73},"updated":"2026-05-21 22:23:33.000000000","message":"I like the idea of logging this in one place but I wonder if this is worth wrapping with `if LOG.isEnabledFor(logging.DEBUG):` to avoid `merged_resources()` unless the logging is actually going on happen.\n\nI\u0027m also wondering, is `merged_resources()` different than `req_spec.requested_resources` as far as which to use for logging?","commit_id":"510b0587db94222e792d2da899f8b0e5c779177a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0c637e47fb543432062160e305b7eef03c950e43","unresolved":true,"context_lines":[{"line_number":710,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":711,"context_line":"    if dp_request_groups:"},{"line_number":712,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":713,"context_line":"    resources \u003d ResourceRequest.from_request_spec(req_spec).merged_resources()"},{"line_number":714,"context_line":"    LOG.debug("},{"line_number":715,"context_line":"        \"Unified limits quota request includes resources: %s\", resources)"},{"line_number":716,"context_line":"    return req_spec"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"80a95bab_252d2369","line":715,"range":{"start_line":713,"start_character":0,"end_line":715,"end_character":73},"in_reply_to":"4b811355_f6b067ca","updated":"2026-05-21 23:11:31.000000000","message":"Yeah, same. I looked for it in Nova and found only one use for seemingly similar reason:\nhttps://opendev.org/openstack/nova/src/commit/6901f0cdddc199fe23aef0cd34f86ae2066ead30/nova/scheduler/host_manager.py#L754-L759\n\nI just couldn\u0027t help but notice \"from_request_spec\" + \"merged_resources\" and to do it for no reason if logging is not at DEBUG.\n\nGotcha -- makes sense. I think with the guard on it definitely go for the merged view that is easier to read. I think I was more trying to justify in my head like well, if we used req_spec.requested_resources, maybe don\u0027t bother to add the guard? Either way seems fine to me. Again it just looked a bit weird to see some things like \"from_request_spec\" + \"merged_resources\" without being used at all at lower log levels.","commit_id":"510b0587db94222e792d2da899f8b0e5c779177a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e1cb0dd74f3a4acfb57b64fcb566aeba4a16307a","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":711,"context_line":"    if dp_request_groups:"},{"line_number":712,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":713,"context_line":"    resources \u003d ResourceRequest.from_request_spec(req_spec).merged_resources()"},{"line_number":714,"context_line":"    LOG.debug("},{"line_number":715,"context_line":"        \"Unified limits quota request includes resources: %s\", resources)"},{"line_number":716,"context_line":"    return req_spec"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"8d002911_4a76bbee","line":715,"range":{"start_line":713,"start_character":0,"end_line":715,"end_character":73},"in_reply_to":"80a95bab_252d2369","updated":"2026-05-29 12:03:20.000000000","message":"Done","commit_id":"510b0587db94222e792d2da899f8b0e5c779177a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"44efb0af540581d74f901657a13f2c977fe034ba","unresolved":true,"context_lines":[{"line_number":710,"context_line":"        req_spec.requested_resources.extend(port_resource_requests)"},{"line_number":711,"context_line":"    if dp_request_groups:"},{"line_number":712,"context_line":"        req_spec.requested_resources.extend(dp_request_groups)"},{"line_number":713,"context_line":"    resources \u003d ResourceRequest.from_request_spec(req_spec).merged_resources()"},{"line_number":714,"context_line":"    LOG.debug("},{"line_number":715,"context_line":"        \"Unified limits quota request includes resources: %s\", resources)"},{"line_number":716,"context_line":"    return req_spec"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"4b811355_f6b067ca","line":715,"range":{"start_line":713,"start_character":0,"end_line":715,"end_character":73},"in_reply_to":"d23b4d81_8afa68bd","updated":"2026-05-21 23:01:57.000000000","message":":) so whe i refien dthis with ai it actully did that and i removed it becasue\nnormally we just let the log filterign drop the logs if you are not at the correct log level\n\nbut reading your comment i realise it was doing more then that, your right it also allows use to defer work by nbot calling merged_resouces() if we are at a lower log verbosity so its a minor perfoance optimisation as well.\n\ni never really use if LOG.isEnabledFor(logging.DEBUG): but i agree this si a good use for it.\n\ni would have to check but i think merged resouces just flattens it the request gorups so that we merge all the values so that each resouce class appears only one and the count is the sum of all the request.\n\nthat meand if you ask for 2 groups fo 4 of pci devices we will reporte it as 8 so its a littel simpler to see if the limti is 6 that you exceed it rather then havign to look at 2 grousp of 4 an do the math in your head.\n\nso its not much of a delta to be fair but i think this will be a littel shorter in the logs.\n\nim open to either however if you have a prefence","commit_id":"510b0587db94222e792d2da899f8b0e5c779177a"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":2947,"context_line":""},{"line_number":2948,"context_line":"        mock_enforce.assert_called_once_with("},{"line_number":2949,"context_line":"            self.params[\u0027context\u0027], project_id,"},{"line_number":2950,"context_line":"            mock.ANY, 0, 0)"},{"line_number":2951,"context_line":""},{"line_number":2952,"context_line":"        # Verify we set the instance to ERROR state and set the fault message."},{"line_number":2953,"context_line":"        instances \u003d objects.InstanceList.get_all(self.ctxt)"}],"source_content_type":"text/x-python","patch_set":6,"id":"0c219ccf_eadff42d","line":2950,"updated":"2026-04-08 21:31:58.000000000","message":"Shouldn\u0027t need to wrap the line here I don\u0027t think.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":2947,"context_line":""},{"line_number":2948,"context_line":"        mock_enforce.assert_called_once_with("},{"line_number":2949,"context_line":"            self.params[\u0027context\u0027], project_id,"},{"line_number":2950,"context_line":"            mock.ANY, 0, 0)"},{"line_number":2951,"context_line":""},{"line_number":2952,"context_line":"        # Verify we set the instance to ERROR state and set the fault message."},{"line_number":2953,"context_line":"        instances \u003d objects.InstanceList.get_all(self.ctxt)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a3e154f8_3dc48d0d","line":2950,"in_reply_to":"0c219ccf_eadff42d","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":3069,"context_line":"        # Verify we called the quota check function with expected args."},{"line_number":3070,"context_line":"        mock_enforce.assert_called_once_with("},{"line_number":3071,"context_line":"            self.context, instance.project_id,"},{"line_number":3072,"context_line":"            req_spec, 0, 0)"},{"line_number":3073,"context_line":""},{"line_number":3074,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.unshelve_instance\u0027)"},{"line_number":3075,"context_line":"    @mock.patch.object(placement_limit, \u0027enforce_num_instances_and_resources\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"b227d810_36b6f40a","line":3072,"updated":"2026-04-08 21:31:58.000000000","message":"Same","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":3069,"context_line":"        # Verify we called the quota check function with expected args."},{"line_number":3070,"context_line":"        mock_enforce.assert_called_once_with("},{"line_number":3071,"context_line":"            self.context, instance.project_id,"},{"line_number":3072,"context_line":"            req_spec, 0, 0)"},{"line_number":3073,"context_line":""},{"line_number":3074,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.unshelve_instance\u0027)"},{"line_number":3075,"context_line":"    @mock.patch.object(placement_limit, \u0027enforce_num_instances_and_resources\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"501142ba_08e57476","line":3072,"in_reply_to":"b227d810_36b6f40a","updated":"2026-05-19 15:34:53.000000000","message":"Acknowledged","commit_id":"2df901d570ba5824d3af660e0394127337a00014"}],"nova/tests/unit/limit/test_placement.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"03a33e39e285e21b0adc107cb090c417d1a62126","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        mock_limit.assert_called_once_with(mock.ANY)"},{"line_number":260,"context_line":"        mock_enforcer.enforce.assert_called_once_with("},{"line_number":261,"context_line":"            uuids.project_id,"},{"line_number":262,"context_line":"            {\u0027servers\u0027: 2, \u0027class:VCPU\u0027: 20,"},{"line_number":263,"context_line":"             \u0027class:MEMORY_MB\u0027: 200,"},{"line_number":264,"context_line":"             \u0027class:DISK_GB\u0027: 14})"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"2ba83a57_bc243b45","line":262,"in_reply_to":"9cc6d6c6_6b8c330b","updated":"2026-02-10 01:27:15.000000000","message":"Done","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6f48b7d9d6deb3c64cd882e4649dad270b417b29","unresolved":true,"context_lines":[{"line_number":259,"context_line":"        mock_limit.assert_called_once_with(mock.ANY)"},{"line_number":260,"context_line":"        mock_enforcer.enforce.assert_called_once_with("},{"line_number":261,"context_line":"            uuids.project_id,"},{"line_number":262,"context_line":"            {\u0027servers\u0027: 2, \u0027class:VCPU\u0027: 20,"},{"line_number":263,"context_line":"             \u0027class:MEMORY_MB\u0027: 200,"},{"line_number":264,"context_line":"             \u0027class:DISK_GB\u0027: 14})"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9cc6d6c6_6b8c330b","line":262,"in_reply_to":"f3ac634a_9a32e129","updated":"2026-02-07 13:53:26.000000000","message":"\u003e Test method names could be more descriptive about the specific scenario\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.6\n\u003e \n\u003e **Impact**: Test method names were shortened from test_enforce_num_instances_and_flavor_* to test_enforce_*. While concise, the original names were more descriptive\n\u003e \n\u003e **Suggestion**:\n\u003e Consider keeping more descriptive names like test_enforce_num_instances_with_request_spec to maintain clarity about what is being tested. The current shorter names are acceptable but slightly less descriptive\n\nvalid \n\ni wonder if i shoudl rename the funtion to \n\nenforce_num_instances_with_request_spec  as well instead of \nenforce_num_instances_and_flavor\nor\nenforce_request_spec","commit_id":"18b9f018d69bd1a36ec9de83882949da7ac39b09"}],"releasenotes/notes/fix-unified-limits-pci-4c5ab30b1fcd4245.yaml":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"099a46e13143834b8e4fb261571739a480973cbf","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    (``NET_BW_IGR_KILOBIT_PER_SEC``, ``NET_BW_EGR_KILOBIT_PER_SEC``), or"},{"line_number":8,"context_line":"    cyborg device profile resources (e.g., ``FPGA``). This allowed users to"},{"line_number":9,"context_line":"    exceed quota limits for these resource types because the quota check"},{"line_number":10,"context_line":"    only considered standard resources like VCPU, MEMORY_MB, and DISK_GB."},{"line_number":11,"context_line":"    The enforcement chain now uses a full ``RequestSpec`` that includes all"},{"line_number":12,"context_line":"    requested resources."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f45996f_ca3a0b37","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":38},"updated":"2026-04-08 21:31:58.000000000","message":"Things like GPU also worked fine, i.e. \"simple\" custom resources.","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eebda56651ba0b124471fae5b93f5c7510c600bc","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    (``NET_BW_IGR_KILOBIT_PER_SEC``, ``NET_BW_EGR_KILOBIT_PER_SEC``), or"},{"line_number":8,"context_line":"    cyborg device profile resources (e.g., ``FPGA``). This allowed users to"},{"line_number":9,"context_line":"    exceed quota limits for these resource types because the quota check"},{"line_number":10,"context_line":"    only considered standard resources like VCPU, MEMORY_MB, and DISK_GB."},{"line_number":11,"context_line":"    The enforcement chain now uses a full ``RequestSpec`` that includes all"},{"line_number":12,"context_line":"    requested resources."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"f6eabb6e_6957c611","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":38},"in_reply_to":"7f45996f_ca3a0b37","updated":"2026-04-09 00:18:23.000000000","message":"that partly true in that it works for anyting that uses resocues: as well\nbut sure ill refine this to make that clearer","commit_id":"2df901d570ba5824d3af660e0394127337a00014"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"73e84337e6ee1b1b37386d334dc0b232a041848e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    (``NET_BW_IGR_KILOBIT_PER_SEC``, ``NET_BW_EGR_KILOBIT_PER_SEC``), or"},{"line_number":8,"context_line":"    cyborg device profile resources (e.g., ``FPGA``). This allowed users to"},{"line_number":9,"context_line":"    exceed quota limits for these resource types because the quota check"},{"line_number":10,"context_line":"    only considered standard resources like VCPU, MEMORY_MB, and DISK_GB."},{"line_number":11,"context_line":"    The enforcement chain now uses a full ``RequestSpec`` that includes all"},{"line_number":12,"context_line":"    requested resources."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"e3d2d331_ec9aa486","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":38},"in_reply_to":"f6eabb6e_6957c611","updated":"2026-05-19 15:34:53.000000000","message":"Done","commit_id":"2df901d570ba5824d3af660e0394127337a00014"}]}
