)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a5902f23ceebcb45cbae8184239ad072e7571c6c","unresolved":true,"context_lines":[{"line_number":11,"context_line":"scenario it does  n! / (n-k)! _numa_fit_instance_cell calls"},{"line_number":12,"context_line":"(n\u003dlen(host_cells) k\u003dlen(instance_cells)) to find if the instance can be"},{"line_number":13,"context_line":"fit to the host. With 16 NUMA nodes host and 8 NUMA node guests this"},{"line_number":14,"context_line":"means 500 million calls to _numa_fit_instance_cell. This takes excessive"},{"line_number":15,"context_line":"time."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"However going through these permutations there are many repetitive"},{"line_number":18,"context_line":"host_cell, instance_cell pairs to try to fit."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"e342920a_0c303ed5","line":15,"range":{"start_line":14,"start_character":6,"end_line":15,"end_character":5},"updated":"2022-08-10 17:45:32.000000000","message":"What an understatement 😂 (500 million)","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8b4f55876192fbacce613dd2961679f593787fa7","unresolved":true,"context_lines":[{"line_number":11,"context_line":"scenario it does  n! / (n-k)! _numa_fit_instance_cell calls"},{"line_number":12,"context_line":"(n\u003dlen(host_cells) k\u003dlen(instance_cells)) to find if the instance can be"},{"line_number":13,"context_line":"fit to the host. With 16 NUMA nodes host and 8 NUMA node guests this"},{"line_number":14,"context_line":"means 500 million calls to _numa_fit_instance_cell. This takes excessive"},{"line_number":15,"context_line":"time."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"However going through these permutations there are many repetitive"},{"line_number":18,"context_line":"host_cell, instance_cell pairs to try to fit."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"6e186405_2d1e36ff","line":15,"range":{"start_line":14,"start_character":6,"end_line":15,"end_character":5},"in_reply_to":"e342920a_0c303ed5","updated":"2022-08-10 23:45:46.000000000","message":"there is a reason we recomend the numatopolgy fileter should be the last one on the list but ya this is not way that is just a little excessive.","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"61d47e04c1a3106aa7b21e22128cee301d8a46fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"00d41fdd_bb61ad1b","updated":"2022-06-15 08:29:29.000000000","message":"this looks promising to me.\nwe shoudl add a release note for this.","commit_id":"09a9472c30d199d2a87be5949a60ab022d6e11af"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a5902f23ceebcb45cbae8184239ad072e7571c6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c65d2c5e_187e22e1","updated":"2022-08-10 17:45:32.000000000","message":"Question inline.","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1080e37820784fb96b34df6196e8f3008541c35d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"33017d2e_04d8e6d0","updated":"2022-08-11 00:10:39.000000000","message":"Very nice work, thanks gibi! LGTM","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"40cc5abe5cbd6f2cc5cbda23c760d2f66d60acfe","unresolved":true,"context_lines":[{"line_number":3838,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":3839,"context_line":"            cells\u003d["},{"line_number":3840,"context_line":"                objects.InstanceNUMACell("},{"line_number":3841,"context_line":"                    id\u003d0,"},{"line_number":3842,"context_line":"                    cpuset\u003dset(),"},{"line_number":3843,"context_line":"                    pcpuset\u003dset([0, 1]),"},{"line_number":3844,"context_line":"                    memory\u003d2048,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c5edbac8_63d0f5b6","line":3841,"range":{"start_line":3841,"start_character":20,"end_line":3841,"end_character":25},"updated":"2022-06-15 11:16:57.000000000","message":"ok took a minute but this is the important change here\nthe id field is required and would always be set in real code so this is just improving the test data and that is later used in the cacheing.","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c7e069c7fb98f19ea4ab581a2abdf7c8ff6bec6","unresolved":false,"context_lines":[{"line_number":3838,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":3839,"context_line":"            cells\u003d["},{"line_number":3840,"context_line":"                objects.InstanceNUMACell("},{"line_number":3841,"context_line":"                    id\u003d0,"},{"line_number":3842,"context_line":"                    cpuset\u003dset(),"},{"line_number":3843,"context_line":"                    pcpuset\u003dset([0, 1]),"},{"line_number":3844,"context_line":"                    memory\u003d2048,"}],"source_content_type":"text/x-python","patch_set":2,"id":"54f58d92_db7195e8","line":3841,"range":{"start_line":3841,"start_character":20,"end_line":3841,"end_character":25},"in_reply_to":"c5edbac8_63d0f5b6","updated":"2022-06-17 08:18:54.000000000","message":"Ack","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"}],"nova/virt/hardware.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1850c380750ea053a9405770cad9f1b9716eed91","unresolved":true,"context_lines":[{"line_number":2372,"context_line":""},{"line_number":2373,"context_line":"            # if we already checked this pair, and they did not fit then no"},{"line_number":2374,"context_line":"            # need to check again just move to the next permutation"},{"line_number":2375,"context_line":"            if (host_cell.id, instance_cell.id) in not_fit_cache:"},{"line_number":2376,"context_line":"                break"},{"line_number":2377,"context_line":""},{"line_number":2378,"context_line":"            # if we already checked this pair, and they fit before that they"}],"source_content_type":"text/x-python","patch_set":1,"id":"c5867cac_c11e5c5e","line":2375,"range":{"start_line":2375,"start_character":15,"end_line":2375,"end_character":47},"updated":"2022-06-15 08:36:19.000000000","message":"nit you do this quite often so you could just put this in a var at the start of the inner loop","commit_id":"09a9472c30d199d2a87be5949a60ab022d6e11af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ed466daea414ce2c30313b9b9a7dbdc667b8c1cd","unresolved":false,"context_lines":[{"line_number":2372,"context_line":""},{"line_number":2373,"context_line":"            # if we already checked this pair, and they did not fit then no"},{"line_number":2374,"context_line":"            # need to check again just move to the next permutation"},{"line_number":2375,"context_line":"            if (host_cell.id, instance_cell.id) in not_fit_cache:"},{"line_number":2376,"context_line":"                break"},{"line_number":2377,"context_line":""},{"line_number":2378,"context_line":"            # if we already checked this pair, and they fit before that they"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad50f94e_1dc55af2","line":2375,"range":{"start_line":2375,"start_character":15,"end_line":2375,"end_character":47},"in_reply_to":"c5867cac_c11e5c5e","updated":"2022-06-15 10:57:50.000000000","message":"Done","commit_id":"09a9472c30d199d2a87be5949a60ab022d6e11af"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a5902f23ceebcb45cbae8184239ad072e7571c6c","unresolved":true,"context_lines":[{"line_number":2363,"context_line":"    # a set of host_cell.id, instance_cell.id pairs where we already checked"},{"line_number":2364,"context_line":"    # that the instance cell does fit"},{"line_number":2365,"context_line":"    fit_cache \u003d set()"},{"line_number":2366,"context_line":"    for host_cell_perm in itertools.permutations("},{"line_number":2367,"context_line":"            host_cells, len(instance_topology)):"},{"line_number":2368,"context_line":"        chosen_instance_cells: ty.List[\u0027objects.InstanceNUMACell\u0027] \u003d []"},{"line_number":2369,"context_line":"        chosen_host_cells: ty.List[\u0027objects.NUMACell\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"34c116d7_6690a36b","line":2366,"range":{"start_line":2366,"start_character":36,"end_line":2366,"end_character":48},"updated":"2022-08-10 17:45:32.000000000","message":"Apologies if I\u0027m missing something but is there a reason that using combinations() [1] here instead of permutations() would not do what we want in a more simple way?\n\n[1] https://docs.python.org/3/library/itertools.html#itertools.combinations","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8b4f55876192fbacce613dd2961679f593787fa7","unresolved":true,"context_lines":[{"line_number":2363,"context_line":"    # a set of host_cell.id, instance_cell.id pairs where we already checked"},{"line_number":2364,"context_line":"    # that the instance cell does fit"},{"line_number":2365,"context_line":"    fit_cache \u003d set()"},{"line_number":2366,"context_line":"    for host_cell_perm in itertools.permutations("},{"line_number":2367,"context_line":"            host_cells, len(instance_topology)):"},{"line_number":2368,"context_line":"        chosen_instance_cells: ty.List[\u0027objects.InstanceNUMACell\u0027] \u003d []"},{"line_number":2369,"context_line":"        chosen_host_cells: ty.List[\u0027objects.NUMACell\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"d0726881_00b21ba8","line":2366,"range":{"start_line":2366,"start_character":36,"end_line":2366,"end_character":48},"in_reply_to":"34c116d7_6690a36b","updated":"2022-08-10 23:45:46.000000000","message":"because we have the possibility of asymmetric numa topology we can treat AB \u003d\u003d BA which combinations considers the same. so the order of numa nodes  is not transitive so\nwe need to use permutations instead.\n\nthat is my understanding at least i think combinations would not work for the asymmetric numa node case.","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1080e37820784fb96b34df6196e8f3008541c35d","unresolved":false,"context_lines":[{"line_number":2363,"context_line":"    # a set of host_cell.id, instance_cell.id pairs where we already checked"},{"line_number":2364,"context_line":"    # that the instance cell does fit"},{"line_number":2365,"context_line":"    fit_cache \u003d set()"},{"line_number":2366,"context_line":"    for host_cell_perm in itertools.permutations("},{"line_number":2367,"context_line":"            host_cells, len(instance_topology)):"},{"line_number":2368,"context_line":"        chosen_instance_cells: ty.List[\u0027objects.InstanceNUMACell\u0027] \u003d []"},{"line_number":2369,"context_line":"        chosen_host_cells: ty.List[\u0027objects.NUMACell\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"85daf93f_c311c8a9","line":2366,"range":{"start_line":2366,"start_character":36,"end_line":2366,"end_character":48},"in_reply_to":"d0726881_00b21ba8","updated":"2022-08-11 00:10:39.000000000","message":"OK, I see. Thanks for the info.","commit_id":"099a6f63af7805440d91976ba0ea03bc6c278280"}]}
