)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c97d4b0311c982936b22fdc8e728dd3b57fab718","unresolved":true,"context_lines":[{"line_number":12,"context_line":"numa_fit_instance_to_host() when the VM had PCI requests. Without"},{"line_number":13,"context_line":"pci_stats, the PCI-aware NUMA cell sorting was skipped entirely,"},{"line_number":14,"context_line":"causing the compute claim to override the scheduler\u0027s correct NUMA"},{"line_number":15,"context_line":"placement decision."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The fix is to pass pci_stats whenever the host has a PCI tracker,"},{"line_number":18,"context_line":"regardless of whether the VM requests PCI devices. This allows"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"0021b680_166bdb43","line":15,"updated":"2026-03-11 14:39:11.000000000","message":"ouch\nok ya sound liek a valid bug","commit_id":"3085a62853496869c281995e12d527b8714ec312"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8a8bb9ab8a13f05d05cb8c4b35ffc98a1dd9b8b0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"numa_fit_instance_to_host() when the VM had PCI requests. Without"},{"line_number":13,"context_line":"pci_stats, the PCI-aware NUMA cell sorting was skipped entirely,"},{"line_number":14,"context_line":"causing the compute claim to override the scheduler\u0027s correct NUMA"},{"line_number":15,"context_line":"placement decision."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The fix is to pass pci_stats whenever the host has a PCI tracker,"},{"line_number":18,"context_line":"regardless of whether the VM requests PCI devices. This allows"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"30b41047_c4d2642e","line":15,"in_reply_to":"0021b680_166bdb43","updated":"2026-03-17 17:27:50.000000000","message":"Acknowledged","commit_id":"3085a62853496869c281995e12d527b8714ec312"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c97d4b0311c982936b22fdc8e728dd3b57fab718","unresolved":true,"context_lines":[{"line_number":19,"context_line":"numa_fit_instance_to_host() to sort NUMA cells by PCI device count"},{"line_number":20,"context_line":"and steer non-PCI VMs away from PCI-equipped nodes."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: OSPRH-25388"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"},{"line_number":25,"context_line":"Change-Id: I99ef6af268eb6a7d814d91f4a96b7a1da3fefcbf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fbde6862_bfb29e96","line":22,"updated":"2026-03-11 14:39:11.000000000","message":"-1 you are not allowed ot refence downstream bug trackers in commits\nyou should remvoe this an dile an upstream bug","commit_id":"3085a62853496869c281995e12d527b8714ec312"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8a8bb9ab8a13f05d05cb8c4b35ffc98a1dd9b8b0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"numa_fit_instance_to_host() to sort NUMA cells by PCI device count"},{"line_number":20,"context_line":"and steer non-PCI VMs away from PCI-equipped nodes."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: OSPRH-25388"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"},{"line_number":25,"context_line":"Change-Id: I99ef6af268eb6a7d814d91f4a96b7a1da3fefcbf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"b7e2829d_0a8c2f26","line":22,"in_reply_to":"fbde6862_bfb29e96","updated":"2026-03-17 17:27:50.000000000","message":"It was part of my question in the reproducer. Anyway I created an upstream equivalent upstream bug, so this should be an issue anymore.","commit_id":"3085a62853496869c281995e12d527b8714ec312"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3897e6bd8a63a59d8bf06801eb7237bc7a41a91","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: #2144660"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"},{"line_number":25,"context_line":"Change-Id: I99ef6af268eb6a7d814d91f4a96b7a1da3fefcbf"},{"line_number":26,"context_line":"Signed-off-by: René Ribaud \u003crene.ribaud@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"e471b186_60563dfd","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":55},"updated":"2026-03-19 17:59:58.000000000","message":"```suggestion\nGenerated-By: claude code Opus 4.6\n```","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a67e6d4b512ad26f9ccabf435e2880a8e362beda","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: #2144660"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"},{"line_number":25,"context_line":"Change-Id: I99ef6af268eb6a7d814d91f4a96b7a1da3fefcbf"},{"line_number":26,"context_line":"Signed-off-by: René Ribaud \u003crene.ribaud@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f00d9ea_aa98d0d9","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":55},"in_reply_to":"e471b186_60563dfd","updated":"2026-03-20 10:28:12.000000000","message":"Done","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e1f99287e4d1ea4123e031264b0a5804b82587cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9a2fbc9d_4511d582","updated":"2026-03-18 19:32:28.000000000","message":"Apologies if these are stupid questions.","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b60837ca82ef58cb913e5fe0a5a3a60988911eb4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"345ddc0d_1cd492a9","updated":"2026-03-19 15:25:43.000000000","message":"One question inline, otherwise I\u0027m good","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d7b8dafa0280be4fe2991e460a88574dc9f4fad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"cbc5b6c8_793cbdc5","updated":"2026-03-20 13:35:17.000000000","message":"Added release notes in last patchset as agreed on IRC.","commit_id":"76d06e115b5339fc1400086d66a8f1366cb610f9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1011289d65abb52aa44ecb82cb8361032466bd46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e12d7b28_c7fdc3bd","updated":"2026-03-20 13:47:19.000000000","message":"thanks looks good to me","commit_id":"76d06e115b5339fc1400086d66a8f1366cb610f9"}],"nova/compute/claims.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4782dfe6575142d33d6fcbc89aee91ed6702201b","unresolved":true,"context_lines":[{"line_number":143,"context_line":"                    host_topology)"},{"line_number":144,"context_line":"            pci_requests \u003d self._pci_requests"},{"line_number":145,"context_line":"            pci_stats \u003d None"},{"line_number":146,"context_line":"            if self.tracker.pci_tracker:"},{"line_number":147,"context_line":"                pci_stats \u003d self.tracker.pci_tracker.stats"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            instance_topology \u003d hardware.numa_fit_instance_to_host("}],"source_content_type":"text/x-python","patch_set":1,"id":"3badf1dd_3e7251df","line":146,"updated":"2026-03-10 15:28:02.000000000","message":"Are there cases when self.tracker.pci_tracker is not available yet?","commit_id":"3085a62853496869c281995e12d527b8714ec312"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"57e139eb3351ef463aeeb0bbdec6461bbf71b316","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                    host_topology)"},{"line_number":144,"context_line":"            pci_requests \u003d self._pci_requests"},{"line_number":145,"context_line":"            pci_stats \u003d None"},{"line_number":146,"context_line":"            if self.tracker.pci_tracker:"},{"line_number":147,"context_line":"                pci_stats \u003d self.tracker.pci_tracker.stats"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            instance_topology \u003d hardware.numa_fit_instance_to_host("}],"source_content_type":"text/x-python","patch_set":1,"id":"657a495e_d5efd22c","line":146,"in_reply_to":"191bbe29_3cec019b","updated":"2026-03-23 19:52:50.000000000","message":"Thanks","commit_id":"3085a62853496869c281995e12d527b8714ec312"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8a8bb9ab8a13f05d05cb8c4b35ffc98a1dd9b8b0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                    host_topology)"},{"line_number":144,"context_line":"            pci_requests \u003d self._pci_requests"},{"line_number":145,"context_line":"            pci_stats \u003d None"},{"line_number":146,"context_line":"            if self.tracker.pci_tracker:"},{"line_number":147,"context_line":"                pci_stats \u003d self.tracker.pci_tracker.stats"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            instance_topology \u003d hardware.numa_fit_instance_to_host("}],"source_content_type":"text/x-python","patch_set":1,"id":"191bbe29_3cec019b","line":146,"in_reply_to":"3badf1dd_3e7251df","updated":"2026-03-17 17:27:50.000000000","message":"nova.tests.unit.compute.test_resource_tracker.TestInstanceClaim.test_claim_numaFirst was failing, this is the reason for the if guard.\n\nHowever, I think it is more logical to remove the if guard in the code because _setup_pci_tracker always initializes pci_tracker during compute node init.\nSo I\u0027ve updated the unit test to set up a pci_tracker mock","commit_id":"3085a62853496869c281995e12d527b8714ec312"}],"nova/tests/functional/libvirt/test_pci_sriov_servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e1f99287e4d1ea4123e031264b0a5804b82587cb","unresolved":true,"context_lines":[{"line_number":4653,"context_line":""},{"line_number":4654,"context_line":"        # boot two instances with no PCI device to \"fill up\" both NUMA nodes"},{"line_number":4655,"context_line":"        # (the non-PCI VM fills NUMA 1 first since the PCI-aware sort steers"},{"line_number":4656,"context_line":"        # it away from NUMA 0, then the second fills NUMA 0)"},{"line_number":4657,"context_line":"        extra_spec \u003d {\u0027hw:cpu_policy\u0027: \u0027dedicated\u0027}"},{"line_number":4658,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)"},{"line_number":4659,"context_line":"        server1 \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d\u0027none\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5974b9ec_620e45e8","line":4656,"updated":"2026-03-18 19:32:28.000000000","message":"Is this comment right? It seems like it\u0027s talking about the two instances you create on L4663 and L4665, but it\u0027s describing the behavior you don\u0027t want, which is a non-PCI instance going to a PCI-having NUMA node. Or maybe I\u0027m misreading this... before this fix, the first instance was going to NUMA 0, so the PCI-having instance below would fail. But after the fix, the \"filling\" instance would go to NUMA 1 and the PCI-having instance below would no longer fail. So now you have to fully consume NUMA 1 to get another one to be placed on NUMA 0 to get the desired failure.\n\nThis was a very odd test in the absence of your fix. I guess it makes sense now. The comment does too I guess, but it took me too long to grok it. I dunno what to suggest.","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7be022c7e2fbaac50e4966ef5cacf3643c47866f","unresolved":true,"context_lines":[{"line_number":4653,"context_line":""},{"line_number":4654,"context_line":"        # boot two instances with no PCI device to \"fill up\" both NUMA nodes"},{"line_number":4655,"context_line":"        # (the non-PCI VM fills NUMA 1 first since the PCI-aware sort steers"},{"line_number":4656,"context_line":"        # it away from NUMA 0, then the second fills NUMA 0)"},{"line_number":4657,"context_line":"        extra_spec \u003d {\u0027hw:cpu_policy\u0027: \u0027dedicated\u0027}"},{"line_number":4658,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)"},{"line_number":4659,"context_line":"        server1 \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d\u0027none\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da5ba467_3fbc3e65","line":4656,"in_reply_to":"5974b9ec_620e45e8","updated":"2026-03-19 15:06:48.000000000","message":"You\u0027re right, the comment was hard to follow. I rewrote it to explain the before/after fix behavior explicitly. I hope it is better now. Tell me what you think about it ?","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b60837ca82ef58cb913e5fe0a5a3a60988911eb4","unresolved":false,"context_lines":[{"line_number":4653,"context_line":""},{"line_number":4654,"context_line":"        # boot two instances with no PCI device to \"fill up\" both NUMA nodes"},{"line_number":4655,"context_line":"        # (the non-PCI VM fills NUMA 1 first since the PCI-aware sort steers"},{"line_number":4656,"context_line":"        # it away from NUMA 0, then the second fills NUMA 0)"},{"line_number":4657,"context_line":"        extra_spec \u003d {\u0027hw:cpu_policy\u0027: \u0027dedicated\u0027}"},{"line_number":4658,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)"},{"line_number":4659,"context_line":"        server1 \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d\u0027none\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"64dfeede_56f5a245","line":4656,"in_reply_to":"da5ba467_3fbc3e65","updated":"2026-03-19 15:25:43.000000000","message":"Yeah, maybe the comment makes it too specific to this fix, I dunno, but it makes more sense to me now reading the code.","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e1f99287e4d1ea4123e031264b0a5804b82587cb","unresolved":true,"context_lines":[{"line_number":5865,"context_line":"            \"compute1\", **compute1_placement_pci_view)"},{"line_number":5866,"context_line":""},{"line_number":5867,"context_line":"        # now boot one with a PCI device with \u0027required\u0027 NUMA policy,"},{"line_number":5868,"context_line":"        # which should fail because both NUMA nodes are full"},{"line_number":5869,"context_line":"        extra_spec[\u0027pci_passthrough:alias\u0027] \u003d \u0027%s:1\u0027 % self.ALIAS_NAME"},{"line_number":5870,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":5871,"context_line":"        self._create_server("}],"source_content_type":"text/x-python","patch_set":3,"id":"384751c6_485dc31d","line":5868,"updated":"2026-03-18 19:32:28.000000000","message":"Er, isn\u0027t this the same as the first one above? Seems like you need to delete the instance on NUMA 1 and ensure that the PCI request fails, even though there is space on NUMA 1 when its PCI device is on NUMA 0. Won\u0027t the below boot just fail because it\u0027s full?\n\nAlso, is there no better way to assert failure than to compare the placement view? It\u0027s a bit hard to convince myself that it\u0027s right. Can you check the instance is also in ERROR state?","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7be022c7e2fbaac50e4966ef5cacf3643c47866f","unresolved":true,"context_lines":[{"line_number":5865,"context_line":"            \"compute1\", **compute1_placement_pci_view)"},{"line_number":5866,"context_line":""},{"line_number":5867,"context_line":"        # now boot one with a PCI device with \u0027required\u0027 NUMA policy,"},{"line_number":5868,"context_line":"        # which should fail because both NUMA nodes are full"},{"line_number":5869,"context_line":"        extra_spec[\u0027pci_passthrough:alias\u0027] \u003d \u0027%s:1\u0027 % self.ALIAS_NAME"},{"line_number":5870,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":5871,"context_line":"        self._create_server("}],"source_content_type":"text/x-python","patch_set":3,"id":"e6336bef_97478349","line":5868,"in_reply_to":"384751c6_485dc31d","updated":"2026-03-19 15:06:48.000000000","message":"I reworked the test to prove the failure is due to PCI NUMA affinity, not lack of resources: after filling both NUMA nodes, I now delete the VM on NUMA 1 to free space there. The PCI VM with \u0027required\u0027 policy should still fail because its PCI device is on NUMA 0 (full), and \u0027required\u0027 forbids cross-NUMA allocation.\nAnd I replaced the placement view comparison with a check on the instance.","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b60837ca82ef58cb913e5fe0a5a3a60988911eb4","unresolved":false,"context_lines":[{"line_number":5865,"context_line":"            \"compute1\", **compute1_placement_pci_view)"},{"line_number":5866,"context_line":""},{"line_number":5867,"context_line":"        # now boot one with a PCI device with \u0027required\u0027 NUMA policy,"},{"line_number":5868,"context_line":"        # which should fail because both NUMA nodes are full"},{"line_number":5869,"context_line":"        extra_spec[\u0027pci_passthrough:alias\u0027] \u003d \u0027%s:1\u0027 % self.ALIAS_NAME"},{"line_number":5870,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":5871,"context_line":"        self._create_server("}],"source_content_type":"text/x-python","patch_set":3,"id":"3e6ae59d_00a37236","line":5868,"in_reply_to":"e6336bef_97478349","updated":"2026-03-19 15:25:43.000000000","message":"\u003e And I replaced the placement view comparison with a check on the instance.\n\nNot replaced but \"added\" (which I think is good). Now that I see the change, I guess it was technically already waiting for \u0027ERROR\u0027 because of `self.expected_state` but it wasn\u0027t very obvious to me. Those expected states are usually for sequencing and not so much assertions about correctness, but I see in this case it was. Explicit is better though, IMHO.","commit_id":"09f1dc141cd0af367c118ee7d56b2a36b0bf3068"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3897e6bd8a63a59d8bf06801eb7237bc7a41a91","unresolved":true,"context_lines":[{"line_number":4666,"context_line":"        inst1 \u003d objects.Instance.get_by_uuid(self.ctxt, server1[\u0027id\u0027])"},{"line_number":4667,"context_line":"        self.assertEqual(1, inst1.numa_topology.cells[0].id)"},{"line_number":4668,"context_line":"        inst2 \u003d objects.Instance.get_by_uuid(self.ctxt, server2[\u0027id\u0027])"},{"line_number":4669,"context_line":"        self.assertEqual(0, inst2.numa_topology.cells[0].id)"},{"line_number":4670,"context_line":""},{"line_number":4671,"context_line":"        # now boot one with a PCI device, which should fail to boot"},{"line_number":4672,"context_line":"        extra_spec[\u0027pci_passthrough:alias\u0027] \u003d \u0027%s:1\u0027 % self.ALIAS_NAME"}],"source_content_type":"text/x-python","patch_set":4,"id":"4831e9e3_f357ec28","line":4669,"updated":"2026-03-19 17:59:58.000000000","message":"ok yes this makes sense.\nthe test before was relying on the odering where we would place the first vm on numa 0\n\nhowever you need to delete server 1 before trying to create the pci vm as you have used up all the cpus.\n\nself.flags(cpu_dedicated_set\u003d\u00270-7\u0027, group\u003d\u0027compute\u0027)\n\nyou created 2 vms with 4 cpus\n\n extra_spec \u003d {\u0027hw:cpu_policy\u0027: \u0027dedicated\u0027}\n flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)\n \nso the thrid vm woudl still fail even with the pci device since you didnt delete server1","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a67e6d4b512ad26f9ccabf435e2880a8e362beda","unresolved":false,"context_lines":[{"line_number":4666,"context_line":"        inst1 \u003d objects.Instance.get_by_uuid(self.ctxt, server1[\u0027id\u0027])"},{"line_number":4667,"context_line":"        self.assertEqual(1, inst1.numa_topology.cells[0].id)"},{"line_number":4668,"context_line":"        inst2 \u003d objects.Instance.get_by_uuid(self.ctxt, server2[\u0027id\u0027])"},{"line_number":4669,"context_line":"        self.assertEqual(0, inst2.numa_topology.cells[0].id)"},{"line_number":4670,"context_line":""},{"line_number":4671,"context_line":"        # now boot one with a PCI device, which should fail to boot"},{"line_number":4672,"context_line":"        extra_spec[\u0027pci_passthrough:alias\u0027] \u003d \u0027%s:1\u0027 % self.ALIAS_NAME"}],"source_content_type":"text/x-python","patch_set":4,"id":"fd94e087_0592a977","line":4669,"in_reply_to":"4831e9e3_f357ec28","updated":"2026-03-20 10:28:12.000000000","message":"Done","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3897e6bd8a63a59d8bf06801eb7237bc7a41a91","unresolved":true,"context_lines":[{"line_number":5733,"context_line":"        self.flags(group\u003d\u0027filter_scheduler\u0027, pci_in_placement\u003dTrue)"},{"line_number":5734,"context_line":""},{"line_number":5735,"context_line":"    def test_create_server_with_pci_dev_and_numa(self):"},{"line_number":5736,"context_line":"        \"\"\"Validate behavior of \u0027preferred\u0027 PCI NUMA policy."},{"line_number":5737,"context_line":""},{"line_number":5738,"context_line":"        This test ensures that it *is* possible to allocate CPU and memory"},{"line_number":5739,"context_line":"        resources from one NUMA node and a PCI device from another *if* PCI"},{"line_number":5740,"context_line":"        NUMA policies are in use."},{"line_number":5741,"context_line":"        \"\"\""},{"line_number":5742,"context_line":""},{"line_number":5743,"context_line":"        self.flags(cpu_dedicated_set\u003d\u00270-7\u0027, group\u003d\u0027compute\u0027)"},{"line_number":5744,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"092700b3_d72d2dd8","line":5741,"range":{"start_line":5736,"start_character":0,"end_line":5741,"end_character":11},"updated":"2026-03-19 17:59:58.000000000","message":"to correctly validate this you need to file the numa node that has the pci device\n\nand boot the vm that request it on a diffent numa node \n\nthat is what prefer enables vs require and legacy (the default)\n\nthe behavior of legacy is if the device report a numa affintiy we strictly require that the device is allcoated form the same numa node (the same as the required policy) but if the pci device has no numa affinity reported in the kernel its allowed.","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a67e6d4b512ad26f9ccabf435e2880a8e362beda","unresolved":false,"context_lines":[{"line_number":5733,"context_line":"        self.flags(group\u003d\u0027filter_scheduler\u0027, pci_in_placement\u003dTrue)"},{"line_number":5734,"context_line":""},{"line_number":5735,"context_line":"    def test_create_server_with_pci_dev_and_numa(self):"},{"line_number":5736,"context_line":"        \"\"\"Validate behavior of \u0027preferred\u0027 PCI NUMA policy."},{"line_number":5737,"context_line":""},{"line_number":5738,"context_line":"        This test ensures that it *is* possible to allocate CPU and memory"},{"line_number":5739,"context_line":"        resources from one NUMA node and a PCI device from another *if* PCI"},{"line_number":5740,"context_line":"        NUMA policies are in use."},{"line_number":5741,"context_line":"        \"\"\""},{"line_number":5742,"context_line":""},{"line_number":5743,"context_line":"        self.flags(cpu_dedicated_set\u003d\u00270-7\u0027, group\u003d\u0027compute\u0027)"},{"line_number":5744,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"4a19ce9d_9b44e71d","line":5741,"range":{"start_line":5736,"start_character":0,"end_line":5741,"end_character":11},"in_reply_to":"092700b3_d72d2dd8","updated":"2026-03-20 10:28:12.000000000","message":"Done","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3897e6bd8a63a59d8bf06801eb7237bc7a41a91","unresolved":true,"context_lines":[{"line_number":5765,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":5766,"context_line":"        }"},{"line_number":5767,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)"},{"line_number":5768,"context_line":"        server_no_pci \u003d self._create_server(flavor_id\u003dflavor_id)"},{"line_number":5769,"context_line":""},{"line_number":5770,"context_line":"        # verify the non-PCI VM landed on NUMA node 1 (away from PCI node 0)"},{"line_number":5771,"context_line":"        inst_no_pci \u003d objects.Instance.get_by_uuid("},{"line_number":5772,"context_line":"            self.ctxt, server_no_pci[\u0027id\u0027])"},{"line_number":5773,"context_line":"        self.assertEqual(1, inst_no_pci.numa_topology.cells[0].id)"},{"line_number":5774,"context_line":""},{"line_number":5775,"context_line":"        self.assert_placement_pci_view("},{"line_number":5776,"context_line":"            \"compute1\", **compute1_placement_pci_view)"}],"source_content_type":"text/x-python","patch_set":4,"id":"17add0e6_d58af003","line":5773,"range":{"start_line":5768,"start_character":0,"end_line":5773,"end_character":66},"updated":"2026-03-19 17:59:58.000000000","message":"so here we also need to boot 2 vms and delet the one that is not on the numa node with the pci device\n\nin this case we need to delete teh 1st vm (which shoudl be on numa 1_ and\nkeep the secodn vm which will be on numa 0\n\nthat way when you create the third vm that request the pci device it will need to cheduler to numa 1 with a cross numa pci device form numa 0\n\nthat is the deltat between \n\ntest_create_server_with_pci_dev_and_numa and test_create_server_with_pci_dev_and_numa_fails\n\ntest_create_server_with_pci_dev_and_numa_fails fails becuase the default legacy numa policy does not allow cross numa pci assignemnt where\nas this test passes because fo the prefer policy\n\nby booting only one vm you are not properly testing prefered i.e. the ablity to boot with a non local pci device.\n\n\nthere are 2 paths to the the prefered policy by the way\n\nfirst at the weigher level it perfers host where strict numa affinti is possible\nand second on a compute node it will prefer numa nodes where strict afficting is poosble but allow vm placmenet where cross numa is required.\n\nits a best effrot polocy and this test was previosly testing the case where coss numa was requried for it to boot.\n\nso this is a regression in test coverage.","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a67e6d4b512ad26f9ccabf435e2880a8e362beda","unresolved":true,"context_lines":[{"line_number":5765,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":5766,"context_line":"        }"},{"line_number":5767,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)"},{"line_number":5768,"context_line":"        server_no_pci \u003d self._create_server(flavor_id\u003dflavor_id)"},{"line_number":5769,"context_line":""},{"line_number":5770,"context_line":"        # verify the non-PCI VM landed on NUMA node 1 (away from PCI node 0)"},{"line_number":5771,"context_line":"        inst_no_pci \u003d objects.Instance.get_by_uuid("},{"line_number":5772,"context_line":"            self.ctxt, server_no_pci[\u0027id\u0027])"},{"line_number":5773,"context_line":"        self.assertEqual(1, inst_no_pci.numa_topology.cells[0].id)"},{"line_number":5774,"context_line":""},{"line_number":5775,"context_line":"        self.assert_placement_pci_view("},{"line_number":5776,"context_line":"            \"compute1\", **compute1_placement_pci_view)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd91f995_8fa6772a","line":5773,"range":{"start_line":5768,"start_character":0,"end_line":5773,"end_character":66},"in_reply_to":"17add0e6_d58af003","updated":"2026-03-20 10:28:12.000000000","message":"Updated, please tell me if I understand it well.","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"5ae3f726db81be68f445fe476bab899a033d8bd0","unresolved":false,"context_lines":[{"line_number":5765,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":5766,"context_line":"        }"},{"line_number":5767,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d4, extra_spec\u003dextra_spec)"},{"line_number":5768,"context_line":"        server_no_pci \u003d self._create_server(flavor_id\u003dflavor_id)"},{"line_number":5769,"context_line":""},{"line_number":5770,"context_line":"        # verify the non-PCI VM landed on NUMA node 1 (away from PCI node 0)"},{"line_number":5771,"context_line":"        inst_no_pci \u003d objects.Instance.get_by_uuid("},{"line_number":5772,"context_line":"            self.ctxt, server_no_pci[\u0027id\u0027])"},{"line_number":5773,"context_line":"        self.assertEqual(1, inst_no_pci.numa_topology.cells[0].id)"},{"line_number":5774,"context_line":""},{"line_number":5775,"context_line":"        self.assert_placement_pci_view("},{"line_number":5776,"context_line":"            \"compute1\", **compute1_placement_pci_view)"}],"source_content_type":"text/x-python","patch_set":4,"id":"aa9f373e_46d0b98d","line":5773,"range":{"start_line":5768,"start_character":0,"end_line":5773,"end_character":66},"in_reply_to":"dd91f995_8fa6772a","updated":"2026-03-20 13:34:32.000000000","message":"Done","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b60837ca82ef58cb913e5fe0a5a3a60988911eb4","unresolved":true,"context_lines":[{"line_number":5867,"context_line":""},{"line_number":5868,"context_line":"        # Delete the VM on NUMA 1 to free resources there. NUMA 0 (the PCI"},{"line_number":5869,"context_line":"        # node) remains full."},{"line_number":5870,"context_line":"        self._delete_server(server1)"},{"line_number":5871,"context_line":""},{"line_number":5872,"context_line":"        self.assert_placement_pci_view("},{"line_number":5873,"context_line":"            \"compute1\", **compute1_placement_pci_view)"}],"source_content_type":"text/x-python","patch_set":4,"id":"4aacd262_aeff5476","line":5870,"updated":"2026-03-19 15:25:43.000000000","message":"I didn\u0027t go look, but does this wait for the instance to be fully deleted? Or is it synchronous? Just looking for confirmation that we\u0027re not still failing because it\u0027s full.","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3897e6bd8a63a59d8bf06801eb7237bc7a41a91","unresolved":true,"context_lines":[{"line_number":5867,"context_line":""},{"line_number":5868,"context_line":"        # Delete the VM on NUMA 1 to free resources there. NUMA 0 (the PCI"},{"line_number":5869,"context_line":"        # node) remains full."},{"line_number":5870,"context_line":"        self._delete_server(server1)"},{"line_number":5871,"context_line":""},{"line_number":5872,"context_line":"        self.assert_placement_pci_view("},{"line_number":5873,"context_line":"            \"compute1\", **compute1_placement_pci_view)"}],"source_content_type":"text/x-python","patch_set":4,"id":"4b9641fd_9f155f59","line":5870,"in_reply_to":"4aacd262_aeff5476","updated":"2026-03-19 17:59:58.000000000","message":"https://github.com/openstack/nova/blob/master/nova/tests/functional/integrated_helpers.py#L516-L519\n\n```\n    def _delete_server(self, server):\n        \"\"\"Delete a server.\"\"\"\n        self.api.delete_server(server[\u0027id\u0027])\n        self._wait_until_deleted(server)\n```\n\nits pooling the api internally so this is synconous.\n\nthe placement allcoation free shoudl be atopic as a result and we shoudl not need to run the perodic to ensure the placemetn view is updated althoguh we could if for some reaosn this was flaky.","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a67e6d4b512ad26f9ccabf435e2880a8e362beda","unresolved":false,"context_lines":[{"line_number":5867,"context_line":""},{"line_number":5868,"context_line":"        # Delete the VM on NUMA 1 to free resources there. NUMA 0 (the PCI"},{"line_number":5869,"context_line":"        # node) remains full."},{"line_number":5870,"context_line":"        self._delete_server(server1)"},{"line_number":5871,"context_line":""},{"line_number":5872,"context_line":"        self.assert_placement_pci_view("},{"line_number":5873,"context_line":"            \"compute1\", **compute1_placement_pci_view)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fbc2879e_3950bb86","line":5870,"in_reply_to":"4b9641fd_9f155f59","updated":"2026-03-20 10:28:12.000000000","message":"Acknowledged","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3897e6bd8a63a59d8bf06801eb7237bc7a41a91","unresolved":true,"context_lines":[{"line_number":2235,"context_line":"        self.rt.compute_nodes[_NODENAME] \u003d cn"},{"line_number":2236,"context_line":"        self.rt.provider_tree \u003d self._setup_ptree(cn)"},{"line_number":2237,"context_line":""},{"line_number":2238,"context_line":"        mock_pci_tracker \u003d mock.MagicMock()"},{"line_number":2239,"context_line":"        mock_pci_tracker.stats.to_device_pools_obj.return_value \u003d ("},{"line_number":2240,"context_line":"            objects.PciDevicePoolList())"},{"line_number":2241,"context_line":"        self.rt.pci_tracker \u003d mock_pci_tracker"}],"source_content_type":"text/x-python","patch_set":4,"id":"4f6407f4_8fb627bc","line":2238,"range":{"start_line":2238,"start_character":27,"end_line":2238,"end_character":43},"updated":"2026-03-19 17:59:58.000000000","message":"nit: i guess this works it woudl eb better to use auto spec here and refence the pci tracker so we cant call function that dont exist but this si functional as is so that fine i guess.\n\nyou really just doing this so that the now uncodtional usage of the pci tracker in the isntance claims wont brake other tests.","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a67e6d4b512ad26f9ccabf435e2880a8e362beda","unresolved":false,"context_lines":[{"line_number":2235,"context_line":"        self.rt.compute_nodes[_NODENAME] \u003d cn"},{"line_number":2236,"context_line":"        self.rt.provider_tree \u003d self._setup_ptree(cn)"},{"line_number":2237,"context_line":""},{"line_number":2238,"context_line":"        mock_pci_tracker \u003d mock.MagicMock()"},{"line_number":2239,"context_line":"        mock_pci_tracker.stats.to_device_pools_obj.return_value \u003d ("},{"line_number":2240,"context_line":"            objects.PciDevicePoolList())"},{"line_number":2241,"context_line":"        self.rt.pci_tracker \u003d mock_pci_tracker"}],"source_content_type":"text/x-python","patch_set":4,"id":"d962a98a_494f4a94","line":2238,"range":{"start_line":2238,"start_character":27,"end_line":2238,"end_character":43},"in_reply_to":"4f6407f4_8fb627bc","updated":"2026-03-20 10:28:12.000000000","message":"Done","commit_id":"1e0594b3e5808ae731c16bb8087a7b9b2366f61d"}]}
