)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9388b8bf899e3206ef1aefecd151fcbabfebf8dd","unresolved":true,"context_lines":[{"line_number":69,"context_line":"nova-scheduler should query for hosts with"},{"line_number":70,"context_line":"enable_numa_reporting_to_placement\u003dNone. Disabling it for clusters that"},{"line_number":71,"context_line":"don\u0027t have such computes saves time during scheduling."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Implements: blueprint numa-topology-with-rps"},{"line_number":74,"context_line":"Co-Authored-By: Karol Klimaszewski \u003ckklimaszewski@cloudferro.com\u003e"},{"line_number":75,"context_line":"Change-Id: I26c66d653a015d97b6e66a73c2d7aad0bcf48511"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"4c602393_25a4abbe","line":72,"updated":"2025-12-16 19:36:06.000000000","message":"if you adde\n\n`Depends-on: https://review.opendev.org/c/openstack/os-traits/+/967690`\nit might fix some of the ci frailrue but the unit/functional tests will only pass after we do a release of os-traits and bump the max version.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"ccfeb23a46ac858b40f3fce1d5106c9d5c9fce7e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"nova-scheduler should query for hosts with"},{"line_number":70,"context_line":"enable_numa_reporting_to_placement\u003dNone. Disabling it for clusters that"},{"line_number":71,"context_line":"don\u0027t have such computes saves time during scheduling."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Implements: blueprint numa-topology-with-rps"},{"line_number":74,"context_line":"Co-Authored-By: Karol Klimaszewski \u003ckklimaszewski@cloudferro.com\u003e"},{"line_number":75,"context_line":"Change-Id: I26c66d653a015d97b6e66a73c2d7aad0bcf48511"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"94f35542_4c18ae8e","line":72,"in_reply_to":"4c602393_25a4abbe","updated":"2026-02-21 17:55:46.000000000","message":"Thank you, done.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9388b8bf899e3206ef1aefecd151fcbabfebf8dd","unresolved":true,"context_lines":[{"line_number":70,"context_line":"enable_numa_reporting_to_placement\u003dNone. Disabling it for clusters that"},{"line_number":71,"context_line":"don\u0027t have such computes saves time during scheduling."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Implements: blueprint numa-topology-with-rps"},{"line_number":74,"context_line":"Co-Authored-By: Karol Klimaszewski \u003ckklimaszewski@cloudferro.com\u003e"},{"line_number":75,"context_line":"Change-Id: I26c66d653a015d97b6e66a73c2d7aad0bcf48511"},{"line_number":76,"context_line":"Signed-off-by: Dominik Danelski \u003cddanelski@cloudferro.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e96c41d6_d900c91a","line":73,"updated":"2025-12-16 19:36:06.000000000","message":"we will need to repopsoe and update the nova-spec for 2026.2 which is the H release cycle.\nthe spec aprpoval deadline was deceber 4th so this wont be merged this cycle but we can still review it in the new year.\n\ni proably wont have much time to look at this before i go on PTO","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"e2f0206b12e4842080739f56032f19fd6804e367","unresolved":false,"context_lines":[{"line_number":70,"context_line":"enable_numa_reporting_to_placement\u003dNone. Disabling it for clusters that"},{"line_number":71,"context_line":"don\u0027t have such computes saves time during scheduling."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Implements: blueprint numa-topology-with-rps"},{"line_number":74,"context_line":"Co-Authored-By: Karol Klimaszewski \u003ckklimaszewski@cloudferro.com\u003e"},{"line_number":75,"context_line":"Change-Id: I26c66d653a015d97b6e66a73c2d7aad0bcf48511"},{"line_number":76,"context_line":"Signed-off-by: Dominik Danelski \u003cddanelski@cloudferro.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"255bde61_1ed2b5a9","line":73,"in_reply_to":"a6b78109_247d61ca","updated":"2026-03-02 17:40:34.000000000","message":"Further work at https://review.opendev.org/c/openstack/nova-specs/+/978570","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"ccfeb23a46ac858b40f3fce1d5106c9d5c9fce7e","unresolved":true,"context_lines":[{"line_number":70,"context_line":"enable_numa_reporting_to_placement\u003dNone. Disabling it for clusters that"},{"line_number":71,"context_line":"don\u0027t have such computes saves time during scheduling."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Implements: blueprint numa-topology-with-rps"},{"line_number":74,"context_line":"Co-Authored-By: Karol Klimaszewski \u003ckklimaszewski@cloudferro.com\u003e"},{"line_number":75,"context_line":"Change-Id: I26c66d653a015d97b6e66a73c2d7aad0bcf48511"},{"line_number":76,"context_line":"Signed-off-by: Dominik Danelski \u003cddanelski@cloudferro.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"a6b78109_247d61ca","line":73,"in_reply_to":"e96c41d6_d900c91a","updated":"2026-02-21 17:55:46.000000000","message":"Do you have any specific changes beside fixing the minor inconsistencies in mind?","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9388b8bf899e3206ef1aefecd151fcbabfebf8dd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"aa3c7a4a_3c4d5d49","updated":"2025-12-16 19:36:06.000000000","message":"i have not had tiem to review this properly but we will likely want to split this patch in 3\n\none patch for the object changes.\nanother patch for the scheduler/hardware.py changes and \nfinally another for the compute changes.\n\nwe will also likely need to think about the upgrade impact and if we need a compute service bump or simialr to indicate the the computes support this new mode of reporting resources.\n\nthat something we can refine and document in the nova spec.\n\nform a breifly look i see you takign a similar apprch to cpu reporting in placement with the fall back query thats ok but it might be time to cosnier removing the supprot fo not using PCPUs in palcement and vcpu_pin_set\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#workarounds.disable_fallback_pcpu_query has been deprecatded for removal for many years now so we should consider simplfy the code to only supprot the new mode.\n\nthat makes the reshape logic for numa in placment simpler if we can alwasy assume that you are using https://specs.openstack.org/openstack/nova-specs/specs/train/implemented/cpu-resources.html\n\nif we dont remove that fallback and clean up the tech debt first then you need to handel both modes of that workaround or at least raise an error if you enable numa in palcment while that workaroudn is enabled.\n\nother then that i have not looked at the propsoe change too deeply so those are just my inital toughts","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"af6743a399d00aa8426f9ecd3905422848af587f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d55b9b09_2823724f","in_reply_to":"2c721d7b_30c5920d","updated":"2026-03-05 13:15:01.000000000","message":"Patchset 8 removed the code assuming the PCPU fallback query to the capacity that it was introduced by this commit. In explicit, I didn\u0027t touch the adjacent upstream call (https://opendev.org/openstack/nova/src/commit/04e926a38e314c2d9fd3c71e8e879245ff6a7285/nova/scheduler/manager.py#L212) that does the same thing to not overextend the scope of this change. Please write in case that is a bad approach and I should remove that code as well.\nAs for the numa_reshape changes, I\u0027ll commit them in #971177 soon.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"41fe8839c1f9711f3a3936a3dbfa609769a6840a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2c721d7b_30c5920d","in_reply_to":"aa3c7a4a_3c4d5d49","updated":"2026-02-27 15:50:23.000000000","message":"I did split the patch.\nACK for PCPU changes. As far as I understand, actually deprecating this functionality will be handled in a separate patch unrelated to this topic, so I should just write the code as if it were already removed.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"af6743a399d00aa8426f9ecd3905422848af587f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"00250000_085d80c8","updated":"2026-03-05 13:15:01.000000000","message":"@smooney@redhat.com So far, I introduced all changes you explicitly requested. Could you review the 2 remaining comments and see if something needs to be done about them to have the clear path forward?","commit_id":"8fe413881da3c32b62e5c8cd1e3f3173924620ee"}],"nova/scheduler/filters/numa_topology_filter.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9388b8bf899e3206ef1aefecd151fcbabfebf8dd","unresolved":true,"context_lines":[{"line_number":98,"context_line":"            if network_metadata:"},{"line_number":99,"context_line":"                limits.network_metadata \u003d network_metadata"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            prepared_cells \u003d hardware.HostCellsForInstanceFit.create_valid("},{"line_number":102,"context_line":"                        host_topology, requested_topology,"},{"line_number":103,"context_line":"                        limits\u003dlimits,"},{"line_number":104,"context_line":"                        pci_requests\u003dpci_requests,"},{"line_number":105,"context_line":"                        pci_stats\u003dhost_state.pci_stats,"},{"line_number":106,"context_line":"                        )"},{"line_number":107,"context_line":"            allowed_mappings \u003d utils.map_candidates_to_allowed_numa_mappings("},{"line_number":108,"context_line":"                host_state.allocation_candidates, requested_topology,"},{"line_number":109,"context_line":"                host_state.numa_topology)"},{"line_number":110,"context_line":"            success \u003d self._try_instance_fit(prepared_cells, allowed_mappings,"},{"line_number":111,"context_line":"                                             host_state, spec_obj)"},{"line_number":112,"context_line":"            if not success:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e06ff883_37bfee2a","line":109,"range":{"start_line":101,"start_character":12,"end_line":109,"end_character":41},"updated":"2025-12-16 19:36:06.000000000","message":"i have not looked at this in detail but this is proably not correct.\n\nwe shodul likely be passing the appocation candiate to numa_fit_instance_to_host","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"ccfeb23a46ac858b40f3fce1d5106c9d5c9fce7e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            if network_metadata:"},{"line_number":99,"context_line":"                limits.network_metadata \u003d network_metadata"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            prepared_cells \u003d hardware.HostCellsForInstanceFit.create_valid("},{"line_number":102,"context_line":"                        host_topology, requested_topology,"},{"line_number":103,"context_line":"                        limits\u003dlimits,"},{"line_number":104,"context_line":"                        pci_requests\u003dpci_requests,"},{"line_number":105,"context_line":"                        pci_stats\u003dhost_state.pci_stats,"},{"line_number":106,"context_line":"                        )"},{"line_number":107,"context_line":"            allowed_mappings \u003d utils.map_candidates_to_allowed_numa_mappings("},{"line_number":108,"context_line":"                host_state.allocation_candidates, requested_topology,"},{"line_number":109,"context_line":"                host_state.numa_topology)"},{"line_number":110,"context_line":"            success \u003d self._try_instance_fit(prepared_cells, allowed_mappings,"},{"line_number":111,"context_line":"                                             host_state, spec_obj)"},{"line_number":112,"context_line":"            if not success:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b5321fb8_9691056a","line":109,"range":{"start_line":101,"start_character":12,"end_line":109,"end_character":41},"in_reply_to":"e06ff883_37bfee2a","updated":"2026-02-21 17:55:46.000000000","message":"I will address this together in #2509.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"}],"nova/virt/hardware.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9388b8bf899e3206ef1aefecd151fcbabfebf8dd","unresolved":true,"context_lines":[{"line_number":2506,"context_line":"    return True"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"def numa_fit_instance_to_host("},{"line_number":2510,"context_line":"    host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2511,"context_line":"    instance_topology: \u0027objects.InstanceNUMATopology\u0027,"},{"line_number":2512,"context_line":"    provider_mapping: ty.Optional[ty.Dict[str, ty.List[str]]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"ddddd937_500f252b","side":"PARENT","line":2509,"range":{"start_line":2509,"start_character":4,"end_line":2509,"end_character":29},"updated":"2025-12-16 19:36:06.000000000","message":"im not conviece we shoudl be replaceign this fucntion but rather extending it.","commit_id":"fc19a29d203f7980eaa5b5be92e6de39ddc802b0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2697b792fdf7e0d00e458631244d18f39e7c20ab","unresolved":true,"context_lines":[{"line_number":2506,"context_line":"    return True"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"def numa_fit_instance_to_host("},{"line_number":2510,"context_line":"    host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2511,"context_line":"    instance_topology: \u0027objects.InstanceNUMATopology\u0027,"},{"line_number":2512,"context_line":"    provider_mapping: ty.Optional[ty.Dict[str, ty.List[str]]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"949568de_730a2641","side":"PARENT","line":2509,"range":{"start_line":2509,"start_character":4,"end_line":2509,"end_character":29},"in_reply_to":"0de5877d_674ad240","updated":"2026-02-21 22:57:52.000000000","message":"the provider to host cell mapping is intended to be tivial\n\nthe provider name is inteneed to be f\u0027{root_name}_numa_{host cell id}\u0027\n\ni.e. compute-1_numa_0 so calluateing that mapping should not be hard.\n\nthe reason tha thtis was a function in the fuirt place was to use a functional program style where there is no mutable state that is modified as a side-effect\nbeyond the explict import to the function.\n\nrewritign this to be class based break all prior expirnce with how this code work creating a large knowlage debt for maintienr of this code to maintian it going forward.\n\nto implemnet placement aware numa affinity all you really need to do is loop over the allcoation candates checkign only the host numa nodes that are fefrenced in the allcoation candiate. with numa in placement we shoudl not need to do validaity checks for capasity but we will need to verify thread pinnign policies and pci device assiment.\nwe already provie the provdier mappings for that reason so that we can correalate pci device the resource providers. so we have the ablity to correalte the host numa nodes with the reosuce providers in the function paramters.\n\nby the way we also have to supprot deployment that do not use numa in placment for severla release so i do not liek the idea fo entirly rewritign this code.\n\nwe supprot running conoller nodes with compute ndoes up to 2 release old that wont supprot reporting numa to placment.\n\nso we need to ensure there is no behvioral change when numa in placment is not enabled and taht you can also enable this progresivly by first enablign reporting on compute noeds and later enable schduling.","commit_id":"fc19a29d203f7980eaa5b5be92e6de39ddc802b0"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"41fe8839c1f9711f3a3936a3dbfa609769a6840a","unresolved":true,"context_lines":[{"line_number":2506,"context_line":"    return True"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"def numa_fit_instance_to_host("},{"line_number":2510,"context_line":"    host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2511,"context_line":"    instance_topology: \u0027objects.InstanceNUMATopology\u0027,"},{"line_number":2512,"context_line":"    provider_mapping: ty.Optional[ty.Dict[str, ty.List[str]]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"0cf49e70_14f2a510","side":"PARENT","line":2509,"range":{"start_line":2509,"start_character":4,"end_line":2509,"end_character":29},"in_reply_to":"949568de_730a2641","updated":"2026-02-27 15:50:23.000000000","message":"Using the find_first_matching_permutation functionally replaces the numa_fit_instance_to_host: create_valid copies about the first half of the original function almost verbatim, whereas the find_first_matching_permutation maintains the remaining permutation part.\nget_for_allowed_mapping and sort_filter_allowed_mapping are used in the new NUMA-aware approach, we do use the provider mappings in them, so this information is not lost.\n\n\nI could try to tame it slightly by replacing the current class with internal state with procedures themselves constructing the state object and then using it. Would that work better?\nRegarding the resource provider to host cell mapping: We do it before calling the virt/hardware.py methods (see for example NumaTopologyFilter) We don\u0027t use resource provider names for this as we don\u0027t have access to them in scheduler.","commit_id":"fc19a29d203f7980eaa5b5be92e6de39ddc802b0"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"ccfeb23a46ac858b40f3fce1d5106c9d5c9fce7e","unresolved":true,"context_lines":[{"line_number":2506,"context_line":"    return True"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"def numa_fit_instance_to_host("},{"line_number":2510,"context_line":"    host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2511,"context_line":"    instance_topology: \u0027objects.InstanceNUMATopology\u0027,"},{"line_number":2512,"context_line":"    provider_mapping: ty.Optional[ty.Dict[str, ty.List[str]]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"0de5877d_674ad240","side":"PARENT","line":2509,"range":{"start_line":2509,"start_character":4,"end_line":2509,"end_character":29},"in_reply_to":"ddddd937_500f252b","updated":"2026-02-21 17:55:46.000000000","message":"The purpose of having a dedicated class in place of a one-off function is for the calculations done in the create_valid to be done once and all other functions in the class to be able to reuse the created mapping of host_topology.cells to host_cells. Otherwise, we\u0027d need to recreate this mapping multiple times in functions like find_first_matching_permutation() and sort_filter_allowed_mappings()","commit_id":"fc19a29d203f7980eaa5b5be92e6de39ddc802b0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9388b8bf899e3206ef1aefecd151fcbabfebf8dd","unresolved":true,"context_lines":[{"line_number":2567,"context_line":"        }"},{"line_number":2568,"context_line":""},{"line_number":2569,"context_line":"    @classmethod"},{"line_number":2570,"context_line":"    def create_valid("},{"line_number":2571,"context_line":"        cls,"},{"line_number":2572,"context_line":"        host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2573,"context_line":"        instance_topology: \u0027objects.InstanceNUMATopology\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6802c55b_74878127","line":2570,"range":{"start_line":2570,"start_character":8,"end_line":2570,"end_character":20},"updated":"2025-12-16 19:36:06.000000000","message":"if we do proceed with the refactorihng we shoudl be passign the appcoation caidate i think so that we only condier the numa dnoes that we have allcation candiates for the same as we do for pci devices.\n\nwe shoudl avoid havign to filter the toplogies after the fact to the valid set.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"41fe8839c1f9711f3a3936a3dbfa609769a6840a","unresolved":true,"context_lines":[{"line_number":2567,"context_line":"        }"},{"line_number":2568,"context_line":""},{"line_number":2569,"context_line":"    @classmethod"},{"line_number":2570,"context_line":"    def create_valid("},{"line_number":2571,"context_line":"        cls,"},{"line_number":2572,"context_line":"        host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2573,"context_line":"        instance_topology: \u0027objects.InstanceNUMATopology\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c92aef9_6629dae9","line":2570,"range":{"start_line":2570,"start_character":8,"end_line":2570,"end_character":20},"in_reply_to":"56d13b05_72484410","updated":"2026-02-27 15:50:23.000000000","message":"As I mentioned in my new reply above, when we get the candidate list from Placement in NUMA-aware approach, get_for_allowed_mapping and sort_filter_allowed_mapping are used, which take advantage of this information. We don\u0027t run permutations over every RP on host ignoring the returned information.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"ccfeb23a46ac858b40f3fce1d5106c9d5c9fce7e","unresolved":true,"context_lines":[{"line_number":2567,"context_line":"        }"},{"line_number":2568,"context_line":""},{"line_number":2569,"context_line":"    @classmethod"},{"line_number":2570,"context_line":"    def create_valid("},{"line_number":2571,"context_line":"        cls,"},{"line_number":2572,"context_line":"        host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2573,"context_line":"        instance_topology: \u0027objects.InstanceNUMATopology\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"beeb4f1c_92acaf79","line":2570,"range":{"start_line":2570,"start_character":8,"end_line":2570,"end_character":20},"in_reply_to":"6802c55b_74878127","updated":"2026-02-21 17:55:46.000000000","message":"The reason for using topology there is to save time when multiple candidates may reuse the same mapping of instance NUMA cells to host NUMA cells, differing only on other assignments like a PCI device. Instead of checking the identical NUMA assignment multiple times, we can check it once and reuse this decision across such candidates.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2697b792fdf7e0d00e458631244d18f39e7c20ab","unresolved":true,"context_lines":[{"line_number":2567,"context_line":"        }"},{"line_number":2568,"context_line":""},{"line_number":2569,"context_line":"    @classmethod"},{"line_number":2570,"context_line":"    def create_valid("},{"line_number":2571,"context_line":"        cls,"},{"line_number":2572,"context_line":"        host_topology: \u0027objects.NUMATopology\u0027,"},{"line_number":2573,"context_line":"        instance_topology: \u0027objects.InstanceNUMATopology\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"56d13b05_72484410","line":2570,"range":{"start_line":2570,"start_character":8,"end_line":2570,"end_character":20},"in_reply_to":"beeb4f1c_92acaf79","updated":"2026-02-21 22:57:52.000000000","message":"there are other wasy to appoch it. we already have a cache in the existing code to make sure we don\u0027t reconsider permutations of numa nodes that we know are invalid for example\n\nnote you shoudl not be consdiering any host topltoy that you dont ahve allcoation candidates for, so its not correct to compute the topolites indepently of the cnadiates\n\nthe corrct thing to do woudl be remove the use of itertools.permutations entirly \nand instead loop over each allocation candidate to verify the Numa affinity fo \nwe can cache valid toplogy to avoid recomuting the check but you shoudl only check combiniatiosn that are contianed in teh allcoation candiatee sthey why we shoudl be passing it.\n\none thing to consider is that previously when this was invoked in the scheduler or in the comptue agent it was valid to return once any mapping was found\n\nbut in a placement based workflow we need to instead filter all of the possible allocation candidates for each host and update the list of allocation cadiage removing any that are invalid.\n\nbut we also need ot sort the allcoation candiates so that the candiate that \nfulfile CONF.compute.packing_host_numa_cells_allocation_strategy and pic affinity\ncome first\n\nthe reason for this is the conducotr will select the first allction candeate form teh list.\n\nthat means we can simpley schdule to a host anymore by filtering the host that fits. we also need ot order the allcoation candate on that host as the compute agente will nolger have the flexablity to choose the device and enforce that prefence on the compute node.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2697b792fdf7e0d00e458631244d18f39e7c20ab","unresolved":true,"context_lines":[{"line_number":2618,"context_line":""},{"line_number":2619,"context_line":"        # We need to perform all optimizations only if number of instance\u0027s"},{"line_number":2620,"context_line":"        # cells less than host\u0027s cells number. If it\u0027s equal, we\u0027ll use"},{"line_number":2621,"context_line":"        # all cells and no sorting of the cells list is needed."},{"line_number":2622,"context_line":"        if len(host_topology) \u003e len(instance_topology):"},{"line_number":2623,"context_line":"            pack \u003d CONF.compute.packing_host_numa_cells_allocation_strategy"},{"line_number":2624,"context_line":"            # To balance NUMA cells usage based on several parameters"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ad9e596_6ff96427","line":2621,"updated":"2026-02-21 22:57:52.000000000","message":"this isnt just about optimisation\n\nthe way the algortiom works today si we exit when we find the first valid acandate and the sorting belvoe allwos use to influce which not will be check first.\n\nspecificly if we will balance load across numa node or if we will fill numa nodes before consuming form the next.\n\n\nthe comment impels this si just an optimisation rather then a configurable policy.\nas noted above we will need to sort the allocation caudate list to enforce this now otherwise the policy wont be enforced.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"},{"author":{"_account_id":38500,"name":"Dominik","display_name":"Dominik Danelski","email":"dominik@danelski.pl","username":"etua","status":"@ CloudFerro S.A."},"change_message_id":"41fe8839c1f9711f3a3936a3dbfa609769a6840a","unresolved":false,"context_lines":[{"line_number":2618,"context_line":""},{"line_number":2619,"context_line":"        # We need to perform all optimizations only if number of instance\u0027s"},{"line_number":2620,"context_line":"        # cells less than host\u0027s cells number. If it\u0027s equal, we\u0027ll use"},{"line_number":2621,"context_line":"        # all cells and no sorting of the cells list is needed."},{"line_number":2622,"context_line":"        if len(host_topology) \u003e len(instance_topology):"},{"line_number":2623,"context_line":"            pack \u003d CONF.compute.packing_host_numa_cells_allocation_strategy"},{"line_number":2624,"context_line":"            # To balance NUMA cells usage based on several parameters"}],"source_content_type":"text/x-python","patch_set":1,"id":"ebe6c613_a59fd0bd","line":2621,"in_reply_to":"1ad9e596_6ff96427","updated":"2026-02-27 15:50:23.000000000","message":"Actually this comment has been preserved from the original patch introducing the NUMA allocation strategy, but I agree with your objection, so I changed it.","commit_id":"30df62544d92d5708523098eb85ce31592cb0f5d"}]}
