)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"73d7881b448a9f996691dd3f59159ae080b88c79","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2021-01-06 19:49:56 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] fix max cpu topologies with numa affinity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia81a0fdbd950b51dbcc70c65ba492549a224ce2b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"07cfed2b_8db77e3b","line":8,"updated":"2021-01-07 00:09:32.000000000","message":"FYI I have opened https://bugs.launchpad.net/nova/+bug/1910466 for this Closes-Bug.","commit_id":"9297bb7cba77f574a85433a738075b9dbbf330e9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-01-07 16:20:17 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fix max cpu topologies with numa affinity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nova has never supported specifying per numa node"},{"line_number":10,"context_line":"cpu toplogies. logically the  cpu toplogy of a guest"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fe1fc8e4_207d5d01","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"updated":"2021-01-13 17:30:26.000000000","message":"F","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-01-07 16:20:17 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fix max cpu topologies with numa affinity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nova has never supported specifying per numa node"},{"line_number":10,"context_line":"cpu toplogies. logically the  cpu toplogy of a guest"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"16f4e597_d145c690","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"in_reply_to":"fe1fc8e4_207d5d01","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"fix max cpu topologies with numa affinity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nova has never supported specifying per numa node"},{"line_number":10,"context_line":"cpu toplogies. logically the  cpu toplogy of a guest"},{"line_number":11,"context_line":"is independent of its numa toplogy and there is no"},{"line_number":12,"context_line":"way to model different cpu toplogyies per numa node"},{"line_number":13,"context_line":"or implement that in hardware."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"710e64d5_08cbdfc2","line":10,"range":{"start_line":10,"start_character":15,"end_line":10,"end_character":16},"updated":"2021-01-13 17:30:26.000000000","message":"L","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"fix max cpu topologies with numa affinity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nova has never supported specifying per numa node"},{"line_number":10,"context_line":"cpu toplogies. logically the  cpu toplogy of a guest"},{"line_number":11,"context_line":"is independent of its numa toplogy and there is no"},{"line_number":12,"context_line":"way to model different cpu toplogyies per numa node"},{"line_number":13,"context_line":"or implement that in hardware."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"d8f5bc47_143398bd","line":10,"range":{"start_line":10,"start_character":15,"end_line":10,"end_character":16},"in_reply_to":"710e64d5_08cbdfc2","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Nova has never supported specifying per numa node"},{"line_number":10,"context_line":"cpu toplogies. logically the  cpu toplogy of a guest"},{"line_number":11,"context_line":"is independent of its numa toplogy and there is no"},{"line_number":12,"context_line":"way to model different cpu toplogyies per numa node"},{"line_number":13,"context_line":"or implement that in hardware."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"002beafd_fafb52f6","line":12,"range":{"start_line":12,"start_character":33,"end_line":12,"end_character":34},"updated":"2021-01-13 17:30:26.000000000","message":"drop","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Nova has never supported specifying per numa node"},{"line_number":10,"context_line":"cpu toplogies. logically the  cpu toplogy of a guest"},{"line_number":11,"context_line":"is independent of its numa toplogy and there is no"},{"line_number":12,"context_line":"way to model different cpu toplogyies per numa node"},{"line_number":13,"context_line":"or implement that in hardware."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"95df7158_610dd250","line":12,"range":{"start_line":12,"start_character":33,"end_line":12,"end_character":34},"in_reply_to":"002beafd_fafb52f6","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"21958646810c43f3b20dd168c6d2023ac3fdc6fd","unresolved":true,"context_lines":[{"line_number":13,"context_line":"or implement that in hardware."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ee577ac_ab1f8b2d","line":16,"range":{"start_line":16,"start_character":27,"end_line":16,"end_character":30},"updated":"2021-02-03 06:23:14.000000000","message":"ion","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"or implement that in hardware."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1c730f95_f9e5128c","line":16,"range":{"start_line":16,"start_character":27,"end_line":16,"end_character":30},"in_reply_to":"1ee577ac_ab1f8b2d","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cbba2ea599afe7d6f13995b477dbc662a1ef4cfa","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ccb59820_726ca3bf","line":18,"updated":"2021-01-07 23:10:54.000000000","message":"I feel like we should mention somewhere in the commit message that this is a revert or partial revert (whichever is more accurate) of:\n\nhttps://github.com/openstack/nova/commit/770ab8eeb72b184ac6164aeabb89c4bf45f938a9\n\nI would also like to see an explanation in the commit message as to why the removed code is no longer needed. The questions I have as a layperson when I read this are: (1) why was 770ab8eeb72b184ac6164aeabb89c4bf45f938a9 done in the first place? Its commit message makes it sound like it was needed in order to make sure threads are exposed in the final cpu topology (apologies if that doesn\u0027t make sense, I am not familiar with this) (2) why is 770ab8eeb72b184ac6164aeabb89c4bf45f938a9 no longer needed and what is taking care of threads today?","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a1565e7a25eb9b39ed9f8b5eef981c43a4563d8b","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9003c8f2_c3415da6","line":18,"in_reply_to":"0f6c7b92_59e3a70e","updated":"2021-03-29 18:45:46.000000000","message":"right so none of the host cpu tread sibling pairing was ever approved or allowed by the specs that intoduced cpu pinning and since the code im removing updated the cpu toptolgy in the numa toplogy not the one we used to generate the xml in inst.vcpu_model.topology i dont see how this could have ever had a practical impact on the guests.\n\nthis was for better or worse dead code from the point of view of generating the xml and incorrect code form the point of view of selecting a host. it is incorrect to consider the host cpu toplogy when generating the guest cpu topology. we have inccorectly in my view for example made some asstiontion with regard to the require policy but that is a different matter.\n\nnothing we have ever stated with regard to cpu topoology has ever stated we woudl map guest hypertread to host hypertreads. if you want to have 4 threads per core on a host with only 1 thread per core that is fine as is having a guest with 1 thread per core on a host with 2.\n\nthe only things we have ever said is if you have a virtual numa node toplogy you can map the virtual cpus to a virtual numa node.\n\nwe have a unriten rule tha the libvirt driver that each virtual numa node will be mapped to a different host numa node. that is not guarenteed by the api and hyperv does not have to do the same if they done want too but there is nothign that says guest thread pairs will be mapped to host thread pairs.\n\nanyway i dont think this is a regression and i dont think its reasonable for anyone to rely on it today.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0af20359450ead8ea8735f35fe8f21e2f90e5621","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"eb6e88d5_8d5ea995","line":18,"in_reply_to":"20865faf_461becf5","updated":"2021-03-30 12:33:02.000000000","message":"ah i read your comment ya so the previus behavior with cpu pinning was definitely a bug then.\nit was in apporparte to alter the guest cpu toplogy based on the host cpu toplogy when using cpu pinning\nas that produces a tight coupleing that may limit its live migration capablity. \n\ni can see why you would want to do this and i even suggested doing something very similar in the past where i wanted to change the best fit cpu toplogy to slect the toplogy that matched the host toplogy most closely which si effectivly what the code was trying to do but the different is that it was elimitaning possable combination instead of weighting the different topologies.\n\nwhat is incorrect is not the optimisation but rather that it would limit the set of possible topologies.\nfiltering is not correct here so _filter_for_numa_threads shoudl be removed but sorting the topologies\nthis should have been implemented as part of _score_cpu_topology or _sort_possible_cpu_topologies\n\nwhat i was previously proposing indepent of this was altering _sort_possible_cpu_topologies to compute the cpu toplogy with the smallest delta form the hosts.  you can do that genericaly by trating the atibutes of the topolgoy as corrdinates in a vector spaces. e.g. (socket, core, thread)  are like (x,y,z) points in a 3 dimtional space and you select the topoligy that is the shotest distance form the host toplogy.\n\nThat should give you the optimal toplogy in most cases. i can look at implementign that if you would like.\nit will do the optimisation correctly for both pinned and unpinned instances.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"b23c08d6_d0871ac0","line":18,"in_reply_to":"308eb7e0_3d53537f","updated":"2021-01-13 17:30:26.000000000","message":"I don\u0027t think you\u0027ve diagnosed this correctly. My understanding of this code is that it allows us to best map the host topology to the guest topology. Consider a 32 core CPU with hyperthreading (i.e. 16 + 16). If you boot a 4 core guest and those cores are running on cores 0,1,16,17, then exposing CPU threads inside the guest best allows that OS to optimize for the case.\n\nNow, whether this matters enough to keep doing is another matter, but I do think removing this outright would be a regression, based on the above.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef7034f36726864237a1e4658e78b0f44ccddc49","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"20865faf_461becf5","line":18,"in_reply_to":"9003c8f2_c3415da6","updated":"2021-03-30 11:34:38.000000000","message":"\u003e right so none of the host cpu tread sibling pairing was ever approved or allowed by the specs that intoduced cpu pinning and since the code im removing updated the cpu toptolgy in the numa toplogy not the one we used to generate the xml in inst.vcpu_model.topology i dont see how this could have ever had a practical impact on the guests.\n\nI\u0027ve just shown you how it can have an impact above.\n\n\u003e this was for better or worse dead code from the point of view of generating the xml\n\nIt\u0027s not dead code. See above. This is doing something. It might not be something we wish to keep, but it\u0027s not dead code.\n\n\u003e and incorrect code form the point of view of selecting a host. it is incorrect to consider the host cpu toplogy when generating the guest cpu topology. we have inccorectly in my view for example made some asstiontion with regard to the require policy but that is a different matter.\n\nQuite possibly. That\u0027s worth discussing.\n\n\u003e nothing we have ever stated with regard to cpu topoology has ever stated we woudl map guest hypertread to host hypertreads. if you want to have 4 threads per core on a host with only 1 thread per core that is fine as is having a guest with 1 thread per core on a host with 2.\n\nTo be fair we do not document this and I had to root through the code to figure this out.\n\n\u003e the only things we have ever said is if you have a virtual numa node toplogy you can map the virtual cpus to a virtual numa node.\n\u003e \n\u003e we have a unriten rule tha the libvirt driver that each virtual numa node will be mapped to a different host numa node. that is not guarenteed by the api and hyperv does not have to do the same if they done want too but there is nothign that says guest thread pairs will be mapped to host thread pairs.\n\u003e \n\u003e anyway i dont think this is a regression and i dont think its reasonable for anyone to rely on it today.\n\nIt\u0027s a regression. It might well be an acceptable regression, but we were doing something before and no longer will be doing so afterwards. To be clear, I\u0027m not arguing that we should keep this, but at a minimum we should be flagging this change in the release notes.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"79cca3065087c9d1e19b68fbc885499a32e9b090","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"0f6c7b92_59e3a70e","line":18,"in_reply_to":"9d5c48ce_7b548cc7","updated":"2021-03-29 17:39:28.000000000","message":"As I say that, I manage to reproduce this. I missed that you need to enable CPU pinning for this to happen. That makes sense since the vCPU processes of NUMA instances without a pinning policy will float across the whole NUMA node. I have provided a reproducer below. It will pass before this patch but fail after. This means things are working as I thought they would and we\u0027re breaking some optimization in doing this.\n\n\u003e i disagree \n\u003e \n\u003e the numa toplogy of the instance should have no baring on the virtual numa toplogy.\n\nThis isn\u0027t specific to NUMA. This is specific to CPU pinning. We\u0027re saying if a guest vCPU is pinned to two host cores and that those host cores are thread siblings, then we should expose this information to the guest for scheduling purposes.\n\nWith that said, this is relies on an awful lot going right. Chiefly, we\u0027d have to make sure each host CPU thread sibling pair is correctly mapped to a guest VCPU thread sibling pair. The CPU topology of the guest has no bearing on the NUMA mapping, so we could easily end up doing things backwards. For example:\n\n  host  0 -\u003e 0 guest\n        4 -\u003e 1\n        1 -\u003e 2\n        5 -\u003e 3\n\nso the host core thread sibling pairs are 0,4 and 1,5, but the guest has this backwards. I don\u0027t actually have a clue whether this is working as expected or how big the impact of removing things would be but I don\u0027t think we should be dismissing it out of hand.\n\n---\n\n  diff --git nova/tests/functional/libvirt/test_numa_servers.py nova/tests/functional/libvirt/test_numa_servers.py\n  index a79bbc05b7..30b0b67023 100644\n  --- nova/tests/functional/libvirt/test_numa_servers.py\n  +++ nova/tests/functional/libvirt/test_numa_servers.py\n  @@ -341,26 +341,30 @@ class NUMAServersTest(NUMAServersTestBase):\n           This should pass and result in a guest NUMA topology with pinned CPUs.\n           \"\"\"\n   \n  -        self.flags(cpu_dedicated_set\u003d\u00270-9\u0027, cpu_shared_set\u003dNone,\n  +        self.flags(cpu_dedicated_set\u003d\u00270-15\u0027, cpu_shared_set\u003dNone,\n                      group\u003d\u0027compute\u0027)\n           self.flags(vcpu_pin_set\u003dNone)\n   \n  -        host_info \u003d fakelibvirt.HostInfo(cpu_nodes\u003d1, cpu_sockets\u003d1,\n  -                                         cpu_cores\u003d5, cpu_threads\u003d2)\n  +        host_info \u003d fakelibvirt.HostInfo(cpu_nodes\u003d2, cpu_sockets\u003d1,\n  +                                         cpu_cores\u003d4, cpu_threads\u003d2)\n           self.start_compute(host_info\u003dhost_info, hostname\u003d\u0027compute1\u0027)\n   \n           extra_spec \u003d {\n  +            \u0027hw:numa_nodes\u0027: \u00272\u0027,\n               \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,\n               \u0027hw:cpu_thread_policy\u0027: \u0027prefer\u0027,\n           }\n  -        flavor_id \u003d self._create_flavor(vcpu\u003d5, extra_spec\u003dextra_spec)\n  -        expected_usage \u003d {\u0027DISK_GB\u0027: 20, \u0027MEMORY_MB\u0027: 2048, \u0027PCPU\u0027: 5}\n  +        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)\n  +        expected_usage \u003d {\u0027DISK_GB\u0027: 20, \u0027MEMORY_MB\u0027: 2048, \u0027PCPU\u0027: 8}\n   \n           server \u003d self._run_build_test(flavor_id, expected_usage\u003dexpected_usage)\n   \n           inst \u003d objects.Instance.get_by_uuid(self.ctxt, server[\u0027id\u0027])\n  -        self.assertEqual(1, len(inst.numa_topology.cells))\n  -        self.assertEqual(5, inst.numa_topology.cells[0].cpu_topology.cores)\n  +        self.assertEqual(2, len(inst.numa_topology.cells))\n  +        self.assertIn(\u0027topology\u0027, inst.vcpu_model)\n  +        self.assertEqual(4, inst.vcpu_model.topology.sockets)\n  +        self.assertEqual(1, inst.vcpu_model.topology.cores)\n  +        self.assertEqual(2, inst.vcpu_model.topology.threads)\n   \n       def test_create_server_with_mixed_policy(self):\n           \"\"\"Create a server using the \u0027hw:cpu_policy\u003dmixed\u0027 extra spec.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25eb5d6242e12066e2450b5f0a7efb7f96f50dae","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"eb11b945_dbd9ea27","line":18,"in_reply_to":"b23c08d6_d0871ac0","updated":"2021-01-13 18:52:09.000000000","message":"i disagree \n\nthe numa toplogy of the instance should have no baring on the virtual numa toplogy.\n\nthe root cause of this is the orginal aututhor of the vcpu toplogy work din not fully understand how numa would be added at the time they wrote this code.\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-vcpu-topology.html\n\nthey assumed that we would map numa node to cpu sockets and a more fingrained vcpu toplogy\n\nsocket0:cores\u003d2,threads\u003d2,socket1:cores\u003d4,threads\u003d1 see https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-vcpu-topology.html#alternatives\n\nthey implemented suppoort for generating thoes fine graded topologyes in the data models as part of \nhttps://github.com/openstack/nova/commit/770ab8eeb72b184ac6164aeabb89c4bf45f938a9 but that solution was ultimately rejected.\n\nform the sepc \n\"It is noted, however, that at time of writing, no virtualization technology provides any way to configure such asymmetrical topologies. Thus Nova is better served by ignoring this purely theoretical possibility and keeping its syntax simpler to match real-world capabilities that already exist.\"\n\nand form the performance impact section we have \n\"The cores vs sockets vs threads decision does not involve any scheduler interaction, since this design is not attempting to match host topology to guest topology. A later blueprint on CPU pinning will make it possible todo such host to guest topology matching, and its performance impact will be considered there.\"\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-vcpu-topology.html#performance-impact\n\nso the vitrual cpu toplogy featre has always been decupled form the host and guest numa toplogy.\ni was part of the design and implementation of both the vcpu topology and numa toplogy feature\nand how they would interact and this was one of the tenant we ensured in the design.\n\n\nhttps://wiki.openstack.org/wiki/VirtDriverGuestCPUMemoryPlacement tried to capture the larger picture \nand https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-numa-placement.html\ncovers the introduction of numa.\n\nwe realist that modeling numa node as socket would not work long term so that corralation was broken in that spec as we also know it woudl have livemigation limitation as the virtual toplgoy cannot change while the guest is running.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"35050bd0fa95738bff4757a48812fc3a3f387df0","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"308eb7e0_3d53537f","line":18,"in_reply_to":"ccb59820_726ca3bf","updated":"2021-01-08 17:42:46.000000000","message":"its not that the removed code is no longer needed.\nit was never correct to begin with and was written based on the incorrect assumetion that we could vary the cpu toplogy per numa nodes.\n\nthis is a common missunderstading that numa nodes and cpu socket are the same thing. they are not.\nthe auther assumed it was possible to have a different cpu toplogy per numa node but infact teh cpu toplgoy is vm wide and entirely independent form the virtual numa toplogy.\n\nThis is not the only case wehre those assumetion exits.\nthe data model that was created to model numa in nova allows use to constuct instance of the instatance_numa_toplogy object that cannot be requested form that api and that cannot be rendered into valid libvirt xml\n\nspecifying a different vcpu toplogy per numa node is an example of somethign that is not requestable via the api and not supporable in libvirt or any other hypervior.\n\nwe allso can model having different guest memroy pages size per numa node.\nthis is simiarly not requstable via the api but is actully supported by libvirt.\n\nso in trying to be overly generic they made some assumtion that where invalid which is the root cause of the bug. they assume that if the vcpu toplogy requested per numa node was different they should then clamp the socket/cores/threads to the lowest value requests and then filters the toplogy to any value that was \u003c\u003d the clamped values.\n\nthis was never the correct thing to do and its that filtering that is the root cause of the bug so we jsut remve all of the invalid code.\n\ni need to think about how to better capture that in the commit i guess but  that is why i just deleted the code.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9d5c48ce_7b548cc7","line":18,"in_reply_to":"e60aa1ae_7f140fe5","updated":"2021-03-29 16:54:41.000000000","message":"I\u0027ve tried to reproduce this and was unable to do so. Instances always a topology of $flavor.vcpu sockets, with 1 core per socket and 1 thread per core. If these optimizations ever were in place, they no longer are. I think it\u0027s okay to remove this logic.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"21958646810c43f3b20dd168c6d2023ac3fdc6fd","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fd39b91b_1f313601","line":18,"in_reply_to":"eb11b945_dbd9ea27","updated":"2021-02-03 06:23:14.000000000","message":"@Sean, I agree with that numa and socket shouldn\u0027t be same thing, also agree with that the original design isn\u0027t right.\n\nBut one question, can we say that those guest threads optimization is still valid for the 2 sockets with 2 numa node machine? If yes, then I would say we shouldn\u0027t break those optimization, I guess that is also what stephen talk about.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7518c451992a78d14755bda504a7aaa546867ca5","unresolved":true,"context_lines":[{"line_number":15,"context_line":"The presence of the code in nova that allowed the generation"},{"line_number":16,"context_line":"of these invalid configuratoin has now been removed as it"},{"line_number":17,"context_line":"broke the automatic selection of cpu topologies based"},{"line_number":18,"context_line":"on hw:max_[cpus|sockets|threads] flavor and image properties."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This change removed the incorrect code and related unit"},{"line_number":21,"context_line":"tests with assert nova could generate invalid topologies."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"e60aa1ae_7f140fe5","line":18,"in_reply_to":"fd39b91b_1f313601","updated":"2021-03-22 15:11:22.000000000","message":"i dont belive those possible optimaiatoin were ever in effect\n\nif anything i think the current code was pessimising the performance as we\nwere not prefering to match the guest toplogy to the host toplogy so as a result the guest\nschduler was operating on incorrect infomation.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"}],"nova/objects/instance_numa.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0b118d6574856d44a6081117715c16680169f921","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        # and the value of cpu_topology does not match the"},{"line_number":84,"context_line":"        # instance.vcpu_model.topology which is used to generate the"},{"line_number":85,"context_line":"        # vm topology in the libvirt driver. this should be removed in"},{"line_number":86,"context_line":"        # a future version."},{"line_number":87,"context_line":"        \u0027cpu_topology\u0027: obj_fields.ObjectField(\u0027VirtCPUTopology\u0027,"},{"line_number":88,"context_line":"                                               nullable\u003dTrue),"},{"line_number":89,"context_line":"        \u0027cpu_pinning_raw\u0027: obj_fields.DictOfIntegersField(nullable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"0fabc184_daa432f0","line":86,"updated":"2021-03-26 03:00:30.000000000","message":"this is a todo since i need to backport this and i cant do that if i actully\ndo the object change in this patch. ill see if i can do a followup patch to remove it\ntomorrow.","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        # and the value of cpu_topology does not match the"},{"line_number":84,"context_line":"        # instance.vcpu_model.topology which is used to generate the"},{"line_number":85,"context_line":"        # vm topology in the libvirt driver. this should be removed in"},{"line_number":86,"context_line":"        # a future version."},{"line_number":87,"context_line":"        \u0027cpu_topology\u0027: obj_fields.ObjectField(\u0027VirtCPUTopology\u0027,"},{"line_number":88,"context_line":"                                               nullable\u003dTrue),"},{"line_number":89,"context_line":"        \u0027cpu_pinning_raw\u0027: obj_fields.DictOfIntegersField(nullable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"a4d3d7fa_586f0745","line":86,"in_reply_to":"0fabc184_daa432f0","updated":"2021-03-29 16:54:41.000000000","message":"This is awfully longwinded. You could just say\n\n  TODO(sean-k-mooney): This is no longer used. Remove in v2.0\n\nMore context is available in the commit message.","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        # and the value of cpu_topology does not match the"},{"line_number":84,"context_line":"        # instance.vcpu_model.topology which is used to generate the"},{"line_number":85,"context_line":"        # vm topology in the libvirt driver. this should be removed in"},{"line_number":86,"context_line":"        # a future version."},{"line_number":87,"context_line":"        \u0027cpu_topology\u0027: obj_fields.ObjectField(\u0027VirtCPUTopology\u0027,"},{"line_number":88,"context_line":"                                               nullable\u003dTrue),"},{"line_number":89,"context_line":"        \u0027cpu_pinning_raw\u0027: obj_fields.DictOfIntegersField(nullable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bdada6dc_76be3ff9","line":86,"in_reply_to":"a4d3d7fa_586f0745","updated":"2021-03-29 18:50:53.000000000","message":"ya you are right i can.","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c709b0eb005ad10751ab1cccd49cebfe09cc4d0b","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        \u0027pagesize\u0027: obj_fields.IntegerField(nullable\u003dTrue,"},{"line_number":81,"context_line":"                                            default\u003dNone),"},{"line_number":82,"context_line":"        # TODO(sean-k-mooney): This is no longer used and should be"},{"line_number":83,"context_line":"        # removed in v2"},{"line_number":84,"context_line":"        \u0027cpu_topology\u0027: obj_fields.ObjectField(\u0027VirtCPUTopology\u0027,"},{"line_number":85,"context_line":"                                               nullable\u003dTrue),"},{"line_number":86,"context_line":"        \u0027cpu_pinning_raw\u0027: obj_fields.DictOfIntegersField(nullable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a8da9fb5_15e2863d","line":83,"range":{"start_line":83,"start_character":21,"end_line":83,"end_character":23},"updated":"2021-06-21 13:57:36.000000000","message":"nit: v2.0","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"}],"nova/tests/functional/libvirt/test_numa_servers.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # Validate the quota usage"},{"line_number":73,"context_line":"        if (filter_called_on_error and"},{"line_number":74,"context_line":"            end_status \u003d\u003d \u0027ACTIVE\u0027 and expected_usage):"},{"line_number":75,"context_line":"            quota_details \u003d self.api.get_quota_detail()"},{"line_number":76,"context_line":"            expected_core_usages \u003d expected_usage.get("},{"line_number":77,"context_line":"                \u0027VCPU\u0027, expected_usage.get(\u0027PCPU\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":2,"id":"d66b17a8_de4216d0","line":74,"updated":"2021-01-07 23:36:00.000000000","message":"Looks like an unrelated change?","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # Validate the quota usage"},{"line_number":73,"context_line":"        if (filter_called_on_error and"},{"line_number":74,"context_line":"            end_status \u003d\u003d \u0027ACTIVE\u0027 and expected_usage):"},{"line_number":75,"context_line":"            quota_details \u003d self.api.get_quota_detail()"},{"line_number":76,"context_line":"            expected_core_usages \u003d expected_usage.get("},{"line_number":77,"context_line":"                \u0027VCPU\u0027, expected_usage.get(\u0027PCPU\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":2,"id":"c66d29f8_8ce9a4eb","line":74,"in_reply_to":"ab282aec_54b29ee5","updated":"2021-01-13 17:30:26.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"35050bd0fa95738bff4757a48812fc3a3f387df0","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # Validate the quota usage"},{"line_number":73,"context_line":"        if (filter_called_on_error and"},{"line_number":74,"context_line":"            end_status \u003d\u003d \u0027ACTIVE\u0027 and expected_usage):"},{"line_number":75,"context_line":"            quota_details \u003d self.api.get_quota_detail()"},{"line_number":76,"context_line":"            expected_core_usages \u003d expected_usage.get("},{"line_number":77,"context_line":"                \u0027VCPU\u0027, expected_usage.get(\u0027PCPU\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":2,"id":"ab282aec_54b29ee5","line":74,"in_reply_to":"d66b17a8_de4216d0","updated":"2021-01-08 17:42:46.000000000","message":"yes and no.\nthere is a latent bug.\n\nthe expected usage is ment to be optional \nwhich is why we have  if expected_usage: on line 89 below.\nbut this code unconditionally uses it which is a bug.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"35050bd0fa95738bff4757a48812fc3a3f387df0","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        if (filter_called_on_error and"},{"line_number":74,"context_line":"            end_status \u003d\u003d \u0027ACTIVE\u0027 and expected_usage):"},{"line_number":75,"context_line":"            quota_details \u003d self.api.get_quota_detail()"},{"line_number":76,"context_line":"            expected_core_usages \u003d expected_usage.get("},{"line_number":77,"context_line":"                \u0027VCPU\u0027, expected_usage.get(\u0027PCPU\u0027, 0))"},{"line_number":78,"context_line":"            self.assertEqual(expected_core_usages,"},{"line_number":79,"context_line":"                             quota_details[\u0027cores\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"4422a578_72f2c1b1","line":76,"range":{"start_line":76,"start_character":35,"end_line":76,"end_character":49},"updated":"2021-01-08 17:42:46.000000000","message":"this will fail if the optional expected usageis not passed.\n\nfor these tests i dont care about the usage for placement or quotas \nso i am fix this to make it actully optional again","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if (filter_called_on_error and"},{"line_number":74,"context_line":"            end_status \u003d\u003d \u0027ACTIVE\u0027 and expected_usage):"},{"line_number":75,"context_line":"            quota_details \u003d self.api.get_quota_detail()"},{"line_number":76,"context_line":"            expected_core_usages \u003d expected_usage.get("},{"line_number":77,"context_line":"                \u0027VCPU\u0027, expected_usage.get(\u0027PCPU\u0027, 0))"},{"line_number":78,"context_line":"            self.assertEqual(expected_core_usages,"},{"line_number":79,"context_line":"                             quota_details[\u0027cores\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9c79c6fe_72c93e20","line":76,"range":{"start_line":76,"start_character":35,"end_line":76,"end_character":49},"in_reply_to":"4422a578_72f2c1b1","updated":"2021-01-13 17:30:26.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"35050bd0fa95738bff4757a48812fc3a3f387df0","unresolved":true,"context_lines":[{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            self.assertFalse(self.mock_filter.called)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if expected_usage:"},{"line_number":90,"context_line":"            compute_usage \u003d self.placement.get("},{"line_number":91,"context_line":"                \u0027/resource_providers/%s/usages\u0027 % compute_rp_uuid).body["},{"line_number":92,"context_line":"                    \u0027usages\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"655fabc1_b38df97c","line":89,"range":{"start_line":89,"start_character":5,"end_line":89,"end_character":26},"updated":"2021-01-08 17:42:46.000000000","message":"this is the check to see if its set.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            self.assertFalse(self.mock_filter.called)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if expected_usage:"},{"line_number":90,"context_line":"            compute_usage \u003d self.placement.get("},{"line_number":91,"context_line":"                \u0027/resource_providers/%s/usages\u0027 % compute_rp_uuid).body["},{"line_number":92,"context_line":"                    \u0027usages\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"cd61ca71_7f5e2834","line":89,"range":{"start_line":89,"start_character":5,"end_line":89,"end_character":26},"in_reply_to":"655fabc1_b38df97c","updated":"2021-01-13 17:30:26.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        self.assertEqual("},{"line_number":156,"context_line":"            inst.numa_topology.cells[0].cpu_topology.to_dict(),"},{"line_number":157,"context_line":"            inst.numa_topology.cells[1].cpu_topology.to_dict())"},{"line_number":158,"context_line":"        # FIXME(sean-k-mooney): the embedded vcputopology in the instance"},{"line_number":159,"context_line":"        # numa topology object is not correct."},{"line_number":160,"context_line":"        # self.assertLessEqual("},{"line_number":161,"context_line":"        #     inst.numa_topology.cells[0].cpu_topology.sockets, 2)"},{"line_number":162,"context_line":"        # self.assertLessEqual("}],"source_content_type":"text/x-python","patch_set":2,"id":"77ce9b37_acafa25e","line":159,"range":{"start_line":158,"start_character":1,"end_line":159,"end_character":46},"updated":"2021-01-13 17:30:26.000000000","message":"I\u0027m pretty sure I made this observation in another bug. There\u0027s also a CPU topology configured on the instance via \u0027instance.vcpu_model.cpu_topology\u0027, i.e. the \u0027VirtCPUModel\u0027 objects acts as an intermediary between \u0027Instance\u0027 and \u0027VirtCPUTopology\u0027. This seems to be what is actually used [1][2]. The information on the NUMA node is only used for scheduling [3][4].\n\n[1] https://github.com/openstack/nova/blob/e6f5e814050a19d6f027037424556b2889514ec3/nova/virt/libvirt/driver.py#L5878-L5914\n[2] https://github.com/openstack/nova/blob/e6f5e814050a19d6f027037424556b2889514ec3/nova/virt/libvirt/driver.py#L5916-L5941\n[3] https://github.com/openstack/nova/blob/e6f5e814050a19d6f027037424556b2889514ec3/nova/virt/hardware.py#L1015-L1019\n[4] https://github.com/openstack/nova/blob/e6f5e814050a19d6f027037424556b2889514ec3/nova/virt/hardware.py#L616-L636","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        self.assertEqual("},{"line_number":156,"context_line":"            inst.numa_topology.cells[0].cpu_topology.to_dict(),"},{"line_number":157,"context_line":"            inst.numa_topology.cells[1].cpu_topology.to_dict())"},{"line_number":158,"context_line":"        # FIXME(sean-k-mooney): the embedded vcputopology in the instance"},{"line_number":159,"context_line":"        # numa topology object is not correct."},{"line_number":160,"context_line":"        # self.assertLessEqual("},{"line_number":161,"context_line":"        #     inst.numa_topology.cells[0].cpu_topology.sockets, 2)"},{"line_number":162,"context_line":"        # self.assertLessEqual("}],"source_content_type":"text/x-python","patch_set":2,"id":"f465810b_22f12d22","line":159,"range":{"start_line":158,"start_character":1,"end_line":159,"end_character":46},"in_reply_to":"539c0df8_a1cda2c5","updated":"2021-03-29 16:54:41.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25eb5d6242e12066e2450b5f0a7efb7f96f50dae","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        self.assertEqual("},{"line_number":156,"context_line":"            inst.numa_topology.cells[0].cpu_topology.to_dict(),"},{"line_number":157,"context_line":"            inst.numa_topology.cells[1].cpu_topology.to_dict())"},{"line_number":158,"context_line":"        # FIXME(sean-k-mooney): the embedded vcputopology in the instance"},{"line_number":159,"context_line":"        # numa topology object is not correct."},{"line_number":160,"context_line":"        # self.assertLessEqual("},{"line_number":161,"context_line":"        #     inst.numa_topology.cells[0].cpu_topology.sockets, 2)"},{"line_number":162,"context_line":"        # self.assertLessEqual("}],"source_content_type":"text/x-python","patch_set":2,"id":"539c0df8_a1cda2c5","line":159,"range":{"start_line":158,"start_character":1,"end_line":159,"end_character":46},"in_reply_to":"77ce9b37_acafa25e","updated":"2021-01-13 18:52:09.000000000","message":"it is another bug but we were never ment to use that as part of the xml generation and techniclaly it should never have been stored in the numa toplogy object to begin with.\n\nthe instance.vcpu_model.cpu_topology is the only one we should consider.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        host_info \u003d fakelibvirt.HostInfo(cpu_nodes\u003d2, cpu_sockets\u003d1,"},{"line_number":132,"context_line":"                                         cpu_cores\u003d4, cpu_threads\u003d1,"},{"line_number":133,"context_line":"                                         kB_mem\u003d(1024 * 1024 * 16))  # GB"},{"line_number":134,"context_line":"        # create 1024 * 2 MB huge pages, and allocate the rest of the 16 GB as"},{"line_number":135,"context_line":"        # small pages"},{"line_number":136,"context_line":"        for cell in host_info.numa_topology.cells:"}],"source_content_type":"text/x-python","patch_set":4,"id":"82321846_1cb92355","line":133,"updated":"2021-04-16 16:29:15.000000000","message":"Whoops, you undid the hard work of the previous change RE: formatting","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2bfd77d2c920b14b3d70f5cb798370dbf61d4c21","unresolved":true,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        host_info \u003d fakelibvirt.HostInfo(cpu_nodes\u003d2, cpu_sockets\u003d1,"},{"line_number":132,"context_line":"                                         cpu_cores\u003d4, cpu_threads\u003d1,"},{"line_number":133,"context_line":"                                         kB_mem\u003d(1024 * 1024 * 16))  # GB"},{"line_number":134,"context_line":"        # create 1024 * 2 MB huge pages, and allocate the rest of the 16 GB as"},{"line_number":135,"context_line":"        # small pages"},{"line_number":136,"context_line":"        for cell in host_info.numa_topology.cells:"}],"source_content_type":"text/x-python","patch_set":4,"id":"c5f0da96_e63260f8","line":133,"in_reply_to":"82321846_1cb92355","updated":"2021-04-29 00:17:33.000000000","message":"hum not sure why this got reverted but ya ill fix it tomorrow","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":145,"context_line":"        extra_spec \u003d {"},{"line_number":146,"context_line":"            \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":147,"context_line":"            \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":148,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027, \u0027hw:mem_page_size\u0027: \u0027small\u0027}"},{"line_number":149,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)"},{"line_number":150,"context_line":"        server \u003d self._run_build_test(flavor_id)"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"f7673bdb_92c21bc0","line":148,"updated":"2021-04-16 16:29:15.000000000","message":"Ditto here. As noted previously, I still don\u0027t agree with adding page size configuration here since it\u0027s additional cognitive complexity, even if it\u0027s what we expect in the real world, but I\u0027m not going to block on that. The formatting change needs fixing though","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2bfd77d2c920b14b3d70f5cb798370dbf61d4c21","unresolved":true,"context_lines":[{"line_number":145,"context_line":"        extra_spec \u003d {"},{"line_number":146,"context_line":"            \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":147,"context_line":"            \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":148,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027, \u0027hw:mem_page_size\u0027: \u0027small\u0027}"},{"line_number":149,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)"},{"line_number":150,"context_line":"        server \u003d self._run_build_test(flavor_id)"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7799b8e1_1538e31a","line":148,"in_reply_to":"f7673bdb_92c21bc0","updated":"2021-04-29 00:17:33.000000000","message":"ya ill fix the formatting.\nand get rid of the huge page toplogy not sure why that is back i must of rebased this wrong again.\n\ni can remove it but honestly we untill i add the logic to default all numa instance to mem_page_size\u003dany\nwe really shoudl be logging an warning anytime we launch a vm with a numa toplogy and dont have mem_page_size defiend.","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":303,"context_line":"        # sanity check the instance topology"},{"line_number":304,"context_line":"        inst \u003d objects.Instance.get_by_uuid(self.ctxt, server[\u0027id\u0027])"},{"line_number":305,"context_line":"        self.assertEqual(1, len(inst.numa_topology.cells))"},{"line_number":306,"context_line":"        self.assertEqual(4, inst.vcpu_model.topology.sockets)"},{"line_number":307,"context_line":"        self.assertEqual({0}, inst.numa_topology.cells[0].cpuset)"},{"line_number":308,"context_line":"        self.assertEqual({1, 2, 3}, inst.numa_topology.cells[0].pcpuset)"},{"line_number":309,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":4,"id":"a8a76d93_00e0cdf0","line":306,"updated":"2021-04-16 16:29:15.000000000","message":"Personally, I would just remove this. As you note, guest CPU topology !\u003d guest NUMA topology so there\u0027s no reason to check CPU topology here","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2bfd77d2c920b14b3d70f5cb798370dbf61d4c21","unresolved":true,"context_lines":[{"line_number":303,"context_line":"        # sanity check the instance topology"},{"line_number":304,"context_line":"        inst \u003d objects.Instance.get_by_uuid(self.ctxt, server[\u0027id\u0027])"},{"line_number":305,"context_line":"        self.assertEqual(1, len(inst.numa_topology.cells))"},{"line_number":306,"context_line":"        self.assertEqual(4, inst.vcpu_model.topology.sockets)"},{"line_number":307,"context_line":"        self.assertEqual({0}, inst.numa_topology.cells[0].cpuset)"},{"line_number":308,"context_line":"        self.assertEqual({1, 2, 3}, inst.numa_topology.cells[0].pcpuset)"},{"line_number":309,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":4,"id":"7d7e9b83_08287d77","line":306,"in_reply_to":"a8a76d93_00e0cdf0","updated":"2021-04-29 00:17:33.000000000","message":"well this test is not really about numa either but i can remvoe the virtual toplogy if you want i feel like it adds value but really this logic is just asserting our default cpu toploiges which will allocate 1 socket per flavor.vcpu so i guess it not really relevent here.","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":514,"context_line":"        self.assertEqual(1, len(inst.numa_topology.cells))"},{"line_number":515,"context_line":"        self.assertEqual(2, inst.vcpu_model.topology.sockets)"},{"line_number":516,"context_line":"        self.assertEqual(1, inst.vcpu_model.topology.cores)"},{"line_number":517,"context_line":"        self.assertEqual(1, inst.vcpu_model.topology.threads)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def test_create_server_with_pcpu_fails(self):"},{"line_number":520,"context_line":"        \"\"\"Create a pinned instance on a host with no PCPUs."}],"source_content_type":"text/x-python","patch_set":4,"id":"e91228f5_f43445c9","line":517,"updated":"2021-04-16 16:29:15.000000000","message":"Ditto","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c709b0eb005ad10751ab1cccd49cebfe09cc4d0b","unresolved":true,"context_lines":[{"line_number":138,"context_line":"            \u0027hw:cpu_max_cores\u0027: \u00272\u0027,"},{"line_number":139,"context_line":"            \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":140,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":141,"context_line":"            \u0027hw:mem_page_size\u0027: \u0027any\u0027"},{"line_number":142,"context_line":"        }"},{"line_number":143,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)"},{"line_number":144,"context_line":"        self._run_build_test(flavor_id, end_status\u003d\u0027ERROR\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"4bb5fb9f_fa3fa64b","side":"PARENT","line":141,"updated":"2021-06-21 13:57:36.000000000","message":"why are you removing this ?","commit_id":"fe25fa13e0572aafb62b28bf7fa843a1860e5010"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a51ce80d0b6c0151b23a0c43ff592f98d6699d2","unresolved":true,"context_lines":[{"line_number":138,"context_line":"            \u0027hw:cpu_max_cores\u0027: \u00272\u0027,"},{"line_number":139,"context_line":"            \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":140,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":141,"context_line":"            \u0027hw:mem_page_size\u0027: \u0027any\u0027"},{"line_number":142,"context_line":"        }"},{"line_number":143,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)"},{"line_number":144,"context_line":"        self._run_build_test(flavor_id, end_status\u003d\u0027ERROR\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"54e1333d_9bc2e9b3","side":"PARENT","line":141,"in_reply_to":"4bb5fb9f_fa3fa64b","updated":"2021-06-21 14:22:03.000000000","message":"I guess that\u0027s because of my complaint that explicit page size selection wasn\u0027t related to this bug and should be excluded [1]. It probably should have been done in the preceding patch but that\u0027s already winding through the gate now so...\n\n[1] https://review.opendev.org/c/openstack/nova/+/769601/4/nova/tests/functional/libvirt/test_numa_servers.py#147","commit_id":"fe25fa13e0572aafb62b28bf7fa843a1860e5010"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5de555d47d28e6723e4acc645ff15d938fc542d2","unresolved":true,"context_lines":[{"line_number":138,"context_line":"            \u0027hw:cpu_max_cores\u0027: \u00272\u0027,"},{"line_number":139,"context_line":"            \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":140,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":141,"context_line":"            \u0027hw:mem_page_size\u0027: \u0027any\u0027"},{"line_number":142,"context_line":"        }"},{"line_number":143,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)"},{"line_number":144,"context_line":"        self._run_build_test(flavor_id, end_status\u003d\u0027ERROR\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"4a6d710d_3426fc9b","side":"PARENT","line":141,"in_reply_to":"4bb5fb9f_fa3fa64b","updated":"2021-06-21 14:17:06.000000000","message":"tl;dr stephen asked me too.\n\nthe bug in question is related to pinned guest and while any is desireable its not required to repoduce this so stephen wanted me to remvoe it.","commit_id":"fe25fa13e0572aafb62b28bf7fa843a1860e5010"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"93fbcaaa9ebb8e86b6088ebf76afa525a6485ea3","unresolved":true,"context_lines":[{"line_number":138,"context_line":"            \u0027hw:cpu_max_cores\u0027: \u00272\u0027,"},{"line_number":139,"context_line":"            \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":140,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":141,"context_line":"            \u0027hw:mem_page_size\u0027: \u0027any\u0027"},{"line_number":142,"context_line":"        }"},{"line_number":143,"context_line":"        flavor_id \u003d self._create_flavor(vcpu\u003d8, extra_spec\u003dextra_spec)"},{"line_number":144,"context_line":"        self._run_build_test(flavor_id, end_status\u003d\u0027ERROR\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fedc9d9f_41656310","side":"PARENT","line":141,"in_reply_to":"54e1333d_9bc2e9b3","updated":"2021-06-22 09:24:34.000000000","message":"OK, fair enough, let\u0027s pretend I haven\u0027t seen it.","commit_id":"fe25fa13e0572aafb62b28bf7fa843a1860e5010"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c709b0eb005ad10751ab1cccd49cebfe09cc4d0b","unresolved":true,"context_lines":[{"line_number":3170,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3171,"context_line":""},{"line_number":3172,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3173,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3174,"context_line":"        got_pinning \u003d {x: x for x in range(0, 3)}"},{"line_number":3175,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3176,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"0448d50d_c5531322","line":3173,"updated":"2021-06-21 13:57:36.000000000","message":"nit : I wish we could also have verified the instance neested VCPUModel field, but given it\u0027s just a unittest, it\u0027s not needed (and you look at it in the functest)","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5de555d47d28e6723e4acc645ff15d938fc542d2","unresolved":true,"context_lines":[{"line_number":3170,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3171,"context_line":""},{"line_number":3172,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3173,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3174,"context_line":"        got_pinning \u003d {x: x for x in range(0, 3)}"},{"line_number":3175,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3176,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1578590c_4fd6d38c","line":3173,"in_reply_to":"0448d50d_c5531322","updated":"2021-06-21 14:17:06.000000000","message":"i think i had this at one point but we have dedicated test for that so i dont think that is required here.\n\nthis is ment to be asserting behaviour abound the cpu pinning not the cpu toplogy which is indepent of if cpu pinning is used or not.\n\nthe previous assertion related to the numa_topoloyg.cpu_topology were incorrect anyway. the default topology if you did not specify anything else would have been socket\u003d3,cores\u003d1,threads\u003d1. that however is technially unspecified and driver dependent. the hardware module is ment to be driver independent so we should not really make assertion about how libvirt will default the VCPUModel atributes in this file.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"93fbcaaa9ebb8e86b6088ebf76afa525a6485ea3","unresolved":true,"context_lines":[{"line_number":3170,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3171,"context_line":""},{"line_number":3172,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3173,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3174,"context_line":"        got_pinning \u003d {x: x for x in range(0, 3)}"},{"line_number":3175,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3176,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"4ba447a1_dc9e8e2f","line":3173,"in_reply_to":"1578590c_4fd6d38c","updated":"2021-06-22 09:24:34.000000000","message":"Yeah, agreed like I said.\nWe could even remove this assertion, that\u0027s just my point.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c709b0eb005ad10751ab1cccd49cebfe09cc4d0b","unresolved":true,"context_lines":[{"line_number":3225,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3226,"context_line":""},{"line_number":3227,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3228,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3229,"context_line":"        got_pinning \u003d {x: x for x in range(0, 4)}"},{"line_number":3230,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3231,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"d1393086_6d0eb666","line":3228,"updated":"2021-06-21 13:57:36.000000000","message":"technically, you\u0027ll need to remove this line (and the others) once you remove the field, so I\u0027m not sure you need to verify whether the field is used, but meh.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a51ce80d0b6c0151b23a0c43ff592f98d6699d2","unresolved":true,"context_lines":[{"line_number":3225,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3226,"context_line":""},{"line_number":3227,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3228,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3229,"context_line":"        got_pinning \u003d {x: x for x in range(0, 4)}"},{"line_number":3230,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3231,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"41676619_cb0899b0","line":3228,"in_reply_to":"172ea71c_4bfb689a","updated":"2021-06-21 14:22:03.000000000","message":"I think there\u0027s value in ensuring this field is no longer set, just so people don\u0027t use it accidentally (as they were doing in places)","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"93fbcaaa9ebb8e86b6088ebf76afa525a6485ea3","unresolved":true,"context_lines":[{"line_number":3225,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3226,"context_line":""},{"line_number":3227,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3228,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3229,"context_line":"        got_pinning \u003d {x: x for x in range(0, 4)}"},{"line_number":3230,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3231,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"8865343f_4fc4f6d1","line":3228,"in_reply_to":"41676619_cb0899b0","updated":"2021-06-22 09:24:34.000000000","message":"yup, agreed, just a thought.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5de555d47d28e6723e4acc645ff15d938fc542d2","unresolved":true,"context_lines":[{"line_number":3225,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell(host_pin, inst_pin, limits)"},{"line_number":3226,"context_line":""},{"line_number":3227,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":3228,"context_line":"        self.assertNotIn(\u0027cpu_topology\u0027, inst_pin)"},{"line_number":3229,"context_line":"        got_pinning \u003d {x: x for x in range(0, 4)}"},{"line_number":3230,"context_line":"        self.assertEqual(got_pinning, inst_pin.cpu_pinning)"},{"line_number":3231,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"172ea71c_4bfb689a","line":3228,"in_reply_to":"d1393086_6d0eb666","updated":"2021-06-21 14:17:06.000000000","message":"well yes but for now we want to assert that the to be removed filed is nolonger used.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"}],"nova/virt/hardware.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":589,"context_line":"    :returns: an objects.VirtCPUTopology instance for best topology"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    return _get_desirable_cpu_topologies("},{"line_number":592,"context_line":"        flavor, image_meta, allow_threads,)[0]"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"def _numa_cell_supports_pagesize_request(host_cell, inst_cell):"}],"source_content_type":"text/x-python","patch_set":2,"id":"cdeb3fef_9fdff9ea","line":592,"range":{"start_line":592,"start_character":41,"end_line":592,"end_character":42},"updated":"2021-01-13 17:30:26.000000000","message":"nit","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"aacec8ae0d6103a1f991df9669867ffb6de10468","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    :returns: an objects.VirtCPUTopology instance for best topology"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    return _get_desirable_cpu_topologies("},{"line_number":592,"context_line":"        flavor, image_meta, allow_threads,)[0]"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"def _numa_cell_supports_pagesize_request(host_cell, inst_cell):"}],"source_content_type":"text/x-python","patch_set":2,"id":"644dbb84_b6576472","line":592,"range":{"start_line":592,"start_character":41,"end_line":592,"end_character":42},"in_reply_to":"cdeb3fef_9fdff9ea","updated":"2021-03-25 20:31:19.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":698,"context_line":"        \"\"\""},{"line_number":699,"context_line":"        return len(instance_cell) % threads_per_core"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def _threads(instance_cell, threads_per_core):"},{"line_number":702,"context_line":"        \"\"\"Threads to expose to the instance via the VirtCPUTopology."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        This is calculated by taking the GCD of the number of threads we are"},{"line_number":705,"context_line":"        considering at the moment, and the number of orphans. An example for"},{"line_number":706,"context_line":"            instance_cell \u003d 6"},{"line_number":707,"context_line":"            threads_per_core \u003d 4"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        So we can fit the instance as such:"},{"line_number":710,"context_line":"            [(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11)]"},{"line_number":711,"context_line":"              x  x  x  x    x  x"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        We can\u0027t expose 4 threads, as that will not be a valid topology (all"},{"line_number":714,"context_line":"        cores exposed to the guest have to have an equal number of threads),"},{"line_number":715,"context_line":"        and 1 would be too restrictive, but we want all threads that guest sees"},{"line_number":716,"context_line":"        to be on the same physical core, so we take GCD of 4 (max number of"},{"line_number":717,"context_line":"        threads) and 2 (number of \u0027orphan\u0027 CPUs) and get 2 as the number of"},{"line_number":718,"context_line":"        threads."},{"line_number":719,"context_line":"        \"\"\""},{"line_number":720,"context_line":"        return math.gcd(threads_per_core, _orphans(instance_cell,"},{"line_number":721,"context_line":"                                                   threads_per_core))"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def _get_pinning(threads_no, sibling_set, instance_cores):"},{"line_number":724,"context_line":"        \"\"\"Determines pCPUs/vCPUs mapping"}],"source_content_type":"text/x-python","patch_set":2,"id":"7fe34b2d_b3e26fd6","line":721,"range":{"start_line":701,"start_character":0,"end_line":721,"end_character":69},"updated":"2021-01-13 17:30:26.000000000","message":"I think this can be removed now","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        \"\"\""},{"line_number":699,"context_line":"        return len(instance_cell) % threads_per_core"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def _threads(instance_cell, threads_per_core):"},{"line_number":702,"context_line":"        \"\"\"Threads to expose to the instance via the VirtCPUTopology."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        This is calculated by taking the GCD of the number of threads we are"},{"line_number":705,"context_line":"        considering at the moment, and the number of orphans. An example for"},{"line_number":706,"context_line":"            instance_cell \u003d 6"},{"line_number":707,"context_line":"            threads_per_core \u003d 4"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        So we can fit the instance as such:"},{"line_number":710,"context_line":"            [(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11)]"},{"line_number":711,"context_line":"              x  x  x  x    x  x"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        We can\u0027t expose 4 threads, as that will not be a valid topology (all"},{"line_number":714,"context_line":"        cores exposed to the guest have to have an equal number of threads),"},{"line_number":715,"context_line":"        and 1 would be too restrictive, but we want all threads that guest sees"},{"line_number":716,"context_line":"        to be on the same physical core, so we take GCD of 4 (max number of"},{"line_number":717,"context_line":"        threads) and 2 (number of \u0027orphan\u0027 CPUs) and get 2 as the number of"},{"line_number":718,"context_line":"        threads."},{"line_number":719,"context_line":"        \"\"\""},{"line_number":720,"context_line":"        return math.gcd(threads_per_core, _orphans(instance_cell,"},{"line_number":721,"context_line":"                                                   threads_per_core))"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def _get_pinning(threads_no, sibling_set, instance_cores):"},{"line_number":724,"context_line":"        \"\"\"Determines pCPUs/vCPUs mapping"}],"source_content_type":"text/x-python","patch_set":2,"id":"249ff6a5_504db424","line":721,"range":{"start_line":701,"start_character":0,"end_line":721,"end_character":69},"in_reply_to":"24076511_0d2ba71e","updated":"2021-03-29 16:54:41.000000000","message":"Agreed. That makes sense to me","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"aacec8ae0d6103a1f991df9669867ffb6de10468","unresolved":true,"context_lines":[{"line_number":698,"context_line":"        \"\"\""},{"line_number":699,"context_line":"        return len(instance_cell) % threads_per_core"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def _threads(instance_cell, threads_per_core):"},{"line_number":702,"context_line":"        \"\"\"Threads to expose to the instance via the VirtCPUTopology."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        This is calculated by taking the GCD of the number of threads we are"},{"line_number":705,"context_line":"        considering at the moment, and the number of orphans. An example for"},{"line_number":706,"context_line":"            instance_cell \u003d 6"},{"line_number":707,"context_line":"            threads_per_core \u003d 4"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        So we can fit the instance as such:"},{"line_number":710,"context_line":"            [(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11)]"},{"line_number":711,"context_line":"              x  x  x  x    x  x"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        We can\u0027t expose 4 threads, as that will not be a valid topology (all"},{"line_number":714,"context_line":"        cores exposed to the guest have to have an equal number of threads),"},{"line_number":715,"context_line":"        and 1 would be too restrictive, but we want all threads that guest sees"},{"line_number":716,"context_line":"        to be on the same physical core, so we take GCD of 4 (max number of"},{"line_number":717,"context_line":"        threads) and 2 (number of \u0027orphan\u0027 CPUs) and get 2 as the number of"},{"line_number":718,"context_line":"        threads."},{"line_number":719,"context_line":"        \"\"\""},{"line_number":720,"context_line":"        return math.gcd(threads_per_core, _orphans(instance_cell,"},{"line_number":721,"context_line":"                                                   threads_per_core))"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def _get_pinning(threads_no, sibling_set, instance_cores):"},{"line_number":724,"context_line":"        \"\"\"Determines pCPUs/vCPUs mapping"}],"source_content_type":"text/x-python","patch_set":2,"id":"24076511_0d2ba71e","line":721,"range":{"start_line":701,"start_character":0,"end_line":721,"end_character":69},"in_reply_to":"7fe34b2d_b3e26fd6","updated":"2021-03-25 20:31:19.000000000","message":"i have remvoed it but i have not removed the toplogy field form the numa object in this change.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":935,"context_line":"            cpuset_reserved \u003d _get_reserved("},{"line_number":936,"context_line":"                sibling_set, pinning, num_cpu_reserved\u003dnum_cpu_reserved)"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        threads_no \u003d _threads(instance_cell, threads_no)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    if not pinning or (num_cpu_reserved and not cpuset_reserved):"},{"line_number":941,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":2,"id":"b959c1f4_3d9d22a5","line":938,"updated":"2021-01-13 17:30:26.000000000","message":"This too...","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"aacec8ae0d6103a1f991df9669867ffb6de10468","unresolved":false,"context_lines":[{"line_number":935,"context_line":"            cpuset_reserved \u003d _get_reserved("},{"line_number":936,"context_line":"                sibling_set, pinning, num_cpu_reserved\u003dnum_cpu_reserved)"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        threads_no \u003d _threads(instance_cell, threads_no)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    if not pinning or (num_cpu_reserved and not cpuset_reserved):"},{"line_number":941,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":2,"id":"af4fbb34_c3bc7892","line":938,"in_reply_to":"b959c1f4_3d9d22a5","updated":"2021-03-25 20:31:19.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":946,"context_line":"                                       cores\u003dlen(pinning) // threads_no,"},{"line_number":947,"context_line":"                                       threads\u003dthreads_no)"},{"line_number":948,"context_line":"    instance_cell.pin_vcpus(*pinning)"},{"line_number":949,"context_line":"    instance_cell.cpu_topology \u003d topology"},{"line_number":950,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":951,"context_line":"    instance_cell.cpuset_reserved \u003d cpuset_reserved"},{"line_number":952,"context_line":"    return instance_cell"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c8fcde3_bb45f106","line":949,"range":{"start_line":949,"start_character":1,"end_line":949,"end_character":41},"updated":"2021-01-13 17:30:26.000000000","message":"Because this will no longer be used anywhere can therefore be dropped","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"aacec8ae0d6103a1f991df9669867ffb6de10468","unresolved":true,"context_lines":[{"line_number":946,"context_line":"                                       cores\u003dlen(pinning) // threads_no,"},{"line_number":947,"context_line":"                                       threads\u003dthreads_no)"},{"line_number":948,"context_line":"    instance_cell.pin_vcpus(*pinning)"},{"line_number":949,"context_line":"    instance_cell.cpu_topology \u003d topology"},{"line_number":950,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":951,"context_line":"    instance_cell.cpuset_reserved \u003d cpuset_reserved"},{"line_number":952,"context_line":"    return instance_cell"}],"source_content_type":"text/x-python","patch_set":2,"id":"13fc4c97_66f0950d","line":949,"range":{"start_line":949,"start_character":1,"end_line":949,"end_character":41},"in_reply_to":"065b7ea7_9fc52d0b","updated":"2021-03-25 20:31:19.000000000","message":"i have removed setting it here but ill update the numa object sepereatly.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":946,"context_line":"                                       cores\u003dlen(pinning) // threads_no,"},{"line_number":947,"context_line":"                                       threads\u003dthreads_no)"},{"line_number":948,"context_line":"    instance_cell.pin_vcpus(*pinning)"},{"line_number":949,"context_line":"    instance_cell.cpu_topology \u003d topology"},{"line_number":950,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":951,"context_line":"    instance_cell.cpuset_reserved \u003d cpuset_reserved"},{"line_number":952,"context_line":"    return instance_cell"}],"source_content_type":"text/x-python","patch_set":2,"id":"06b11056_98f61531","line":949,"range":{"start_line":949,"start_character":1,"end_line":949,"end_character":41},"in_reply_to":"13fc4c97_66f0950d","updated":"2021-03-29 16:54:41.000000000","message":"Yes, you can\u0027t remove the field but you can stop setting it.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25eb5d6242e12066e2450b5f0a7efb7f96f50dae","unresolved":true,"context_lines":[{"line_number":946,"context_line":"                                       cores\u003dlen(pinning) // threads_no,"},{"line_number":947,"context_line":"                                       threads\u003dthreads_no)"},{"line_number":948,"context_line":"    instance_cell.pin_vcpus(*pinning)"},{"line_number":949,"context_line":"    instance_cell.cpu_topology \u003d topology"},{"line_number":950,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":951,"context_line":"    instance_cell.cpuset_reserved \u003d cpuset_reserved"},{"line_number":952,"context_line":"    return instance_cell"}],"source_content_type":"text/x-python","patch_set":2,"id":"065b7ea7_9fc52d0b","line":949,"range":{"start_line":949,"start_character":1,"end_line":949,"end_character":41},"in_reply_to":"8c8fcde3_bb45f106","updated":"2021-01-13 18:52:09.000000000","message":"i planned to remove that in a seperate patch althogh i could do that yes.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":694,"context_line":"        instance pinned to a thread \"alone\" (with id 6), and we would have one"},{"line_number":695,"context_line":"        \u0027orphan\u0027 vcpu."},{"line_number":696,"context_line":"        \"\"\""},{"line_number":697,"context_line":"        return len(instance_cell) % threads_per_core"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def _get_pinning(threads_no, sibling_set, instance_cores):"},{"line_number":700,"context_line":"        \"\"\"Determines pCPUs/vCPUs mapping"}],"source_content_type":"text/x-python","patch_set":3,"id":"e14e9dc3_cf264da5","line":697,"updated":"2021-03-29 16:54:41.000000000","message":"This can go now too","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":true,"context_lines":[{"line_number":694,"context_line":"        instance pinned to a thread \"alone\" (with id 6), and we would have one"},{"line_number":695,"context_line":"        \u0027orphan\u0027 vcpu."},{"line_number":696,"context_line":"        \"\"\""},{"line_number":697,"context_line":"        return len(instance_cell) % threads_per_core"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def _get_pinning(threads_no, sibling_set, instance_cores):"},{"line_number":700,"context_line":"        \"\"\"Determines pCPUs/vCPUs mapping"}],"source_content_type":"text/x-python","patch_set":3,"id":"28caf0b7_a2ad09a6","line":697,"in_reply_to":"e14e9dc3_cf264da5","updated":"2021-03-29 18:50:53.000000000","message":"i guess probaly can be removed assume _threads was the last caller.\nill take a look","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":4632,"context_line":"        if cpu is None:"},{"line_number":4633,"context_line":"            return None"},{"line_number":4634,"context_line":""},{"line_number":4635,"context_line":"        topology \u003d hardware.get_best_cpu_topology("},{"line_number":4636,"context_line":"                flavor, image_meta)"},{"line_number":4637,"context_line":""},{"line_number":4638,"context_line":"        cpu.sockets \u003d topology.sockets"},{"line_number":4639,"context_line":"        cpu.cores \u003d topology.cores"}],"source_content_type":"text/x-python","patch_set":2,"id":"28abe36f_389058ba","line":4636,"range":{"start_line":4635,"start_character":0,"end_line":4636,"end_character":35},"updated":"2021-01-13 17:30:26.000000000","message":"nit: this can fit on one line now","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25eb5d6242e12066e2450b5f0a7efb7f96f50dae","unresolved":false,"context_lines":[{"line_number":4632,"context_line":"        if cpu is None:"},{"line_number":4633,"context_line":"            return None"},{"line_number":4634,"context_line":""},{"line_number":4635,"context_line":"        topology \u003d hardware.get_best_cpu_topology("},{"line_number":4636,"context_line":"                flavor, image_meta)"},{"line_number":4637,"context_line":""},{"line_number":4638,"context_line":"        cpu.sockets \u003d topology.sockets"},{"line_number":4639,"context_line":"        cpu.cores \u003d topology.cores"}],"source_content_type":"text/x-python","patch_set":2,"id":"f556f143_4258c8f0","line":4636,"range":{"start_line":4635,"start_character":0,"end_line":4636,"end_character":35},"in_reply_to":"28abe36f_389058ba","updated":"2021-01-13 18:52:09.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":4813,"context_line":"        raise exception.InvalidCPUInfo(msg)"},{"line_number":4814,"context_line":""},{"line_number":4815,"context_line":"    def _get_guest_cpu_config(self, flavor, image_meta,"},{"line_number":4816,"context_line":"                              guest_cpu_numa_config, instance_numa_topology):"},{"line_number":4817,"context_line":"        arch \u003d libvirt_utils.get_arch(image_meta)"},{"line_number":4818,"context_line":"        cpu \u003d self._get_guest_cpu_model_config(flavor, arch)"},{"line_number":4819,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9c4b3b50_fe27f3fa","line":4816,"range":{"start_line":4816,"start_character":51,"end_line":4816,"end_character":75},"updated":"2021-04-16 16:29:15.000000000","message":"You can remove this now too and update any callers","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"}],"releasenotes/notes/bug-1910466-max-vcpu-topologies-with-numa-9a9ceb1b0fc7c33d.yaml":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"d2f8c8d4_bc464d57","line":4,"range":{"start_line":4,"start_character":52,"end_line":4,"end_character":59},"updated":"2021-01-07 23:36:00.000000000","message":"features","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"87d80bb2_cfd796f3","line":4,"range":{"start_line":4,"start_character":28,"end_line":4,"end_character":35},"updated":"2021-01-07 23:36:00.000000000","message":"supports","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"d7455ba4_926e1f3b","line":4,"range":{"start_line":4,"start_character":61,"end_line":4,"end_character":65},"updated":"2021-01-13 17:30:26.000000000","message":"virtual CPU","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"dc3ac8d3_8c2d94ff","line":4,"range":{"start_line":4,"start_character":28,"end_line":4,"end_character":35},"in_reply_to":"87d80bb2_cfd796f3","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3effe5f8_4a80868a","line":4,"range":{"start_line":4,"start_character":52,"end_line":4,"end_character":59},"in_reply_to":"d2f8c8d4_bc464d57","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"dedea466_838e1e46","line":4,"range":{"start_line":4,"start_character":61,"end_line":4,"end_character":65},"in_reply_to":"d7455ba4_926e1f3b","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5d0df6c4_2e0cf78b","line":5,"range":{"start_line":5,"start_character":16,"end_line":5,"end_character":20},"updated":"2021-01-13 17:30:26.000000000","message":"NUMA","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"27364043_01454f8d","line":5,"range":{"start_line":5,"start_character":42,"end_line":5,"end_character":48},"updated":"2021-01-07 23:36:00.000000000","message":"sockets","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"14b330a7_e2a28f5e","line":5,"range":{"start_line":5,"start_character":42,"end_line":5,"end_character":48},"in_reply_to":"27364043_01454f8d","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"1bc8e6da_ca13ac25","line":5,"range":{"start_line":5,"start_character":16,"end_line":5,"end_character":20},"in_reply_to":"5d0df6c4_2e0cf78b","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"40d7c671_50eb9a6b","line":6,"range":{"start_line":6,"start_character":28,"end_line":6,"end_character":67},"updated":"2021-01-07 23:36:00.000000000","message":"This doesn\u0027t appear true based on the example failure we saw from the customer. They didn\u0027t specify a preference for sockets, cores, or threads, so the request was (-1, -1, -1) which is (0, 0, 0) on the master branch. There was however a limit of (2, 2, 8) for sockets, cores, and threads. Maybe that\u0027s what you mean here? If so, this should say an explicit request for \"max sockets, max cores, max threads\".","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"35050bd0fa95738bff4757a48812fc3a3f387df0","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"f5a9f4da_989458f7","line":6,"range":{"start_line":6,"start_character":28,"end_line":6,"end_character":67},"in_reply_to":"40d7c671_50eb9a6b","updated":"2021-01-08 17:42:46.000000000","message":"yes i ment max_*\n\nalso i shoudl remove explcit as it would happen for implict numa toplogy form pinning too.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"752550bf_b3e4d356","line":6,"range":{"start_line":6,"start_character":28,"end_line":6,"end_character":67},"in_reply_to":"f5a9f4da_989458f7","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"43c822eb_8212f4f9","line":7,"range":{"start_line":7,"start_character":57,"end_line":7,"end_character":60},"updated":"2021-01-07 23:36:00.000000000","message":"fixed","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"a2f2caec_a7fecee2","line":7,"range":{"start_line":7,"start_character":65,"end_line":7,"end_character":67},"updated":"2021-01-13 17:30:26.000000000","message":"it is now","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0cf2b645_ba62f25f","line":7,"range":{"start_line":7,"start_character":57,"end_line":7,"end_character":60},"in_reply_to":"43c822eb_8212f4f9","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver support two independent feature, vcpu topologies"},{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"437edae2_0045de1c","line":7,"range":{"start_line":7,"start_character":65,"end_line":7,"end_character":67},"in_reply_to":"a2f2caec_a7fecee2","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":11,"context_line":"    can now generate a valid topology."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"c233ba71_6bfb2c49","line":8,"range":{"start_line":8,"start_character":36,"end_line":8,"end_character":40},"updated":"2021-01-13 17:30:26.000000000","message":"NUMA","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    and virtual numa topologies. When max socket, cores and threads were specified"},{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":11,"context_line":"    can now generate a valid topology."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9240ee32_1381c58e","line":8,"range":{"start_line":8,"start_character":36,"end_line":8,"end_character":40},"in_reply_to":"c233ba71_6bfb2c49","updated":"2021-03-29 16:54:41.000000000","message":"Done","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dd374d85cd9e217edadb6dd49b5e95d537685a7a","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    for numa instances with explicit, socket core or thread request nova failed"},{"line_number":7,"context_line":"    to generate a valid vcpu topology. This has now been fix and it possible"},{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":11,"context_line":"    can now generate a valid topology."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"efd50fb0_7f7939cb","line":10,"range":{"start_line":9,"start_character":9,"end_line":10,"end_character":54},"updated":"2021-01-13 17:30:26.000000000","message":"Let\u0027s use rST:\n\n  e.g. a combination of ``hw:numa_nodes\u003d2``, ``hw:cpu_max_sockets\u003d2``, ``hw:cpu_max_cores\u003d2``\n  and ``hw:cpu_max_threads\u003d8`` will now generate a valid topology.","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1dc2c7860ad28b428d1b4887c752cceb5607f605","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":11,"context_line":"    can now generate a valid topology."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ae63d94b_217d9a22","line":11,"updated":"2021-01-07 23:36:00.000000000","message":"Should we also mention that vcpus\u003d8 on this example? Because IIUC if the request were for vcpus\u003d4, a valid topology would have been chosen, example: VirtCPUTopology(cores\u003d2,sockets\u003d2,threads\u003d1). The reason no topologies with threads\u003d1 were available in the fail example was because of the vcpus\u003d8 needed (has to be cores*sockets*threads \u003d vcpus).","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"35050bd0fa95738bff4757a48812fc3a3f387df0","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":11,"context_line":"    can now generate a valid topology."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"fc7e7f16_86f6fdb6","line":11,"in_reply_to":"ae63d94b_217d9a22","updated":"2021-01-08 17:42:46.000000000","message":"yes ill make this more clear","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    to use max cpu constraints with numa instances."},{"line_number":9,"context_line":"    e.g. \u0027hw:numa_nodes\u0027: \u00272\u0027, \u0027hw:cpu_max_sockets\u0027: \u00272\u0027,"},{"line_number":10,"context_line":"    \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":11,"context_line":"    can now generate a valid topology."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"44788327_ebf7ea03","line":11,"in_reply_to":"fc7e7f16_86f6fdb6","updated":"2021-03-29 16:54:41.000000000","message":"Ack","commit_id":"3a23c3288e49145449bb17d563c3fcf4102eecf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver supports two independent features, virtual CPU"},{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"fa82f7d5_083de33c","line":7,"range":{"start_line":7,"start_character":20,"end_line":7,"end_character":21},"updated":"2021-03-29 16:54:41.000000000","message":"drop","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver supports two independent features, virtual CPU"},{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"03f1ed37_f3835df4","line":7,"range":{"start_line":7,"start_character":75,"end_line":7,"end_character":76},"updated":"2021-03-29 16:54:41.000000000","message":"missing closing double backticks here\n\n  ``","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The nova libvirt driver supports two independent features, virtual CPU"},{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9298b141_1c5dc78f","line":7,"range":{"start_line":7,"start_character":75,"end_line":7,"end_character":76},"in_reply_to":"03f1ed37_f3835df4","updated":"2021-03-29 18:50:53.000000000","message":"Ack","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"e92b35e2_02ca7e51","line":8,"range":{"start_line":8,"start_character":7,"end_line":8,"end_character":30},"updated":"2021-03-29 16:54:41.000000000","message":"their image equivalents,","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5e082141_cdad8ea4","line":8,"range":{"start_line":8,"start_character":7,"end_line":8,"end_character":30},"in_reply_to":"e92b35e2_02ca7e51","updated":"2021-03-29 18:50:53.000000000","message":"yep :)","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":12,"context_line":"    can now generate a valid topology when flavor.vcpus\u003d8."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7450eefd_f9f9ba57","line":9,"range":{"start_line":9,"start_character":62,"end_line":9,"end_character":65},"updated":"2021-03-29 16:54:41.000000000","message":"CPU","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit, ``hw:cpu_sockets``, ``hw:cpu_cores``,``hw:cpu_threads extra specs"},{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":12,"context_line":"    can now generate a valid topology when flavor.vcpus\u003d8."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"f9a221c0_9c67d04c","line":9,"range":{"start_line":9,"start_character":62,"end_line":9,"end_character":65},"in_reply_to":"7450eefd_f9f9ba57","updated":"2021-03-29 18:50:53.000000000","message":"Ack","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":12,"context_line":"    can now generate a valid topology when flavor.vcpus\u003d8."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"0865a436_3dba78e0","line":11,"updated":"2021-03-29 16:54:41.000000000","message":"Can you format these as rST, please?","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    or there flavor equivalent nova failed to generate a valid virtual CPU topology."},{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":12,"context_line":"    can now generate a valid topology when flavor.vcpus\u003d8."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"95448121_74894d37","line":11,"in_reply_to":"0865a436_3dba78e0","updated":"2021-03-29 18:50:53.000000000","message":"oh with ``backticks`` sure","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de72de6a4f9b5f3ed710a86325b65fb116c1e82c","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":12,"context_line":"    can now generate a valid topology when flavor.vcpus\u003d8."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"6409138d_5b7323b9","line":12,"range":{"start_line":12,"start_character":43,"end_line":12,"end_character":57},"updated":"2021-03-29 16:54:41.000000000","message":"using a flavor with 8 vCPUs.","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d222b44a1525e277f795d8ff02656475a1b59631","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":10,"context_line":"    NUMA instances. e.g. a combination of  \u0027hw:numa_nodes\u0027: \u00272\u0027,"},{"line_number":11,"context_line":"    \u0027hw:cpu_max_sockets\u0027: \u00272\u0027, \u0027hw:cpu_max_cores\u0027: \u00272\u0027, \u0027hw:cpu_max_threads\u0027: \u00278\u0027,"},{"line_number":12,"context_line":"    can now generate a valid topology when flavor.vcpus\u003d8."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ab9936ac_f1dd1a0b","line":12,"range":{"start_line":12,"start_character":43,"end_line":12,"end_character":57},"in_reply_to":"6409138d_5b7323b9","updated":"2021-03-29 18:50:53.000000000","message":"Ack","commit_id":"60ba21abcc91fb99d14d75b45ef82b728204c19a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver supports two independent features, virtual CPU"},{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit ``hw:cpu_sockets``, ``hw:cpu_cores``, ``hw:cpu_threads``"},{"line_number":8,"context_line":"    extra specs or their image equivalent, nova failed to generate a valid virtual"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"ea96eb04_bbd81446","line":5,"range":{"start_line":5,"start_character":44,"end_line":5,"end_character":48},"updated":"2021-04-16 16:29:15.000000000","message":"Previously, when","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The nova libvirt driver supports two independent features, virtual CPU"},{"line_number":5,"context_line":"    topologies and virtual NUMA topologies. When ``hw:cpu_max_sockets``,"},{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit ``hw:cpu_sockets``, ``hw:cpu_cores``, ``hw:cpu_threads``"},{"line_number":8,"context_line":"    extra specs or their image equivalent, nova failed to generate a valid virtual"},{"line_number":9,"context_line":"    CPU topology when cpu pinning was enabled."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"586319eb_e5b813a4","line":6,"range":{"start_line":6,"start_character":71,"end_line":6,"end_character":85},"updated":"2021-04-16 16:29:15.000000000","message":"pinned instances (``hw:cpu_policy\u003ddedicated``)","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    ``hw:cpu_max_cores`` and ``hw:cpu_max_threads`` were specified for NUMA instances"},{"line_number":7,"context_line":"    without explicit ``hw:cpu_sockets``, ``hw:cpu_cores``, ``hw:cpu_threads``"},{"line_number":8,"context_line":"    extra specs or their image equivalent, nova failed to generate a valid virtual"},{"line_number":9,"context_line":"    CPU topology when cpu pinning was enabled."},{"line_number":10,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":11,"context_line":"    pinned instances."},{"line_number":12,"context_line":"    e.g. a combination of  ``hw:numa_nodes\u003d2``, ``hw:cpu_max_sockets\u003d2``,"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"73086883_21835681","line":9,"range":{"start_line":9,"start_character":16,"end_line":9,"end_character":45},"updated":"2021-04-16 16:29:15.000000000","message":"strike","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    without explicit ``hw:cpu_sockets``, ``hw:cpu_cores``, ``hw:cpu_threads``"},{"line_number":8,"context_line":"    extra specs or their image equivalent, nova failed to generate a valid virtual"},{"line_number":9,"context_line":"    CPU topology when cpu pinning was enabled."},{"line_number":10,"context_line":"    This has now been fixed and it is now possible to use max cpu constraints with"},{"line_number":11,"context_line":"    pinned instances."},{"line_number":12,"context_line":"    e.g. a combination of  ``hw:numa_nodes\u003d2``, ``hw:cpu_max_sockets\u003d2``,"},{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and ``hw:cpu_policy\u003ddedicated``"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"b8b3da56_ee341f1c","line":10,"range":{"start_line":10,"start_character":62,"end_line":10,"end_character":65},"updated":"2021-04-16 16:29:15.000000000","message":"CPU","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"61e5a592a62e75847a0ce45de053446960a879d3","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    e.g. a combination of  ``hw:numa_nodes\u003d2``, ``hw:cpu_max_sockets\u003d2``,"},{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and ``hw:cpu_policy\u003ddedicated``"},{"line_number":14,"context_line":"    can now generate a valid topology using a flavor with 8 vCPUs."},{"line_number":15,"context_line":"    This change removes code that attempted to optimize VM CPU thread assignment"},{"line_number":16,"context_line":"    based on the host CPU topology as it was determined to be buggy, undocumented"},{"line_number":17,"context_line":"    and rejected valid virtual CPU topologies while also producing different behavior"},{"line_number":18,"context_line":"    when CPU pinning was enabled vs disabled. The optimization may be reintroduced"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"f87e5701_f288cc91","line":15,"updated":"2021-04-16 16:29:15.000000000","message":"I think it would make sense to put this in the upgrade section. You can link the two by referring to the common bug, e.g.\n\n  As part of the fix for bug 1910466, code that attempted ... was removed.\n  It was determined to be buggy and was undocumented. It rejected valid...","commit_id":"72607057953f8ea2388f325de0a2e1dfb7872233"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c709b0eb005ad10751ab1cccd49cebfe09cc4d0b","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"4a932db2_8c1d8e6a","line":16,"updated":"2021-06-21 13:57:36.000000000","message":"I don\u0027t see any needed modification below for an operator as the \"upgrade\" section explains generally.\n\nAFAICU, it would only change the behaviour when upgrading, but if so, please just explain it in the fixes section.\nSee what needs to have an upgrade section : https://docs.openstack.org/nova/latest/contributor/releasenotes.html#when-a-release-note-is-needed (tldr: it needs an action for an operator)","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"205f492cfb75ac5546f5a471c67ff15b7d376767","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"73be0786_2bf0b012","line":16,"in_reply_to":"28687109_51f2d318","updated":"2021-06-22 14:12:07.000000000","message":"Honestly, I don\u0027t want to hold this change because of a relnote section question.\n\nI just explained that we shouldn\u0027t use this section for this, even if we already merged some changes providing some kind of the same (probably because not all of us really know about what means an \u0027upgrade\" section, but OK) and I was just thinking it was just simple to provide a new revision for this given my concern.\nI also tried to provide a way how to help operators to know more about this but again, I don\u0027t wanna hold this.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"93fbcaaa9ebb8e86b6088ebf76afa525a6485ea3","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"dc2f5850_627726a5","line":16,"in_reply_to":"2e4cde7a_a9d8a8f7","updated":"2021-06-22 09:24:34.000000000","message":"Users can\u0027t really do something, right?\n\nUsers even don\u0027t know about the nova releases, they only know about API microversions.\nIf you *really* think we should signal something to users, this is not with a relnote but in general with a microversion. Of course, I\u0027m not advocating about this here, so I tried to explain why we can\u0027t really say this is a upgrade note.\n\nIf you want, we could rather add some note in the prelude section after Xena-3 for explaining to the *operators* the behaviour change, but unless we wanna continue to support it by an config option, nothing more we can do here.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5de555d47d28e6723e4acc645ff15d938fc542d2","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"ad762121_0d742602","line":16,"in_reply_to":"4a932db2_8c1d8e6a","updated":"2021-06-21 14:17:06.000000000","message":"stephen asked me to move this from the fixes section to upgrade.\ni dont really have a stong opipion either way.\n\n\nyou are right that there is no action requried by the operator.\nso i can move it back to fixes if stephen is happy with that.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a51ce80d0b6c0151b23a0c43ff592f98d6699d2","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"2e4cde7a_a9d8a8f7","line":16,"in_reply_to":"ad762121_0d742602","updated":"2021-06-21 14:22:03.000000000","message":"There is an upgrade impact on this because there could conceivably be end users that were relying on this behavior. If there are, then they need to change things so that this is no longer the case. i.e. by setting explicit guest NUMA topologies. I think that warrants the Upgrade note, personally","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"450aebc7bafb539413bfc21fa440919f78c584d4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"28687109_51f2d318","line":16,"in_reply_to":"af582b08_f959487c","updated":"2021-06-22 12:29:32.000000000","message":"also im a hard no on a config option this behavior was never correct and never should have be presnt so i dont want a way to renable buggy behavior that will change the meaning of flavors based on config options.\n\nhost level config driven behavior is really not a good thing to add as it makes many thing much more complicated including move operation which are complicated enough as it is.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ef429354ca011f5c0ce1a69fa4f0d3a5d445742f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"af582b08_f959487c","line":16,"in_reply_to":"b065e41e_b246d199","updated":"2021-06-22 12:26:17.000000000","message":"you mean they can start explictly setting cpu toplogies.\n\ne.g. dont use hw:cpu_max_cores\u003d2 and use hw:cpu_cores\u003d2 instead to manually do what the removed optimisation would have done by hardcoding the desired cpu topology that would have been caulated\nin the subset of cases it worked based on the host topology\n\n\nthey could do this yes but i dobth they will since they would have to resize there guests or rebuild them if they use the image properties.\n\nso technially yes there is something they can do but in general i dont think it something they will do.\n\nhonestly i am fine with ither case.\nfor me the upgrade secon was just informing them of a change in behavior on upgrade but the fixes section also does that.\n\nwhen ye reach an agreement i can update this if required.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"43bfb293588b7890f042e5b48c2739727cf25934","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    ``hw:cpu_max_cores\u003d2``, ``hw:cpu_max_threads\u003d8`` and"},{"line_number":14,"context_line":"    ``hw:cpu_policy\u003ddedicated`` can now generate a valid topology using"},{"line_number":15,"context_line":"    a flavor with 8 vCPUs."},{"line_number":16,"context_line":"upgrade:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    As part of the fix for bug 1910466, code that attempted to optimize VM CPU"},{"line_number":19,"context_line":"    thread assignment based on the host CPU topology as it was determined"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"b065e41e_b246d199","line":16,"in_reply_to":"dc2f5850_627726a5","updated":"2021-06-22 11:17:52.000000000","message":"\u003e Users can\u0027t really do something, right?\n\nSure they can. They can start setting an explicit NUMA topology. I doubt anyone will do so because I doubt anyone was relying on this undocumented feature, but the option is there.\n\n\u003e Users even don\u0027t know about the nova releases, they only know about API microversions.\n\u003e If you *really* think we should signal something to users, this is not with a relnote but in general with a microversion. Of course, I\u0027m not advocating about this here, so I tried to explain why we can\u0027t really say this is a upgrade note.\n\nThat\u0027s not true. There are different types of users. You\u0027re talking about end-users, but what about operators? We use \u0027Upgrade\u0027 relnotes to signal things like removed (not deprecated - actually removed) config options. The note serves as a warning to users than something has changed in this release and they might need to do something ahead of time. In this case, how we build our NUMA topology for guests has changed so we\u0027re calling that out. Some other examples of this type of release note:\n\n- releasenotes/notes/remove-hooks-96d08645404d327c.yaml\n- releasenotes/notes/remove-deprecated-libvirt-use_usb_tablet-opt-b01058905240b8ce.yaml\n- releasenotes/notes/remove-nova-manage-db-null_instance_uuid_scan-f34494b316ff181c.yaml\n- releasenotes/notes/require_port_binding_ext-e6d9bdd4f6eef4e3.yaml\n- ...\n\n\u003e If you want, we could rather add some note in the prelude section after Xena-3 for explaining to the *operators* the behaviour change, but unless we wanna continue to support it by an config option, nothing more we can do here.\n\nThis isn\u0027t important enough IMO to warrant inclusion in the prelude section. However, even if it did, the prelude section usually summarizes the most critical changes that operators and end-users need to worry about, most of which will already have their own release note that will go into greater detail on the change. There are exceptions, such as calling out the max API microversion, but in general the prelude summarizes an already existing release note.","commit_id":"387823b36d091abbaa37efb930fc98b94a5bbb93"}]}
