)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"0dfb5b61b4b74f418ba7938c4ffac855657b2a05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"120e3f79_30e43fe9","updated":"2026-07-07 18:34:46.000000000","message":"recheck cover job failed with a timeout","commit_id":"59413991c47574910fcd3595f4f432d7510f81fc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1ea8a78acecab47e8e9173da859ecdd51b8a4933","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"972b3281_2f5d86aa","updated":"2026-07-27 12:43:51.000000000","message":"recheck","commit_id":"8d872c1553be6b5726629bba017d98f339145c92"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"383739c7b9bdf67307cebf52702d70061bce2922","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b57e246f_4db26ff4","updated":"2026-07-30 19:45:18.000000000","message":"Overall I\u0027m not sure about the two minimum service version checks and trait additions in object methods and scheduler filter. I would have thought we should only need one check and one addition? The locations for these also seems wrong to me given the overall Nova architecture and IMHO seems a more appropriate place would be in the conductor. Interested to hear other thoughts.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"8ed39741_4af6a878","updated":"2026-08-04 13:25:53.000000000","message":"i think this is getting close","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"31fb7c05_5e02748d","updated":"2026-08-05 20:56:10.000000000","message":"Some smaller things noted inline.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a8c3d114524cc75eab1d9f80401e9c8301b8a4ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"b094d649_b138565e","updated":"2026-08-10 11:30:07.000000000","message":"Thank you everyone for the comments. Since Joan is on PTO till Aug end, I will address the comments on his patch.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"93c5a748_2fee9ec7","updated":"2026-08-07 13:54:17.000000000","message":"seems quite good despite being hairy but I have a few concerns about the coverage.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"}],"doc/source/admin/scheduling.rst":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":102,"context_line":"Nova reports the ``OWNER_NOVA`` trait on all resource providers it"},{"line_number":103,"context_line":"manages in Placement, including root compute node providers and child"},{"line_number":104,"context_line":"providers for pGPUs, memory encryption, and PCI devices. When"},{"line_number":105,"context_line":"scheduling, the conductor adds ``OWNER_NOVA`` as a required trait on"},{"line_number":106,"context_line":"the root resource provider and the child resource providers created by Nova"},{"line_number":107,"context_line":"in the request spec, ensuring the scheduler only considers Nova-managed"},{"line_number":108,"context_line":"resource providers and distinguishes them from providers managed by other"}],"source_content_type":"text/x-rst","patch_set":21,"id":"fe9cb89e_95cf13cf","line":105,"range":{"start_line":105,"start_character":16,"end_line":105,"end_character":25},"updated":"2026-08-05 20:56:10.000000000","message":"Sorry, this needs to be \"scheduler\" again 🙁","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":true,"context_lines":[{"line_number":102,"context_line":"Nova reports the ``OWNER_NOVA`` trait on all resource providers it"},{"line_number":103,"context_line":"manages in Placement, including root compute node providers and child"},{"line_number":104,"context_line":"providers for pGPUs, memory encryption, and PCI devices. When"},{"line_number":105,"context_line":"scheduling, the conductor adds ``OWNER_NOVA`` as a required trait on"},{"line_number":106,"context_line":"the root resource provider and the child resource providers created by Nova"},{"line_number":107,"context_line":"in the request spec, ensuring the scheduler only considers Nova-managed"},{"line_number":108,"context_line":"resource providers and distinguishes them from providers managed by other"}],"source_content_type":"text/x-rst","patch_set":21,"id":"06755174_412c0d32","line":105,"range":{"start_line":105,"start_character":16,"end_line":105,"end_character":25},"in_reply_to":"fe9cb89e_95cf13cf","updated":"2026-08-07 13:54:17.000000000","message":"+1","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":111,"context_line":"This requirement is version-gated: it only activates when all"},{"line_number":112,"context_line":"``nova-compute`` services in all cells report service version 73 or"},{"line_number":113,"context_line":"higher. The version check is performed per scheduling request in the"},{"line_number":114,"context_line":"conductor. During a rolling upgrade, a warning is logged for each"},{"line_number":115,"context_line":"request where the trait cannot yet be added."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Isolate Aggregates"}],"source_content_type":"text/x-rst","patch_set":21,"id":"4d1f062a_fabeeb03","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":9},"updated":"2026-08-05 20:56:10.000000000","message":"Same","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"}],"nova/compute/pci_placement_translator.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            self._get_inventories(),"},{"line_number":360,"context_line":"        )"},{"line_number":361,"context_line":"        provider_tree.update_traits(self.name, self.traits)"},{"line_number":362,"context_line":"        provider_tree.add_traits(self.name, os_traits.OWNER_NOVA)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # Here we are sure the RP exists in the provider_tree. So, we can"},{"line_number":365,"context_line":"        # record the RP UUID in each PciDevice this RP represents"}],"source_content_type":"text/x-python","patch_set":19,"id":"c7afb3db_113c619b","line":362,"updated":"2026-08-04 13:25:53.000000000","message":"oh right so this is done here because pci passhtough and or sriov is generic across virt driver,  hyperv before we deleted that driver ,support sriov/pci passthough as well so this is not in the livbirt driver with the ohter nova created nested resouce providers as a result.","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"}],"nova/conductor/manager.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"383739c7b9bdf67307cebf52702d70061bce2922","unresolved":true,"context_lines":[{"line_number":967,"context_line":"                return_alternates\u003dreturn_alternates)"},{"line_number":968,"context_line":"        LOG.debug(\u0027Took %0.2f seconds to select destinations for %s \u0027"},{"line_number":969,"context_line":"                  \u0027instance(s).\u0027, timer.elapsed(), len(instance_uuids))"},{"line_number":970,"context_line":"        return host_lists"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @staticmethod"},{"line_number":973,"context_line":"    def _restrict_request_spec_to_cell(context, instance, request_spec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"b6723232_1368edf1","line":970,"updated":"2026-07-30 19:45:18.000000000","message":"Could we consider creating a helper method to check the minimum service version and add the trait and call it here in _schedule_instances? I think it would be a more logical location for it.\n\nAnd use a global constant declared at the top of this file to hold the required version 73 rather than having the magic number.\n\nIdeally we do such checks in nova/compute/api.py but for this it would require duplicating the check over a number of different methods to cover every scheduling possibility, so the second best place would be somewhere in conductor IMHO.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4762c194a5cd09ca7afe50effd1da6a56cf2e5c1","unresolved":true,"context_lines":[{"line_number":967,"context_line":"                return_alternates\u003dreturn_alternates)"},{"line_number":968,"context_line":"        LOG.debug(\u0027Took %0.2f seconds to select destinations for %s \u0027"},{"line_number":969,"context_line":"                  \u0027instance(s).\u0027, timer.elapsed(), len(instance_uuids))"},{"line_number":970,"context_line":"        return host_lists"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @staticmethod"},{"line_number":973,"context_line":"    def _restrict_request_spec_to_cell(context, instance, request_spec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fd9c4d5b_f72ff4bd","line":970,"in_reply_to":"2318e611_74c36712","updated":"2026-08-03 16:21:11.000000000","message":"Since making this change and realizing the three call sites needed for it to be in conductor, I started re-thinking about whether it would be any issue to have the min service version check in the scheduler pre-filter like you had originally.\n\nI had been thinking about things like reschedules also but Nova pre-calculates alternate hosts ahead of time, so filters don\u0027t re-run for reschedules. The exception might be live migration but still we could easily avoid re-running the service version check by seeing if OWNER_NOVA is already on the request spec and if it is, return early.\n\nSo ... based on this and our discussion upstream on IRC today [1], I think I would say we are OK to move the trait addition (and service version check) to a scheduler pre-filter like you had before and have on call site instead of three. I would do all of it there in one location though and not add a service version check back into the request spec.\n\nBasically just move the all-in-one you currently have in conductor into the scheduler pre-filter if that makes sense.\n\n[1] https://meetings.opendev.org/irclogs/%23openstack-nova/%23openstack-nova.2026-08-03.log.html#openstack-nova.2026-08-03.log.html#t2026-08-03T14:43:16","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":true,"context_lines":[{"line_number":967,"context_line":"                return_alternates\u003dreturn_alternates)"},{"line_number":968,"context_line":"        LOG.debug(\u0027Took %0.2f seconds to select destinations for %s \u0027"},{"line_number":969,"context_line":"                  \u0027instance(s).\u0027, timer.elapsed(), len(instance_uuids))"},{"line_number":970,"context_line":"        return host_lists"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @staticmethod"},{"line_number":973,"context_line":"    def _restrict_request_spec_to_cell(context, instance, request_spec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"2318e611_74c36712","line":970,"in_reply_to":"b6723232_1368edf1","updated":"2026-07-31 09:35:58.000000000","message":"thanks for the pointer that is very helpful. I\u0027ve moved the check and the trait addition to the conductor. The idea of adding it to the object was to have it as centralized as possible. The only downside I see in the current version is that we have to duplicate some logic to filter the pci request groups","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7fefc43d0893524dd30e5faf33e2139c1da399b8","unresolved":true,"context_lines":[{"line_number":967,"context_line":"                return_alternates\u003dreturn_alternates)"},{"line_number":968,"context_line":"        LOG.debug(\u0027Took %0.2f seconds to select destinations for %s \u0027"},{"line_number":969,"context_line":"                  \u0027instance(s).\u0027, timer.elapsed(), len(instance_uuids))"},{"line_number":970,"context_line":"        return host_lists"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @staticmethod"},{"line_number":973,"context_line":"    def _restrict_request_spec_to_cell(context, instance, request_spec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aa545f8_eda2b804","line":970,"in_reply_to":"fd9c4d5b_f72ff4bd","updated":"2026-08-04 08:07:57.000000000","message":"done, I\u0027ve moved the trait addition to the request spec to the scheduler","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"}],"nova/conductor/utils.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8aa8df416788a296bc7e82f56f6b1cb58ee9815e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a0753710_777e37af","line":85,"updated":"2026-07-31 23:57:08.000000000","message":"I\u0027m not a Placement expert but I wondered, wouldn\u0027t the addition of the trait to `root_required` guarantee that PCI request groups can only match providers in a Nova managed tree? And not need this additional logic?\n\nIf that\u0027s not the case I think it would be help to add a code comment or docstring text explaining why it is also needed on the request groups.","commit_id":"184e10fef0e0b99b9b0e483b03894bc3d3cb858c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"998017bb7544091939ec554d0d6ae58511a27786","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a0e48c84_41c00868","line":85,"in_reply_to":"21e9e249_1d9e1890","updated":"2026-08-04 11:28:06.000000000","message":"Marked as resolved.","commit_id":"184e10fef0e0b99b9b0e483b03894bc3d3cb858c"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7fefc43d0893524dd30e5faf33e2139c1da399b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"9978fa4c_b51eb1da","line":85,"in_reply_to":"2b320c6d_2c62c388","updated":"2026-08-04 08:07:57.000000000","message":"I understand, I made the same assumption in one of the early versions, and so did claude, you\u0027re not alone :)","commit_id":"184e10fef0e0b99b9b0e483b03894bc3d3cb858c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"09e65eb705e85576f7d28171055b0aae71c9bcb8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"21e9e249_1d9e1890","line":85,"in_reply_to":"9978fa4c_b51eb1da","updated":"2026-08-04 11:27:52.000000000","message":"no neutron and cyborg both create resouce provider under the root provider\n\nwe even dicussed not makign the root provider nova owned at one poitn and moving all those resouce to sub providres to reflact that any service can create nested resouce provider under teh root provider\n\n\nneutorn models its bandwith and packet per secodn invetories for tis QOS as nested resouce providers.\n\ncyborg obviously has its devices there too when that is deployed.\n\nim not sure if other do this today but neutorn was the first.","commit_id":"184e10fef0e0b99b9b0e483b03894bc3d3cb858c"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"b65e76bcec2f19ab2748359755a810cf3e0dbdd3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a89ab8c2_5dc70a11","line":85,"in_reply_to":"a0753710_777e37af","updated":"2026-08-03 06:30:42.000000000","message":"I\u0027m also not a Placement expert, but IIUC we need to request the trait in the pci request groups because Cyborg creates its resource providers under the Nova root resource provider. Here is is a simple example from a devstack environment I have:\n\n```\n[cloud-user@jgilaber-cybrg-test ~]$ openstack resource provider list\n+--------------------------------------+----------------------------------+------------+--------------------------------------+--------------------------------------+\n| uuid                                 | name                             | generation | root_provider_uuid                   | parent_provider_uuid                 |\n+--------------------------------------+----------------------------------+------------+--------------------------------------+--------------------------------------+\n| b372ae8a-a4fe-4acb-af85-009ef9953283 | jgilaber-cybrg-test              |        327 | b372ae8a-a4fe-4acb-af85-009ef9953283 | None                                 |\n| 120c8006-0ca3-41d9-845f-c802b57fda50 | jgilaber-cybrg-test_0001:00:00.0 |          2 | b372ae8a-a4fe-4acb-af85-009ef9953283 | b372ae8a-a4fe-4acb-af85-009ef9953283 |\n| fe6d7dc1-142e-3add-b0c5-53d3ad0425e1 | jgilaber-cybrg-test_FakeDevice   |         10 | b372ae8a-a4fe-4acb-af85-009ef9953283 | b372ae8a-a4fe-4acb-af85-009ef9953283 |\n+--------------------------------------+----------------------------------+------------+--------------------------------------+--------------------------------------+\n```\n\n`jgilaber-cybrg-test` is the compute hostname and the root provider created by Nova, and the Cyborg ones have it as parent. If we rely only on requiring the trait in the root provider, we won\u0027t be able to distinguish pci devices from Nova from those coming from Cyborg. I\u0027ll add a comment covering this in the code as suggested","commit_id":"184e10fef0e0b99b9b0e483b03894bc3d3cb858c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4762c194a5cd09ca7afe50effd1da6a56cf2e5c1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2b320c6d_2c62c388","line":85,"in_reply_to":"a89ab8c2_5dc70a11","updated":"2026-08-03 16:21:11.000000000","message":"OK, I see. Sorry, for some reason I was thinking if the root was Nova-managed then everything underneath would also be but obviously that won\u0027t be the case when the compute node itself is under Nova but then devices on the compute node can be managed by other services. Thanks for making it clear.","commit_id":"184e10fef0e0b99b9b0e483b03894bc3d3cb858c"}],"nova/objects/request_spec.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d9e183b46b34a0be632fdffcec3068b17f7e8ac7","unresolved":true,"context_lines":[{"line_number":593,"context_line":"                    resources\u003d{"},{"line_number":594,"context_line":"                        self._rc_from_request(spec): 1"},{"line_number":595,"context_line":"                    },"},{"line_number":596,"context_line":"                    required_traits\u003dself._traits_from_request(spec) | {"},{"line_number":597,"context_line":"                        os_traits.OWNER_NOVA},"},{"line_number":598,"context_line":"                    # TODO(gibi): later we can add support for complex trait"},{"line_number":599,"context_line":"                    # queries here including forbidden_traits."},{"line_number":600,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":7,"id":"c15b23b9_d6a78491","line":597,"range":{"start_line":596,"start_character":36,"end_line":597,"end_character":45},"updated":"2026-07-13 13:56:02.000000000","message":"this is clever but i woudl prefer not to or the sets inlinek like this\n\ncan you pull this out our perhaps inlining  it in _traits_from_request would be cleaner\n\nthe thing is you shoudl not be includign this trati request for the pci groups uncondtionally\n\nits only valid to include this once all compute nodes are upgraded\nand that two complicated to do inline","commit_id":"59413991c47574910fcd3595f4f432d7510f81fc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"f873ea132ca758ab1f72434ad87a29b37c794be4","unresolved":true,"context_lines":[{"line_number":593,"context_line":"                    resources\u003d{"},{"line_number":594,"context_line":"                        self._rc_from_request(spec): 1"},{"line_number":595,"context_line":"                    },"},{"line_number":596,"context_line":"                    required_traits\u003dself._traits_from_request(spec) | {"},{"line_number":597,"context_line":"                        os_traits.OWNER_NOVA},"},{"line_number":598,"context_line":"                    # TODO(gibi): later we can add support for complex trait"},{"line_number":599,"context_line":"                    # queries here including forbidden_traits."},{"line_number":600,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":7,"id":"f73e92c1_6ede3b22","line":597,"range":{"start_line":596,"start_character":36,"end_line":597,"end_character":45},"in_reply_to":"c15b23b9_d6a78491","updated":"2026-07-13 15:35:59.000000000","message":"ack, I\u0027ve added a check for the compute version and add the owner trait conditionally now","commit_id":"59413991c47574910fcd3595f4f432d7510f81fc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d9351a302259d82cd3c3e73622ae2f59f7f6bb58","unresolved":false,"context_lines":[{"line_number":593,"context_line":"                    resources\u003d{"},{"line_number":594,"context_line":"                        self._rc_from_request(spec): 1"},{"line_number":595,"context_line":"                    },"},{"line_number":596,"context_line":"                    required_traits\u003dself._traits_from_request(spec) | {"},{"line_number":597,"context_line":"                        os_traits.OWNER_NOVA},"},{"line_number":598,"context_line":"                    # TODO(gibi): later we can add support for complex trait"},{"line_number":599,"context_line":"                    # queries here including forbidden_traits."},{"line_number":600,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":7,"id":"591e8415_8eaae33d","line":597,"range":{"start_line":596,"start_character":36,"end_line":597,"end_character":45},"in_reply_to":"f73e92c1_6ede3b22","updated":"2026-07-29 09:48:19.000000000","message":"Done","commit_id":"59413991c47574910fcd3595f4f432d7510f81fc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"67969c100b34dcd33d5b71dd2dc5b671bed36ad0","unresolved":true,"context_lines":[{"line_number":586,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":587,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"            required_traits \u003d self._traits_from_request(spec)"},{"line_number":590,"context_line":"            if use_owner_nova:"},{"line_number":591,"context_line":"                required_traits \u003d required_traits | {os_traits.OWNER_NOVA}"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            for i in range(pci_request.count):"},{"line_number":594,"context_line":"                rg \u003d objects.RequestGroup("},{"line_number":595,"context_line":"                    use_same_provider\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":10,"id":"f093c98a_28307418","line":592,"range":{"start_line":589,"start_character":1,"end_line":592,"end_character":1},"updated":"2026-07-28 20:41:54.000000000","message":"OK you split the usage of the viable and its definition to avoid checking the min version inside the loop over the requests and you calualting the requried traits before the loop over the count when generating the request groups\n\n\nthat checks out.","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d9351a302259d82cd3c3e73622ae2f59f7f6bb58","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            # defaults group_policy to none if it is not specified in the"},{"line_number":587,"context_line":"            # flavor and there are multiple RequestGroups in the RequestSpec."},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"            required_traits \u003d self._traits_from_request(spec)"},{"line_number":590,"context_line":"            if use_owner_nova:"},{"line_number":591,"context_line":"                required_traits \u003d required_traits | {os_traits.OWNER_NOVA}"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            for i in range(pci_request.count):"},{"line_number":594,"context_line":"                rg \u003d objects.RequestGroup("},{"line_number":595,"context_line":"                    use_same_provider\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":10,"id":"a7bd45c3_95829729","line":592,"range":{"start_line":589,"start_character":1,"end_line":592,"end_character":1},"in_reply_to":"f093c98a_28307418","updated":"2026-07-29 09:48:19.000000000","message":"Acknowledged","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"383739c7b9bdf67307cebf52702d70061bce2922","unresolved":true,"context_lines":[{"line_number":511,"context_line":"        min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":512,"context_line":"            self._context, [\u0027nova-compute\u0027])"},{"line_number":513,"context_line":"        use_owner_nova \u003d min_version \u003e\u003d 73"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        for pci_request in self.pci_requests.requests:"},{"line_number":516,"context_line":"            if pci_request.source \u003d\u003d objects.InstancePCIRequest.NEUTRON_PORT:"},{"line_number":517,"context_line":"                # TODO(gibi): Handle neutron based PCI requests here in a later"}],"source_content_type":"text/x-python","patch_set":15,"id":"021da337_6e2f28ff","line":514,"updated":"2026-07-30 19:45:18.000000000","message":"I think this and the trait addition should not be in a RequestSpec method like this but rather in the conductor when scheduling begins.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":512,"context_line":"            self._context, [\u0027nova-compute\u0027])"},{"line_number":513,"context_line":"        use_owner_nova \u003d min_version \u003e\u003d 73"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        for pci_request in self.pci_requests.requests:"},{"line_number":516,"context_line":"            if pci_request.source \u003d\u003d objects.InstancePCIRequest.NEUTRON_PORT:"},{"line_number":517,"context_line":"                # TODO(gibi): Handle neutron based PCI requests here in a later"}],"source_content_type":"text/x-python","patch_set":15,"id":"132b503e_7f7d7f57","line":514,"in_reply_to":"021da337_6e2f28ff","updated":"2026-07-31 09:35:58.000000000","message":"Done","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":512,"context_line":"            self._context, [\u0027nova-compute\u0027])"},{"line_number":513,"context_line":"        use_owner_nova \u003d min_version \u003e\u003d 73"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        for pci_request in self.pci_requests.requests:"},{"line_number":516,"context_line":"            if pci_request.source \u003d\u003d objects.InstancePCIRequest.NEUTRON_PORT:"},{"line_number":517,"context_line":"                # TODO(gibi): Handle neutron based PCI requests here in a later"}],"source_content_type":"text/x-python","patch_set":15,"id":"aa0698e0_3c4c6294","line":514,"in_reply_to":"021da337_6e2f28ff","updated":"2026-07-31 09:35:58.000000000","message":"Done","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"}],"nova/scheduler/request_filter.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"67969c100b34dcd33d5b71dd2dc5b671bed36ad0","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Cached result for owner_nova_filter: None means not yet checked,"},{"line_number":33,"context_line":"# True/False is the cached outcome. Restart the scheduler to re-check."},{"line_number":34,"context_line":"_OWNER_NOVA_ALL_COMPUTES_READY \u003d None"},{"line_number":35,"context_line":"TENANT_METADATA_KEY \u003d \u0027filter_tenant_id\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3890d03e_80495d64","line":34,"updated":"2026-07-28 20:41:54.000000000","message":"this works and we do it in a lot of place but insead of doing that its often cleaer to just have a fucntion that uses the functools cache decorator\n```\n@functools.cache\ndef should_filter_by_owner(context):\n   min_version \u003d objects.service.get_minimum_version_all_cells(\n            ctxt, [\u0027nova-compute\u0027])\n   result \u003d min_version \u003e\u003d 73\n   if not result:\n         LOG.warning(\n                \u0027owner_nova_filter request filter disabled: not all \u0027\n                \u0027nova-compute services are upgraded \u0027\n                \u0027(min_version\u003d%d, need 73). Restart the scheduler \u0027\n                \u0027after upgrading all computes.\u0027,\n                min_version)\n   return result\n   ```\nthat way we dont have to manage module leavel cosntnat manually and we will only log the warning once","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d9351a302259d82cd3c3e73622ae2f59f7f6bb58","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Cached result for owner_nova_filter: None means not yet checked,"},{"line_number":33,"context_line":"# True/False is the cached outcome. Restart the scheduler to re-check."},{"line_number":34,"context_line":"_OWNER_NOVA_ALL_COMPUTES_READY \u003d None"},{"line_number":35,"context_line":"TENANT_METADATA_KEY \u003d \u0027filter_tenant_id\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5d091ff5_051af971","line":34,"in_reply_to":"3890d03e_80495d64","updated":"2026-07-29 09:48:19.000000000","message":"thanks that does look cleaner that having a global variable, I\u0027ve changed the code to use the suggested function","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bfa291c032fb3f627810973e0c9e2db864c6448d","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Cached result for owner_nova_filter: None means not yet checked,"},{"line_number":33,"context_line":"# True/False is the cached outcome. Restart the scheduler to re-check."},{"line_number":34,"context_line":"_OWNER_NOVA_ALL_COMPUTES_READY \u003d None"},{"line_number":35,"context_line":"TENANT_METADATA_KEY \u003d \u0027filter_tenant_id\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"781cb27b_ece906b9","line":34,"in_reply_to":"5d091ff5_051af971","updated":"2026-07-30 16:40:03.000000000","message":"Done","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"67969c100b34dcd33d5b71dd2dc5b671bed36ad0","unresolved":true,"context_lines":[{"line_number":526,"context_line":"    PCI device request groups get OWNER_NOVA at creation time in"},{"line_number":527,"context_line":"    generate_request_groups_from_pci_requests()."},{"line_number":528,"context_line":"    \"\"\""},{"line_number":529,"context_line":"    global _OWNER_NOVA_ALL_COMPUTES_READY"},{"line_number":530,"context_line":"    if _OWNER_NOVA_ALL_COMPUTES_READY is None:"},{"line_number":531,"context_line":"        min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":532,"context_line":"            ctxt, [\u0027nova-compute\u0027])"},{"line_number":533,"context_line":"        _OWNER_NOVA_ALL_COMPUTES_READY \u003d min_version \u003e\u003d 73"},{"line_number":534,"context_line":"        if not _OWNER_NOVA_ALL_COMPUTES_READY:"},{"line_number":535,"context_line":"            LOG.warning("},{"line_number":536,"context_line":"                \u0027owner_nova_filter request filter disabled: not all \u0027"},{"line_number":537,"context_line":"                \u0027nova-compute services are upgraded \u0027"},{"line_number":538,"context_line":"                \u0027(min_version\u003d%d, need 73). Restart the scheduler \u0027"},{"line_number":539,"context_line":"                \u0027after upgrading all computes.\u0027,"},{"line_number":540,"context_line":"                min_version)"},{"line_number":541,"context_line":"    if not _OWNER_NOVA_ALL_COMPUTES_READY:"},{"line_number":542,"context_line":"        return False"},{"line_number":543,"context_line":"    request_spec.root_required.add(os_traits.OWNER_NOVA)"},{"line_number":544,"context_line":"    LOG.debug("},{"line_number":545,"context_line":"        \u0027owner_nova_filter request filter added required \u0027"},{"line_number":546,"context_line":"        \u0027trait %s to root provider\u0027,"},{"line_number":547,"context_line":"        os_traits.OWNER_NOVA)"},{"line_number":548,"context_line":"    return True"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"ALL_REQUEST_FILTERS \u003d ["}],"source_content_type":"text/x-python","patch_set":10,"id":"9c8418c2_b0539212","line":548,"range":{"start_line":529,"start_character":0,"end_line":548,"end_character":15},"updated":"2026-07-28 20:41:54.000000000","message":"```suggestion\n    \n    if not should_filter_by_owner(ctxt):\n        return False\n    request_spec.root_required.add(os_traits.OWNER_NOVA)\n    LOG.debug(\n        \u0027owner_nova_filter request filter added required \u0027\n        \u0027trait %s to root provider\u0027,\n        os_traits.OWNER_NOVA)\n    return True\n```","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d9351a302259d82cd3c3e73622ae2f59f7f6bb58","unresolved":false,"context_lines":[{"line_number":526,"context_line":"    PCI device request groups get OWNER_NOVA at creation time in"},{"line_number":527,"context_line":"    generate_request_groups_from_pci_requests()."},{"line_number":528,"context_line":"    \"\"\""},{"line_number":529,"context_line":"    global _OWNER_NOVA_ALL_COMPUTES_READY"},{"line_number":530,"context_line":"    if _OWNER_NOVA_ALL_COMPUTES_READY is None:"},{"line_number":531,"context_line":"        min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":532,"context_line":"            ctxt, [\u0027nova-compute\u0027])"},{"line_number":533,"context_line":"        _OWNER_NOVA_ALL_COMPUTES_READY \u003d min_version \u003e\u003d 73"},{"line_number":534,"context_line":"        if not _OWNER_NOVA_ALL_COMPUTES_READY:"},{"line_number":535,"context_line":"            LOG.warning("},{"line_number":536,"context_line":"                \u0027owner_nova_filter request filter disabled: not all \u0027"},{"line_number":537,"context_line":"                \u0027nova-compute services are upgraded \u0027"},{"line_number":538,"context_line":"                \u0027(min_version\u003d%d, need 73). Restart the scheduler \u0027"},{"line_number":539,"context_line":"                \u0027after upgrading all computes.\u0027,"},{"line_number":540,"context_line":"                min_version)"},{"line_number":541,"context_line":"    if not _OWNER_NOVA_ALL_COMPUTES_READY:"},{"line_number":542,"context_line":"        return False"},{"line_number":543,"context_line":"    request_spec.root_required.add(os_traits.OWNER_NOVA)"},{"line_number":544,"context_line":"    LOG.debug("},{"line_number":545,"context_line":"        \u0027owner_nova_filter request filter added required \u0027"},{"line_number":546,"context_line":"        \u0027trait %s to root provider\u0027,"},{"line_number":547,"context_line":"        os_traits.OWNER_NOVA)"},{"line_number":548,"context_line":"    return True"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"ALL_REQUEST_FILTERS \u003d ["}],"source_content_type":"text/x-python","patch_set":10,"id":"358c80f9_cc1fef51","line":548,"range":{"start_line":529,"start_character":0,"end_line":548,"end_character":15},"in_reply_to":"9c8418c2_b0539212","updated":"2026-07-29 09:48:19.000000000","message":"Done","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"67969c100b34dcd33d5b71dd2dc5b671bed36ad0","unresolved":true,"context_lines":[{"line_number":563,"context_line":"    virtio_sound_filter,"},{"line_number":564,"context_line":"    tpm_secret_security_filter,"},{"line_number":565,"context_line":"    owner_nova_filter,"},{"line_number":566,"context_line":"]"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"def process_reqspec(ctxt, request_spec):"}],"source_content_type":"text/x-python","patch_set":10,"id":"d4cb8db8_67a0f1f1","line":566,"updated":"2026-07-28 20:41:54.000000000","message":"the rest looks fine\n\nill pick up the review form here again tomorrow","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bfa291c032fb3f627810973e0c9e2db864c6448d","unresolved":false,"context_lines":[{"line_number":563,"context_line":"    virtio_sound_filter,"},{"line_number":564,"context_line":"    tpm_secret_security_filter,"},{"line_number":565,"context_line":"    owner_nova_filter,"},{"line_number":566,"context_line":"]"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"def process_reqspec(ctxt, request_spec):"}],"source_content_type":"text/x-python","patch_set":10,"id":"890718fd_95df37d6","line":566,"in_reply_to":"d4cb8db8_67a0f1f1","updated":"2026-07-30 16:40:03.000000000","message":"Acknowledged","commit_id":"2a7260c7a58b4eab18a490716f35b0631e1ef1fe"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"383739c7b9bdf67307cebf52702d70061bce2922","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"TENANT_METADATA_KEY \u003d \u0027filter_tenant_id\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"87e39cbb_9cd03f5c","line":31,"updated":"2026-07-30 19:45:18.000000000","message":"Unnecessary whitespace change.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"TENANT_METADATA_KEY \u003d \u0027filter_tenant_id\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"65a77b1b_7c2c126f","line":31,"in_reply_to":"87e39cbb_9cd03f5c","updated":"2026-07-31 09:35:58.000000000","message":"Done","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"383739c7b9bdf67307cebf52702d70061bce2922","unresolved":true,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"6bf46c5b_3ff7673e","line":38,"updated":"2026-07-30 19:45:18.000000000","message":"This is kind of an anti-pattern IMHO to put a 1) database call and 2) multi-cell database call into a scheduling filter. I think the likely best fit for both the service version check and the trait addition will be in conductor rather than here.\n\nAlso, just noting that the @functools.cache here will not end up saving anything for a future call as each RequestContext is a new object with a different object hash. That said, I think it is correct/desired to check the service version per request as minimum nova-compute version could change during a rolling upgrade across requests.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"82bba7e807250ada70048b204583567290026885","unresolved":true,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"5a80011c_2dc920d1","line":38,"in_reply_to":"02e0cf15_2134ddf8","updated":"2026-08-04 16:56:30.000000000","message":"I guess I see your point but I don\u0027t think it\u0027s usual to go back and restart your scheduler(s) after a rolling upgrade is completed ... that is, I\u0027m not sure how or why someone would think to do that. Maybe my working memory is outdated and due to various caching practices in the control plane you have to 1) upgrade control plane 2) update computes over time 3) restart the control plane again?\n\nI agree we don\u0027t need to decide about caching in this patch.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7bf3686acfd3b5983e9d538427e9c526ef3875a0","unresolved":true,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"02e0cf15_2134ddf8","line":38,"in_reply_to":"481e7924_7382fbe4","updated":"2026-08-04 16:47:42.000000000","message":"well rooling upgrade are part of why i dont want to see the live versions.\ni think its safer if we only see the final sate after an exiplcit restart but\nfor now i think we can defer cache or no cache to a folloup patch\n\ni kind fo feel like we shoudl be disabling the caching in the schduler by removing \n\nhttps://github.com/openstack/nova/blob/master/nova/cmd/scheduler.py#L45\n\nor always using the cache but not a mix of both.\n\nreconciling that is out of scope this change and arguable a latent bug","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fd099e67c753aae8fff934d4c1000c6854938c9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"013308e5_c5a8806f","line":38,"in_reply_to":"5a80011c_2dc920d1","updated":"2026-08-04 19:16:18.000000000","message":"Acknowledged","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":true,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"b7878b43_d49f861c","line":38,"in_reply_to":"6bf46c5b_3ff7673e","updated":"2026-07-31 09:35:58.000000000","message":"done, I\u0027ve moved it to the conductor in patchset 16","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"825e6e87009b18d6a73c28bbe9dce4cdd2a05498","unresolved":true,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"481e7924_7382fbe4","line":38,"in_reply_to":"ad6aea08_86cfe0d4","updated":"2026-08-04 15:37:03.000000000","message":"I initially thought that too but I think we really do need to check per request because during a rolling upgrade, compute service versions could be changing in \"real time\" and can\u0027t really assume to cache anything until nodes are added.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"624aea30655c2f04c76019c7763c8f46146e5227","unresolved":true,"context_lines":[{"line_number":35,"context_line":"@functools.cache"},{"line_number":36,"context_line":"def should_filter_by_owner(context):"},{"line_number":37,"context_line":"    min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":38,"context_line":"             context, [\u0027nova-compute\u0027])"},{"line_number":39,"context_line":"    result \u003d min_version \u003e\u003d 73"},{"line_number":40,"context_line":"    if not result:"},{"line_number":41,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":15,"id":"ad6aea08_86cfe0d4","line":38,"in_reply_to":"b7878b43_d49f861c","updated":"2026-08-04 11:31:07.000000000","message":"i dont htink we shoudl have to check this per request as we need a schduelr restart to clear other caches when node are added if i recall but im not going to block on that.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":true,"context_lines":[{"line_number":511,"context_line":"    :returns: A set of PCI request_id UUIDs, or empty set if"},{"line_number":512,"context_line":"        there are no PCI requests."},{"line_number":513,"context_line":"    \"\"\""},{"line_number":514,"context_line":"    if (not request_spec.obj_attr_is_set(\u0027pci_requests\u0027) or"},{"line_number":515,"context_line":"            not request_spec.pci_requests or"},{"line_number":516,"context_line":"            not request_spec.pci_requests.requests):"},{"line_number":517,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":19,"id":"586f5277_5f033751","line":514,"range":{"start_line":514,"start_character":8,"end_line":514,"end_character":56},"updated":"2026-08-04 13:25:53.000000000","message":"nit: this is a little nicer and does the same thing\n```suggestion\n    if (\u0027pci_requests\u0027 not in request_spec or\n```","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6648818ad4c36f73bb6109a09be5c9a3d1c0e02f","unresolved":false,"context_lines":[{"line_number":511,"context_line":"    :returns: A set of PCI request_id UUIDs, or empty set if"},{"line_number":512,"context_line":"        there are no PCI requests."},{"line_number":513,"context_line":"    \"\"\""},{"line_number":514,"context_line":"    if (not request_spec.obj_attr_is_set(\u0027pci_requests\u0027) or"},{"line_number":515,"context_line":"            not request_spec.pci_requests or"},{"line_number":516,"context_line":"            not request_spec.pci_requests.requests):"},{"line_number":517,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":19,"id":"4dc40b8a_8c6ef71e","line":514,"range":{"start_line":514,"start_character":8,"end_line":514,"end_character":56},"in_reply_to":"586f5277_5f033751","updated":"2026-08-04 17:12:29.000000000","message":"Done","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"34f29e568e806ba8d560e35a56829c59f91bd0d0","unresolved":false,"context_lines":[{"line_number":511,"context_line":"    :returns: A set of PCI request_id UUIDs, or empty set if"},{"line_number":512,"context_line":"        there are no PCI requests."},{"line_number":513,"context_line":"    \"\"\""},{"line_number":514,"context_line":"    if (not request_spec.obj_attr_is_set(\u0027pci_requests\u0027) or"},{"line_number":515,"context_line":"            not request_spec.pci_requests or"},{"line_number":516,"context_line":"            not request_spec.pci_requests.requests):"},{"line_number":517,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":19,"id":"ca034a27_03c35cad","line":514,"range":{"start_line":514,"start_character":8,"end_line":514,"end_character":56},"in_reply_to":"586f5277_5f033751","updated":"2026-08-04 17:07:02.000000000","message":"Done","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":false,"context_lines":[{"line_number":518,"context_line":"    return {"},{"line_number":519,"context_line":"        req.request_id"},{"line_number":520,"context_line":"        for req in request_spec.pci_requests.requests"},{"line_number":521,"context_line":"        if req.source !\u003d"},{"line_number":522,"context_line":"        objects.InstancePCIRequest.NEUTRON_PORT and"},{"line_number":523,"context_line":"        req.request_id"},{"line_number":524,"context_line":"    }"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"62cda8c8_28c37c49","line":523,"range":{"start_line":521,"start_character":4,"end_line":523,"end_character":22},"updated":"2026-08-04 13:25:53.000000000","message":"hum, so this is correct for now because we do not currently report neutron sriov port to placement, cybrog actully does supprot that today however it wont work with\nqos, we shoudl add to our list of tech debt to resolve in the long term\n\nthat out of scope fo this patch but this exclution reminded me about that detail.","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    }"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"def _should_filter_by_owner(context):"},{"line_number":528,"context_line":"    \"\"\"Check if all computes support the OWNER_NOVA trait."},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    Queries the minimum nova-compute service version across"},{"line_number":531,"context_line":"    all cells. Returns True if all computes are at version"},{"line_number":532,"context_line":"    MIN_COMPUTE_VERSION_OWNER_TRAIT or above."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    .. note::"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"       Caching via ``functools.cache`` was considered but is"},{"line_number":537,"context_line":"       not used here because each RequestContext is a new"},{"line_number":538,"context_line":"       object, making the cache ineffective. Checking"},{"line_number":539,"context_line":"       per-request is correct for rolling upgrades anyway."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    :param context: nova auth RequestContext"},{"line_number":542,"context_line":"    :returns: True if all computes are upgraded, False"},{"line_number":543,"context_line":"        otherwise."},{"line_number":544,"context_line":"    \"\"\""},{"line_number":545,"context_line":"    min_version \u003d ("},{"line_number":546,"context_line":"        objects.service.get_minimum_version_all_cells("},{"line_number":547,"context_line":"            context, [\u0027nova-compute\u0027]))"},{"line_number":548,"context_line":"    if min_version \u003c MIN_COMPUTE_VERSION_OWNER_TRAIT:"},{"line_number":549,"context_line":"        LOG.warning("},{"line_number":550,"context_line":"            \u0027OWNER_NOVA trait not added to scheduling request: \u0027"},{"line_number":551,"context_line":"            \u0027not all nova-compute services are upgraded \u0027"},{"line_number":552,"context_line":"            \u0027(min_version\u003d%d, need %d).\u0027,"},{"line_number":553,"context_line":"            min_version, MIN_COMPUTE_VERSION_OWNER_TRAIT)"},{"line_number":554,"context_line":"        return False"},{"line_number":555,"context_line":"    return True"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"@trace_request_filter"},{"line_number":559,"context_line":"def owner_nova_filter(ctxt, request_spec):"}],"source_content_type":"text/x-python","patch_set":19,"id":"a14f6740_111a07f9","line":556,"range":{"start_line":527,"start_character":0,"end_line":556,"end_character":1},"updated":"2026-08-04 13:25:53.000000000","message":"melaine was right about the context object invladting the cache\n\nthis is a short term upgrade pain and the check can go away in 2027.2 in any case but i had hoped to avoid the scater gather on every schduign request but that is also better then a placement fallback query IMO so im not going to block on this.\n\nbut  the scheduler has a dedicated min service version cache which is alwasy enabled \n\nhttps://github.com/openstack/nova/blob/39dc667a1f9a7c12814f5892b900462560b1a229/nova/cmd/scheduler.py#L45\nhttps://github.com/openstack/nova/blob/39dc667a1f9a7c12814f5892b900462560b1a229/nova/objects/service.py#L346-L347\nhttps://github.com/openstack/nova/blob/39dc667a1f9a7c12814f5892b900462560b1a229/nova/objects/service.py#L583-L619\n\nand we are bypassing that since  objects.service.get_minimum_version_all_cells does not use it.\n\nwhere as get_minimum_version_multi and get_minimum_version do use the cache if its enabled.\n\n\norginally get_minimum_version_all_cells just called get_minimum_version_multi and had optional caching\n\nhttps://github.com/openstack/nova/commit/af5ef8ee0b367d8357dd1b85edc5791ed3fe45e4\n\nthat was lost as a side effect of this refactor to do paralle scatter-gather requests\n\nhttps://github.com/openstack/nova/commit/5fe3a01b604c29b0961d19b44a873cca78891381#diff-c0b6a5928be3ac40200a2078b084341bb9187a12b1f959ad862e0038c9029193\n\nthere was no direct dicussion of this in the review but dan did ad this code comment\n\nhttps://github.com/openstack/nova/blob/39dc667a1f9a7c12814f5892b900462560b1a229/nova/objects/service.py#L645-L648\n\n```\n    # NOTE(danms): Instead of using Service.get_minimum_version_multi(), we\n    # replicate the call directly to the underlying DB method here because\n    # we want to defeat the caching and we need to filter non-present\n    # services differently from the single-cell method.\n```\n\nim not sure that defating the caching is desirebale in this case given we have a way to trun it on or off but digging a little deaper the only time the schduler uses the cache is \nfor the cell fallback when we do not have db access ro the cell local query, https://github.com/openstack/nova/blob/master/nova/utils.py#L1024-L1044\n\nthe cach is primarlly used by the conductor today.\n\nso its not actually a regression to bypass it and go direct but with the intoduction of scatter gather the schduler stop using cachign for this 8 years ago.\n\ni think we can leave if this shoudl be cached or not out of scope of this change","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":519,"context_line":"        req.request_id"},{"line_number":520,"context_line":"        for req in request_spec.pci_requests.requests"},{"line_number":521,"context_line":"        if req.source !\u003d"},{"line_number":522,"context_line":"        objects.InstancePCIRequest.NEUTRON_PORT and"},{"line_number":523,"context_line":"        req.request_id"},{"line_number":524,"context_line":"    }"},{"line_number":525,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"09b58ca4_ff67f1c4","line":522,"range":{"start_line":522,"start_character":35,"end_line":522,"end_character":47},"updated":"2026-08-05 20:56:10.000000000","message":"The filtering out of NEUTRON_PORT request source seems to not be covered by any testing?","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":true,"context_lines":[{"line_number":519,"context_line":"        req.request_id"},{"line_number":520,"context_line":"        for req in request_spec.pci_requests.requests"},{"line_number":521,"context_line":"        if req.source !\u003d"},{"line_number":522,"context_line":"        objects.InstancePCIRequest.NEUTRON_PORT and"},{"line_number":523,"context_line":"        req.request_id"},{"line_number":524,"context_line":"    }"},{"line_number":525,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"40a8049a_05b067ab","line":522,"range":{"start_line":522,"start_character":35,"end_line":522,"end_character":47},"in_reply_to":"09b58ca4_ff67f1c4","updated":"2026-08-07 13:54:17.000000000","message":"Yeah, we need it","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":542,"context_line":"    :returns: True if all computes are upgraded, False"},{"line_number":543,"context_line":"        otherwise."},{"line_number":544,"context_line":"    \"\"\""},{"line_number":545,"context_line":"    min_version \u003d ("},{"line_number":546,"context_line":"        objects.service.get_minimum_version_all_cells("},{"line_number":547,"context_line":"            context, [\u0027nova-compute\u0027]))"},{"line_number":548,"context_line":"    if min_version \u003c MIN_COMPUTE_VERSION_OWNER_TRAIT:"}],"source_content_type":"text/x-python","patch_set":21,"id":"b916b67d_f8ae434a","line":545,"range":{"start_line":545,"start_character":18,"end_line":545,"end_character":19},"updated":"2026-08-05 20:56:10.000000000","message":"This is unnecessary and adds an extra line.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":true,"context_lines":[{"line_number":542,"context_line":"    :returns: True if all computes are upgraded, False"},{"line_number":543,"context_line":"        otherwise."},{"line_number":544,"context_line":"    \"\"\""},{"line_number":545,"context_line":"    min_version \u003d ("},{"line_number":546,"context_line":"        objects.service.get_minimum_version_all_cells("},{"line_number":547,"context_line":"            context, [\u0027nova-compute\u0027]))"},{"line_number":548,"context_line":"    if min_version \u003c MIN_COMPUTE_VERSION_OWNER_TRAIT:"}],"source_content_type":"text/x-python","patch_set":21,"id":"0a4af09e_fc688bc2","line":545,"range":{"start_line":545,"start_character":18,"end_line":545,"end_character":19},"in_reply_to":"b916b67d_f8ae434a","updated":"2026-08-07 13:54:17.000000000","message":"agreed, there is a lot of unnecessary black styling in this proposal","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":true,"context_lines":[{"line_number":591,"context_line":"    # placement."},{"line_number":592,"context_line":"    pci_req_ids \u003d _get_pci_request_ids(request_spec)"},{"line_number":593,"context_line":"    if pci_req_ids and request_spec.requested_resources:"},{"line_number":594,"context_line":"        for rg in request_spec.requested_resources:"},{"line_number":595,"context_line":"            if not rg.requester_id:"},{"line_number":596,"context_line":"                continue"},{"line_number":597,"context_line":"            prefix \u003d rg.requester_id.rsplit(\u0027-\u0027, 1)[0]"}],"source_content_type":"text/x-python","patch_set":21,"id":"54cc45ba_de084916","line":594,"updated":"2026-08-07 13:54:17.000000000","message":"nit: when pci_in_placement is False there won\u0027t be any PCI request groups in requested_resources (the generation is gated by that config), so this loop will always be a no-op in that case. Not a real performance concern given the DB call above, but worth a brief comment explaining why the loop is harmless when PCI-in-Placement is disabled.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":593,"context_line":"    if pci_req_ids and request_spec.requested_resources:"},{"line_number":594,"context_line":"        for rg in request_spec.requested_resources:"},{"line_number":595,"context_line":"            if not rg.requester_id:"},{"line_number":596,"context_line":"                continue"},{"line_number":597,"context_line":"            prefix \u003d rg.requester_id.rsplit(\u0027-\u0027, 1)[0]"},{"line_number":598,"context_line":"            if prefix in pci_req_ids:"},{"line_number":599,"context_line":"                rg.required_traits.add(os_traits.OWNER_NOVA)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9d6f3606_fc908d87","line":596,"updated":"2026-08-05 20:56:10.000000000","message":"It looks like this code branch is not covered by any testing.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":true,"context_lines":[{"line_number":593,"context_line":"    if pci_req_ids and request_spec.requested_resources:"},{"line_number":594,"context_line":"        for rg in request_spec.requested_resources:"},{"line_number":595,"context_line":"            if not rg.requester_id:"},{"line_number":596,"context_line":"                continue"},{"line_number":597,"context_line":"            prefix \u003d rg.requester_id.rsplit(\u0027-\u0027, 1)[0]"},{"line_number":598,"context_line":"            if prefix in pci_req_ids:"},{"line_number":599,"context_line":"                rg.required_traits.add(os_traits.OWNER_NOVA)"}],"source_content_type":"text/x-python","patch_set":21,"id":"669539cd_ec9eaaa4","line":596,"in_reply_to":"9d6f3606_fc908d87","updated":"2026-08-07 13:54:17.000000000","message":"Yup","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e74faf5cefa689335b6ead002e526a617729b36b","unresolved":true,"context_lines":[{"line_number":601,"context_line":"            \u0027Added required trait %s to PCI request \u0027"},{"line_number":602,"context_line":"            \u0027groups in request spec\u0027, os_traits.OWNER_NOVA)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    return True"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"ALL_REQUEST_FILTERS \u003d ["}],"source_content_type":"text/x-python","patch_set":21,"id":"0ce90f16_50c67740","line":604,"updated":"2026-08-07 13:54:17.000000000","message":"I don\u0027t see any test about the returned values.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"}],"nova/scheduler/utils.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"383739c7b9bdf67307cebf52702d70061bce2922","unresolved":true,"context_lines":[{"line_number":682,"context_line":""},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"def request_spec_for_limits("},{"line_number":685,"context_line":"    context, flavor, is_bfv, port_resource_requests\u003dNone,"},{"line_number":686,"context_line":"    dp_request_groups\u003dNone,"},{"line_number":687,"context_line":"):"},{"line_number":688,"context_line":"    \"\"\"Build a RequestSpec for unified limits quota enforcement."}],"source_content_type":"text/x-python","patch_set":15,"id":"417145c9_bf1711f6","line":685,"updated":"2026-07-30 19:45:18.000000000","message":"And if we move the service version check to conductor we will not need to add the context here.","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":false,"context_lines":[{"line_number":682,"context_line":""},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"def request_spec_for_limits("},{"line_number":685,"context_line":"    context, flavor, is_bfv, port_resource_requests\u003dNone,"},{"line_number":686,"context_line":"    dp_request_groups\u003dNone,"},{"line_number":687,"context_line":"):"},{"line_number":688,"context_line":"    \"\"\"Build a RequestSpec for unified limits quota enforcement."}],"source_content_type":"text/x-python","patch_set":15,"id":"22a35309_bebdd44e","line":685,"in_reply_to":"417145c9_bf1711f6","updated":"2026-07-31 09:35:58.000000000","message":"Done","commit_id":"7dd6cde72f80555368bb31211ad08fe34c71c04d"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dc5dad035b050f7d246d97e4721d656cd596899","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from nova import objects"},{"line_number":41,"context_line":"from nova.objects import base as objects_base"},{"line_number":42,"context_line":"from nova import rpc"},{"line_number":43,"context_line":"from nova.scheduler import request_filter as sched_request_filter"},{"line_number":44,"context_line":"from nova import test"},{"line_number":45,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":46,"context_line":"from nova.tests.functional.api import client as api_client"}],"source_content_type":"text/x-python","patch_set":13,"id":"a7248c83_aa73f8ad","line":43,"updated":"2026-07-30 10:12:43.000000000","message":"pep8: F401 \u0027nova.scheduler.request_filter as sched_request_filter\u0027 imported but unused","commit_id":"a3f059802376689ffe5395c22e4f9b0879ca551f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d50d3684b0176cb748bcecdd6f4073d2e4671b3","unresolved":true,"context_lines":[{"line_number":1412,"context_line":""},{"line_number":1413,"context_line":"    def setUp(self):"},{"line_number":1414,"context_line":"        super(_IntegratedTestBase, self).setUp()"},{"line_number":1415,"context_line":"        sched_request_filter.cache_clear()"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"        if self.CAST_AS_CALL:"},{"line_number":1418,"context_line":"            self.useFixture(nova_fixtures.CastAsCallFixture(self))"}],"source_content_type":"text/x-python","patch_set":14,"id":"695b0f2a_15b7e079","line":1415,"updated":"2026-07-30 15:47:36.000000000","message":"this shoudl be in the base test case rather then here.","commit_id":"b3d5a300bef636cbddcce5a1872fbf9c62990621"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8800dcab0e7a1e61795880d476836f502e8d8526","unresolved":true,"context_lines":[{"line_number":1412,"context_line":""},{"line_number":1413,"context_line":"    def setUp(self):"},{"line_number":1414,"context_line":"        super(_IntegratedTestBase, self).setUp()"},{"line_number":1415,"context_line":"        sched_request_filter.cache_clear()"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"        if self.CAST_AS_CALL:"},{"line_number":1418,"context_line":"            self.useFixture(nova_fixtures.CastAsCallFixture(self))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aca8e9c_35360951","line":1415,"in_reply_to":"695b0f2a_15b7e079","updated":"2026-07-30 16:38:41.000000000","message":"AttributeError: module \u0027nova.scheduler.request_filter\u0027 has no attribute \u0027cache_clear\u0027\n \n that is not the right fucntion to clear\n \n it shoudl be sched_request_filter.should_filter_by_owner.cache_clear()\n \n https://review.opendev.org/c/openstack/nova/+/994299/14/nova/scheduler/request_filter.py#36","commit_id":"b3d5a300bef636cbddcce5a1872fbf9c62990621"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6111ff75c6970c2422a31fd794882146da12f22a","unresolved":false,"context_lines":[{"line_number":1412,"context_line":""},{"line_number":1413,"context_line":"    def setUp(self):"},{"line_number":1414,"context_line":"        super(_IntegratedTestBase, self).setUp()"},{"line_number":1415,"context_line":"        sched_request_filter.cache_clear()"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"        if self.CAST_AS_CALL:"},{"line_number":1418,"context_line":"            self.useFixture(nova_fixtures.CastAsCallFixture(self))"}],"source_content_type":"text/x-python","patch_set":14,"id":"92b60d65_022dca63","line":1415,"in_reply_to":"7aca8e9c_35360951","updated":"2026-07-31 09:35:58.000000000","message":"Done","commit_id":"b3d5a300bef636cbddcce5a1872fbf9c62990621"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":true,"context_lines":[{"line_number":883,"context_line":"    def _set_provider_traits(self, rp_uuid, traits):"},{"line_number":884,"context_line":"        \"\"\"Set traits for the specified provider."},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        This will overwrite any existing traits, but preserves"},{"line_number":887,"context_line":"        infrastructure traits (OWNER_NOVA, COMPUTE_NODE) that the"},{"line_number":888,"context_line":"        resource tracker always sets on root compute node"},{"line_number":889,"context_line":"        providers. This matches production behavior where the RT"},{"line_number":890,"context_line":"        periodic re-adds these traits after any external change."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        For non-root providers (e.g. child device RPs), these"}],"source_content_type":"text/x-python","patch_set":19,"id":"c62516b9_d22137f2","line":889,"range":{"start_line":886,"start_character":7,"end_line":889,"end_character":18},"updated":"2026-08-04 13:25:53.000000000","message":"hum, so we allow any one to add CUSTOM_ traits to the nova created\nresouce providre at any time and for CUSTOM_ nova is not allowed to remove them in gnereal but i guess we handel that externally an pre merge in the non nova creted traits before callign this.","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fd099e67c753aae8fff934d4c1000c6854938c9","unresolved":false,"context_lines":[{"line_number":883,"context_line":"    def _set_provider_traits(self, rp_uuid, traits):"},{"line_number":884,"context_line":"        \"\"\"Set traits for the specified provider."},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        This will overwrite any existing traits, but preserves"},{"line_number":887,"context_line":"        infrastructure traits (OWNER_NOVA, COMPUTE_NODE) that the"},{"line_number":888,"context_line":"        resource tracker always sets on root compute node"},{"line_number":889,"context_line":"        providers. This matches production behavior where the RT"},{"line_number":890,"context_line":"        periodic re-adds these traits after any external change."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        For non-root providers (e.g. child device RPs), these"}],"source_content_type":"text/x-python","patch_set":19,"id":"f40b49c2_4ec65d6d","line":889,"range":{"start_line":886,"start_character":7,"end_line":889,"end_character":18},"in_reply_to":"c62516b9_d22137f2","updated":"2026-08-04 19:16:18.000000000","message":"Acknowledged","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"}],"nova/tests/unit/scheduler/test_request_filter.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":829,"context_line":"        \u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":830,"context_line":"        autospec\u003dTrue)"},{"line_number":831,"context_line":"    def test_owner_nova_filter_adds_trait("},{"line_number":832,"context_line":"            self, mock_get_min_ver):"},{"line_number":833,"context_line":"        \"\"\"Test OWNER_NOVA trait is added when version is met.\"\"\""},{"line_number":834,"context_line":"        mock_get_min_ver.return_value \u003d ("},{"line_number":835,"context_line":"            request_filter.MIN_COMPUTE_VERSION_OWNER_TRAIT)"}],"source_content_type":"text/x-python","patch_set":21,"id":"bc984cba_140345f1","line":832,"updated":"2026-08-05 20:56:10.000000000","message":"There is some serious unnecessary over-wrapping of text lines happening in this file and perhaps others. Would really like to have everything re-flowed (by AI ... that is, I\u0027m not suggesting to do it by hand) to wrap at 79 characters, please.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":836,"context_line":"        reqspec \u003d objects.RequestSpec()"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"        request_filter.owner_nova_filter("},{"line_number":839,"context_line":"            self.context, reqspec)"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        self.assertIn("},{"line_number":842,"context_line":"            ot.OWNER_NOVA, reqspec.root_required)"}],"source_content_type":"text/x-python","patch_set":21,"id":"dd37a924_359c874d","line":839,"updated":"2026-08-05 20:56:10.000000000","message":"These tests should be asserting the return value of the filter as it is used to signify whether the filter \"ran\" or not.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":935,"context_line":"            use_same_provider\u003dTrue,"},{"line_number":936,"context_line":"            resources\u003d{\"CUSTOM_PCI_1234_ABCD\": 1},"},{"line_number":937,"context_line":"            required_traits\u003d{\"CUSTOM_FOO\"},"},{"line_number":938,"context_line":"        )"},{"line_number":939,"context_line":"        reqspec \u003d objects.RequestSpec("},{"line_number":940,"context_line":"            pci_requests\u003dobjects.InstancePCIRequests("},{"line_number":941,"context_line":"                requests\u003d[pci_req]),"}],"source_content_type":"text/x-python","patch_set":21,"id":"165322ca_e8a68e38","line":938,"updated":"2026-08-05 20:56:10.000000000","message":"Minor, but if this had one more PCI request group, it could verify that multiple groups get the trait applied if there are multiple.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5fe06ecfd4a50414ed9ed1512842b8ecf7b62258","unresolved":true,"context_lines":[{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        request_filter.owner_nova_filter("},{"line_number":1028,"context_line":"            self.context, reqspec)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        self.assertNotIn("},{"line_number":1031,"context_line":"            ot.OWNER_NOVA, reqspec.root_required)"},{"line_number":1032,"context_line":"        self.assertNotIn("}],"source_content_type":"text/x-python","patch_set":21,"id":"888e589a_ba606768","line":1029,"updated":"2026-08-05 20:56:10.000000000","message":"I think a previous version of the test did this but it would be good to assert the return value of the filter and also assert the logging of the warning.","commit_id":"8c3639cbf02184a1b9a93c0eec2ffa85f55a00e3"}],"releasenotes/notes/owner-nova-trait-5895fdabd90e404e.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Nova now reports the ``OWNER_NOVA`` trait on all resource providers"},{"line_number":5,"context_line":"    it manages in Placement. This includes root compute node providers"},{"line_number":6,"context_line":"    and child providers for pGPUs, memory encryption, and PCI devices."},{"line_number":7,"context_line":"    The conductor adds ``OWNER_NOVA`` as a required trait on the root"},{"line_number":8,"context_line":"    resource provider in scheduling requests once all nova-compute"},{"line_number":9,"context_line":"    services are upgraded. This ensures the scheduler only considers"},{"line_number":10,"context_line":"    Nova-managed resource providers, distinguishing them from"},{"line_number":11,"context_line":"    providers managed by other services such as Cyborg."},{"line_number":12,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"2d7db1cc_e720d4d8","line":9,"range":{"start_line":7,"start_character":2,"end_line":9,"end_character":27},"updated":"2026-08-04 13:25:53.000000000","message":"this is done in the schduelr not the conductor.\n\nalso the phasing is not reqlly clear\n\n\n\n```suggestion\n    The owner_nova_filter request prefilter adds ``OWNER_NOVA`` as a required\n    trait during schudling if all nova-compute services are upgraded.\n    This ensures the scheduler only considers\n```\n\nthe current phasing imples your adding the trait to the resouce provider but you are not\n\nyou are adding the traits as required as part fo the allcoation candiates query\nthe resouce providers are never modifed by the conductor or scheduler","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1043350fab3babd8567311e8876b355d2caed4b3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Nova now reports the ``OWNER_NOVA`` trait on all resource providers"},{"line_number":5,"context_line":"    it manages in Placement. This includes root compute node providers"},{"line_number":6,"context_line":"    and child providers for pGPUs, memory encryption, and PCI devices."},{"line_number":7,"context_line":"    The conductor adds ``OWNER_NOVA`` as a required trait on the root"},{"line_number":8,"context_line":"    resource provider in scheduling requests once all nova-compute"},{"line_number":9,"context_line":"    services are upgraded. This ensures the scheduler only considers"},{"line_number":10,"context_line":"    Nova-managed resource providers, distinguishing them from"},{"line_number":11,"context_line":"    providers managed by other services such as Cyborg."},{"line_number":12,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ba6c02e8_6a9fee9e","line":9,"range":{"start_line":7,"start_character":2,"end_line":9,"end_character":27},"in_reply_to":"2d7db1cc_e720d4d8","updated":"2026-08-04 16:51:45.000000000","message":"Acknowledged","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6648818ad4c36f73bb6109a09be5c9a3d1c0e02f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Nova now reports the ``OWNER_NOVA`` trait on all resource providers"},{"line_number":5,"context_line":"    it manages in Placement. This includes root compute node providers"},{"line_number":6,"context_line":"    and child providers for pGPUs, memory encryption, and PCI devices."},{"line_number":7,"context_line":"    The conductor adds ``OWNER_NOVA`` as a required trait on the root"},{"line_number":8,"context_line":"    resource provider in scheduling requests once all nova-compute"},{"line_number":9,"context_line":"    services are upgraded. This ensures the scheduler only considers"},{"line_number":10,"context_line":"    Nova-managed resource providers, distinguishing them from"},{"line_number":11,"context_line":"    providers managed by other services such as Cyborg."},{"line_number":12,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"9d84300e_f5afef56","line":9,"range":{"start_line":7,"start_character":2,"end_line":9,"end_character":27},"in_reply_to":"2d7db1cc_e720d4d8","updated":"2026-08-04 17:12:29.000000000","message":"thanks fixed, in the previous patchset I had moved the logic to the conductor and forgot to update this","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1f45f877d7771ff38256e11f89b109ec7e811750","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Nova now reports the ``OWNER_NOVA`` trait on all resource providers"},{"line_number":5,"context_line":"    it manages in Placement. This includes root compute node providers"},{"line_number":6,"context_line":"    and child providers for pGPUs, memory encryption, and PCI devices."},{"line_number":7,"context_line":"    The conductor adds ``OWNER_NOVA`` as a required trait on the root"},{"line_number":8,"context_line":"    resource provider in scheduling requests once all nova-compute"},{"line_number":9,"context_line":"    services are upgraded. This ensures the scheduler only considers"},{"line_number":10,"context_line":"    Nova-managed resource providers, distinguishing them from"},{"line_number":11,"context_line":"    providers managed by other services such as Cyborg."},{"line_number":12,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"224f7bad_97185ecc","line":9,"range":{"start_line":7,"start_character":2,"end_line":9,"end_character":27},"in_reply_to":"9d84300e_f5afef56","updated":"2026-08-04 18:45:47.000000000","message":"Done","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"015b311134bc92fb03911ef1bd7e663c7b9ae8da","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    The ``OWNER_NOVA`` trait scheduling requirement is version-gated"},{"line_number":15,"context_line":"    and only activates when all nova-compute services report service"},{"line_number":16,"context_line":"    version 73 or higher. The version check is performed per"},{"line_number":17,"context_line":"    scheduling request in the conductor. During a rolling upgrade,"},{"line_number":18,"context_line":"    a warning is logged for each request where the trait cannot be"},{"line_number":19,"context_line":"    added because not all computes are upgraded."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"01b51a3f_1549c668","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":39},"updated":"2026-08-04 13:25:53.000000000","message":"that not really correct _should_filter_by_owner\n\nhttps://review.opendev.org/c/openstack/nova/+/994299/19/nova/scheduler/request_filter.py#527\n\n\nis called in the schduler as part of the owner_nova_filter request fileter\n\nhttps://review.opendev.org/c/openstack/nova/+/994299/19/nova/scheduler/request_filter.py#578\n\nso this is not done in the conductor","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1043350fab3babd8567311e8876b355d2caed4b3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    The ``OWNER_NOVA`` trait scheduling requirement is version-gated"},{"line_number":15,"context_line":"    and only activates when all nova-compute services report service"},{"line_number":16,"context_line":"    version 73 or higher. The version check is performed per"},{"line_number":17,"context_line":"    scheduling request in the conductor. During a rolling upgrade,"},{"line_number":18,"context_line":"    a warning is logged for each request where the trait cannot be"},{"line_number":19,"context_line":"    added because not all computes are upgraded."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"348e76f0_54c515f5","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":39},"in_reply_to":"01b51a3f_1549c668","updated":"2026-08-04 16:51:45.000000000","message":"Acknowledged","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6648818ad4c36f73bb6109a09be5c9a3d1c0e02f","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    The ``OWNER_NOVA`` trait scheduling requirement is version-gated"},{"line_number":15,"context_line":"    and only activates when all nova-compute services report service"},{"line_number":16,"context_line":"    version 73 or higher. The version check is performed per"},{"line_number":17,"context_line":"    scheduling request in the conductor. During a rolling upgrade,"},{"line_number":18,"context_line":"    a warning is logged for each request where the trait cannot be"},{"line_number":19,"context_line":"    added because not all computes are upgraded."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"24561732_e9b3f2aa","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":39},"in_reply_to":"01b51a3f_1549c668","updated":"2026-08-04 17:12:29.000000000","message":"fixed, thanks","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1f45f877d7771ff38256e11f89b109ec7e811750","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    The ``OWNER_NOVA`` trait scheduling requirement is version-gated"},{"line_number":15,"context_line":"    and only activates when all nova-compute services report service"},{"line_number":16,"context_line":"    version 73 or higher. The version check is performed per"},{"line_number":17,"context_line":"    scheduling request in the conductor. During a rolling upgrade,"},{"line_number":18,"context_line":"    a warning is logged for each request where the trait cannot be"},{"line_number":19,"context_line":"    added because not all computes are upgraded."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"b9cb9e11_b5b028f5","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":39},"in_reply_to":"24561732_e9b3f2aa","updated":"2026-08-04 18:45:47.000000000","message":"Done","commit_id":"30ab45bef69943a45cb39c9cfec42b43d475302a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1043350fab3babd8567311e8876b355d2caed4b3","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Nova now reports the ``OWNER_NOVA`` trait on all resource providers"},{"line_number":5,"context_line":"    it manages in Placement. This includes root compute node providers"},{"line_number":6,"context_line":"    and child providers for pGPUs, memory encryption, and PCI devices."},{"line_number":7,"context_line":"    The oner_nova_filter request prefilter adds ``OWNER_NOVA`` as a"},{"line_number":8,"context_line":"    required trait during scheduling if all nova-compute services are"},{"line_number":9,"context_line":"    upgraded. This ensures the scheduler only considers"},{"line_number":10,"context_line":"    Nova-managed resource providers, distinguishing them from"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"71814d14_4ff2264b","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":24},"updated":"2026-08-04 16:51:45.000000000","message":"```suggestion\n    The owner_nova_filter request prefilter adds ``OWNER_NOVA`` as a\n```\n\nmissing `w`","commit_id":"e9365e229eb1ae46faaa36f7801ac4b17f463c03"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1f45f877d7771ff38256e11f89b109ec7e811750","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Nova now reports the ``OWNER_NOVA`` trait on all resource providers"},{"line_number":5,"context_line":"    it manages in Placement. This includes root compute node providers"},{"line_number":6,"context_line":"    and child providers for pGPUs, memory encryption, and PCI devices."},{"line_number":7,"context_line":"    The oner_nova_filter request prefilter adds ``OWNER_NOVA`` as a"},{"line_number":8,"context_line":"    required trait during scheduling if all nova-compute services are"},{"line_number":9,"context_line":"    upgraded. This ensures the scheduler only considers"},{"line_number":10,"context_line":"    Nova-managed resource providers, distinguishing them from"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"c6064e01_7d41b19e","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":24},"in_reply_to":"71814d14_4ff2264b","updated":"2026-08-04 18:45:47.000000000","message":"Done","commit_id":"e9365e229eb1ae46faaa36f7801ac4b17f463c03"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1043350fab3babd8567311e8876b355d2caed4b3","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    The ``OWNER_NOVA`` trait scheduling requirement is version-gated"},{"line_number":15,"context_line":"    and only activates when all nova-compute services report service"},{"line_number":16,"context_line":"    version 73 or higher. The version check is performed per"},{"line_number":17,"context_line":"    scheduling request in the scheduler. During a rolling upgrade,"},{"line_number":18,"context_line":"    a warning is logged for each request where the trait cannot be"},{"line_number":19,"context_line":"    added because not all computes are upgraded."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"dcc08bb0_b6e11640","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":39},"updated":"2026-08-04 16:51:45.000000000","message":"nit you could make this a litte shorter\n```suggestion\n    scheduling request. During a rolling upgrade,\n```","commit_id":"e9365e229eb1ae46faaa36f7801ac4b17f463c03"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1f45f877d7771ff38256e11f89b109ec7e811750","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    The ``OWNER_NOVA`` trait scheduling requirement is version-gated"},{"line_number":15,"context_line":"    and only activates when all nova-compute services report service"},{"line_number":16,"context_line":"    version 73 or higher. The version check is performed per"},{"line_number":17,"context_line":"    scheduling request in the scheduler. During a rolling upgrade,"},{"line_number":18,"context_line":"    a warning is logged for each request where the trait cannot be"},{"line_number":19,"context_line":"    added because not all computes are upgraded."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"86c48e1a_3b6ccd6b","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":39},"in_reply_to":"dcc08bb0_b6e11640","updated":"2026-08-04 18:45:47.000000000","message":"Done","commit_id":"e9365e229eb1ae46faaa36f7801ac4b17f463c03"}]}
