)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9536ad1f_b1c1e9f9","updated":"2023-08-24 16:18:19.000000000","message":"Hi Yann, thanks for the patch, just had a few comments.","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"635c8d7842a391f2ff884646e45337c130f80c50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bfd23b1e_27d2208a","updated":"2023-08-29 06:42:41.000000000","message":"Hi\n\nBrian, thanks a lot for your returns. This should be better now :)","commit_id":"28e6a0ad54b1a5c6c7162e4065787715b1daef03"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"16544684_a637d240","updated":"2023-08-25 11:33:23.000000000","message":"Hi,\n\nBrian, thanks for your remarks. I tried to update the patch set to make it better and explaining some other points.\n\nPlease let me know if you\u0027re OK with these.\n\nRegards","commit_id":"28e6a0ad54b1a5c6c7162e4065787715b1daef03"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a1b05df6c5bf658192307f9d0e836f872c2c907b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"64c8cfb7_97cd1e46","updated":"2023-08-29 15:07:02.000000000","message":"-1 just for the discussion.","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"0d34b7380d0abe271b475891cdc1f269680dbc21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"49f07a60_52170cda","updated":"2023-08-30 06:42:15.000000000","message":"Hi,\n\nBrian: Thanks for your suggestions, it should be better in the latest patch set.","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"da7d11560cb5fc0336510e5e591c16d3365f342b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6f871284_ee925057","updated":"2023-08-30 07:52:09.000000000","message":"-1 again, to consider the question raised (that was also discussed during the Neutron meeting).","commit_id":"01f7fe8e6d6e6a4d033c3e6f46c7622b2e4813fa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"76ed76180abc9d5b336f0047179b1387e05566fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e4923561_f3f40864","updated":"2023-09-12 13:16:49.000000000","message":"Hi Morice, will you continue working on this patch?","commit_id":"01f7fe8e6d6e6a4d033c3e6f46c7622b2e4813fa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"4c53f5c3d0875e4aa7a876243ac06c451100db72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"30534587_7c261f5c","in_reply_to":"e4923561_f3f40864","updated":"2023-09-25 07:00:17.000000000","message":"Hi Rodolfo !\n\nSorry for this late response but I was away... I will work on it as soon as possible to provide a new set of patches with the two original schedulers including the scheduling of LRP among all AZs.","commit_id":"01f7fe8e6d6e6a4d033c3e6f46c7622b2e4813fa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"ade38f417f1801c50d1e7ef23ac0eb410cef935e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"abf44110_054aa763","updated":"2023-09-28 11:41:53.000000000","message":"Hi !\n\nThanks for your review advices.\n\nI\u0027ve merged the spreading of LRP over eligible AZs into the two original schedulers. I let you tell me if the way I\u0027ve done this is right.","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"d2e73412f5f26937c10bfdb8dc48d2bd8380d329","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"95a3c7d0_f75998b0","updated":"2023-10-05 06:19:49.000000000","message":"Hi Brian,\nThank you for reading, it\u0027s clearly better like this. I\u0027ve updated patchset (7) to take care of your suggestions.","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"39908ba02a6fd89596f0f8fd831b95bb13325a1e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"78761f4c_f89debe1","updated":"2023-10-04 02:11:30.000000000","message":"Hi, I think this is looking good just had some doc things. Hopefully Rodolfo can review soon as well.","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"de76273fa9a0a44588a60fee1c7a86e2c2fa7d28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1efda95b_033ba8c3","updated":"2023-12-05 12:33:41.000000000","message":"Hi Rodolfo 😊 :\nDo you have some time for a last review for this patch ?","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"81108ffcd21720350df321dc29b1b260426f6193","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0349a98b_1a99136f","updated":"2024-01-21 23:47:01.000000000","message":"Hi Yann, sorry but you will have to manually rebase this change to master.","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"b16f77eeb61315c52774d70d28cbde3e5afa9af5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"332ad677_6986b673","updated":"2023-12-04 12:22:10.000000000","message":"recheck","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"a0534df6ace0286c404a276224b9f0cddce61a79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a90631b7_7c13b14a","updated":"2023-12-05 06:53:03.000000000","message":"recheck because it seems not real error","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"429cd0124320d471bed4b921fbf30800234f60a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"58e549cb_79618524","updated":"2023-10-27 19:27:27.000000000","message":"recheck fullstack test should be fixed","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"efe316c4c0f4af3442640a057fa52954be5d9ee3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5ac7c955_3ab70284","in_reply_to":"0349a98b_1a99136f","updated":"2024-01-22 14:58:27.000000000","message":"Hi Brian, OK, I understand. I\u0027ll work on it as soon as possible.","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"8c36a89d46770e264949d2983a5c08719f5cf545","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"7075449e_cb3da477","in_reply_to":"5ac7c955_3ab70284","updated":"2024-01-23 13:02:39.000000000","message":"Hi Brian, I\u0027ve done the rebase and checked all. It should be better now.","commit_id":"8754965d9d5e0344d50eb479ddccc1ed754e0caa"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"aeabfe9a_57ccaf4a","updated":"2024-01-26 14:22:23.000000000","message":"Hi Rodolfo, \n\nThanks a lot for your review 😊. I tried to take care of most suggestions. I have just a problem for the last one. I made a suggestion in the latest patchset for this specific point.","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"8c36a89d46770e264949d2983a5c08719f5cf545","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0e0dac77_d831282c","updated":"2024-01-23 13:02:39.000000000","message":"Hi, I\u0027ve done the rebase (patchset 9). It should be OK.","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a17858a637fb8b8182336af4af5a9a1f1857ce3f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"91717dc4_0391505f","updated":"2024-01-25 06:44:37.000000000","message":"recheck neutron-ovs-tempest-multinode-full","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e5f8b0ed57abc512c50ae985c7b6fb76aa3e8c08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"610a1bce_e44f37e2","updated":"2024-01-24 20:46:12.000000000","message":"recheck unrelated test failure","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"45adb5022453d764932efca9ea9e2a4875058c62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b4a6b09b_6081da7f","updated":"2024-01-23 22:41:46.000000000","message":"recheck unrelated test failure","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"432a51b5d5ce8382f99e3c0499d39590051f657a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"550af1de_1100446f","updated":"2024-01-29 12:09:29.000000000","message":"Hi, ok thanks!","commit_id":"a29ea3724e1f6bb54b76d1b9915c13014272fdcd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aa307ba3501fd609b08a1961705ee043467e6efd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bf0491fa_c8149fb8","updated":"2024-01-26 15:48:12.000000000","message":"Much better, IMO.","commit_id":"a29ea3724e1f6bb54b76d1b9915c13014272fdcd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4da46fd7764500978d70958038e74953cb7e2362","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"af4c7140_9bf82456","updated":"2024-01-29 15:41:29.000000000","message":"recheck UT test fixed","commit_id":"a29ea3724e1f6bb54b76d1b9915c13014272fdcd"}],"doc/source/admin/ovn/availability_zones.rst":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"39908ba02a6fd89596f0f8fd831b95bb13325a1e","unresolved":true,"context_lines":[{"line_number":231,"context_line":"the ``chassis_name`` column indicates which Chassis that port instance"},{"line_number":232,"context_line":"is scheduled onto. If we co-relate each entry and their ``chassis_name``"},{"line_number":233,"context_line":"we will see that this port has been only scheduled to Chassis matching"},{"line_number":234,"context_line":"with the router\u0027s availability zones and with priority to distribution"},{"line_number":235,"context_line":"over each zones."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Network Availability Zones"},{"line_number":238,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"260e3a5f_43b18564","line":235,"range":{"start_line":234,"start_character":55,"end_line":235,"end_character":15},"updated":"2023-10-04 02:11:30.000000000","message":"nit: s/to distribute over each zone.","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"d2e73412f5f26937c10bfdb8dc48d2bd8380d329","unresolved":false,"context_lines":[{"line_number":231,"context_line":"the ``chassis_name`` column indicates which Chassis that port instance"},{"line_number":232,"context_line":"is scheduled onto. If we co-relate each entry and their ``chassis_name``"},{"line_number":233,"context_line":"we will see that this port has been only scheduled to Chassis matching"},{"line_number":234,"context_line":"with the router\u0027s availability zones and with priority to distribution"},{"line_number":235,"context_line":"over each zones."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Network Availability Zones"},{"line_number":238,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"31fe63cb_4b2526a9","line":235,"range":{"start_line":234,"start_character":55,"end_line":235,"end_character":15},"in_reply_to":"260e3a5f_43b18564","updated":"2023-10-05 06:19:49.000000000","message":"Done","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"}],"neutron/scheduler/l3_ovn_scheduler.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":88,"context_line":"                  gateway_name, chassis)"},{"line_number":89,"context_line":"        return chassis"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _reorder_by_az(self, nb_idl, sb_idl, candidates):"},{"line_number":92,"context_line":"        chassis_selected \u003d []"},{"line_number":93,"context_line":"        other_chassis \u003d []"},{"line_number":94,"context_line":"        azs \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"52afd82b_b296e9f4","line":91,"updated":"2023-08-24 16:18:19.000000000","message":"Is there a chance that \u0027candidates\u0027 here could be invalid? For example if _schedule_gateway() hits Line 77 above?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                  gateway_name, chassis)"},{"line_number":89,"context_line":"        return chassis"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _reorder_by_az(self, nb_idl, sb_idl, candidates):"},{"line_number":92,"context_line":"        chassis_selected \u003d []"},{"line_number":93,"context_line":"        other_chassis \u003d []"},{"line_number":94,"context_line":"        azs \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"038e7cec_871c69db","line":91,"in_reply_to":"52afd82b_b296e9f4","updated":"2023-08-25 11:33:23.000000000","message":"In fact, _select_gateway_chassis is called by _schedule_gateway after the check is done, so that may be OK. But you\u0027re right, it should be better to verify if we have any candidates to avoid useless calls to sb_idl. Adding a check to ensure candidates are not equal to \u0027[ovn_const.OVN_GATEWAY_INVALID_CHASSIS]\u0027 should be good too, as this function may be called elsewhere in the future. I Added both checks.","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d1b0ad13_0f5f2b1d","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":23},"updated":"2023-08-24 16:18:19.000000000","message":"s/azs +\u003d ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"}],"source_content_type":"text/x-python","patch_set":2,"id":"a99135cd_f6a7d33a","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":23},"in_reply_to":"d1b0ad13_0f5f2b1d","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d4620bdb_3ab5a96f","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":23},"in_reply_to":"d1b0ad13_0f5f2b1d","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f8f191c_0fce4791","line":101,"updated":"2023-08-24 16:18:19.000000000","message":"I don\u0027t understand what this is doing, isn\u0027t azs already a list?\n\n\u003e\u003e\u003e azs\n[\u0027foo\u0027, \u0027bar\u0027, \u0027baz\u0027]\n\u003e\u003e\u003e list(dict.fromkeys(azs))\n[\u0027foo\u0027, \u0027bar\u0027, \u0027baz\u0027]","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"}],"source_content_type":"text/x-python","patch_set":2,"id":"d94334bc_935b6cc2","line":101,"in_reply_to":"9f8f191c_0fce4791","updated":"2023-08-25 11:33:23.000000000","message":"You\u0027re true, azs is already a list... but with duplicates. This line is to have a list of \u0027unique_azs\u0027. I added a comment to explain, but perhaps I should do it differently ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"635c8d7842a391f2ff884646e45337c130f80c50","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1bfebbac_a8b64804","line":101,"in_reply_to":"b262e6ad_9dcb1df4","updated":"2023-08-29 06:42:41.000000000","message":"You\u0027re right, it\u0027s lot more better!","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"abb031a3cbaabc3dcbaec5b88a5c6dd57f21adc7","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # Get list of all AZs"},{"line_number":99,"context_line":"        for chassis in candidates:"},{"line_number":100,"context_line":"            azs \u003d azs + list(chassis_with_azs.get(chassis, []))"},{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"}],"source_content_type":"text/x-python","patch_set":2,"id":"b262e6ad_9dcb1df4","line":101,"in_reply_to":"d94334bc_935b6cc2","updated":"2023-08-28 21:51:42.000000000","message":"Or you could use a set, which would maybe be more self-explanatory.","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":105,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":106,"context_line":"            # Verify if chassis is an AZ not already used"},{"line_number":107,"context_line":"            for i in chassis_azs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e58bde58_18c88527","line":104,"updated":"2023-08-24 16:18:19.000000000","message":"It looks like this can be outside the loop since chassis_with_azs does not change? Or does this need to be reset for below?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"635c8d7842a391f2ff884646e45337c130f80c50","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":105,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":106,"context_line":"            # Verify if chassis is an AZ not already used"},{"line_number":107,"context_line":"            for i in chassis_azs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"eb85ed22_ffcf4a4b","line":104,"in_reply_to":"d2afbcc3_eb292c3c","updated":"2023-08-29 06:42:41.000000000","message":":)","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"abb031a3cbaabc3dcbaec5b88a5c6dd57f21adc7","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":105,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":106,"context_line":"            # Verify if chassis is an AZ not already used"},{"line_number":107,"context_line":"            for i in chassis_azs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d2afbcc3_eb292c3c","line":104,"in_reply_to":"d9d7b2a1_3a03ed54","updated":"2023-08-28 21:51:42.000000000","message":"Right, missed that, this is fine.","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        azs \u003d list(dict.fromkeys(azs))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        for chassis in candidates:"},{"line_number":104,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":105,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":106,"context_line":"            # Verify if chassis is an AZ not already used"},{"line_number":107,"context_line":"            for i in chassis_azs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d9d7b2a1_3a03ed54","line":104,"in_reply_to":"e58bde58_18c88527","updated":"2023-08-25 11:33:23.000000000","message":"chassis_with_azs doesn\u0027t change, it\u0027s right. But we use here the list of the AZs for the current chassis (only) in the loop, which is everytime different. Should I do it in another manner ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":107,"context_line":"            for i in chassis_azs:"},{"line_number":108,"context_line":"                if i in azs:"},{"line_number":109,"context_line":"                    azs.remove(i)"},{"line_number":110,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":111,"context_line":"            # If chassis in new AZ"},{"line_number":112,"context_line":"            if chassis_in_new_az:"},{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"}],"source_content_type":"text/x-python","patch_set":2,"id":"96784d2d_24cd3103","line":110,"updated":"2023-08-24 16:18:19.000000000","message":"It seems like there should be a break after this since once this is True we do not need to look at other chassis, right?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"abb031a3cbaabc3dcbaec5b88a5c6dd57f21adc7","unresolved":true,"context_lines":[{"line_number":107,"context_line":"            for i in chassis_azs:"},{"line_number":108,"context_line":"                if i in azs:"},{"line_number":109,"context_line":"                    azs.remove(i)"},{"line_number":110,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":111,"context_line":"            # If chassis in new AZ"},{"line_number":112,"context_line":"            if chassis_in_new_az:"},{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9789bd61_c6e91304","line":110,"in_reply_to":"79fffd70_5991845b","updated":"2023-08-28 21:51:42.000000000","message":"Maybe I just hadn\u0027t had my coffee for the day :) \n\nI now see better how this is working, it actually impacts the outer for() loop as well, so looks ok.","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":true,"context_lines":[{"line_number":107,"context_line":"            for i in chassis_azs:"},{"line_number":108,"context_line":"                if i in azs:"},{"line_number":109,"context_line":"                    azs.remove(i)"},{"line_number":110,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":111,"context_line":"            # If chassis in new AZ"},{"line_number":112,"context_line":"            if chassis_in_new_az:"},{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"}],"source_content_type":"text/x-python","patch_set":2,"id":"79fffd70_5991845b","line":110,"in_reply_to":"96784d2d_24cd3103","updated":"2023-08-25 11:33:23.000000000","message":"I\u0027m not sure.\n\nAs chassis can be in multiple AZs, we need to fully clean azs list. For each chassis, that require removing all of his AZs from the list, so that we only keep AZs without any chassis in list, each turn.\n\nPerhaps, we could break the \u0027chassis candidates\u0027 loop when azs list is empty (so having 1+ chassis in each AZ) but as we try to only re-order candidates, that will need an additionnal treatment to add the remaining chassis at the end.\n\nDo you agree ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"635c8d7842a391f2ff884646e45337c130f80c50","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            for i in chassis_azs:"},{"line_number":108,"context_line":"                if i in azs:"},{"line_number":109,"context_line":"                    azs.remove(i)"},{"line_number":110,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":111,"context_line":"            # If chassis in new AZ"},{"line_number":112,"context_line":"            if chassis_in_new_az:"},{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"}],"source_content_type":"text/x-python","patch_set":2,"id":"0fc7b8f2_2c643d3f","line":110,"in_reply_to":"9789bd61_c6e91304","updated":"2023-08-29 06:42:41.000000000","message":":)","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":111,"context_line":"            # If chassis in new AZ"},{"line_number":112,"context_line":"            if chassis_in_new_az:"},{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"},{"line_number":114,"context_line":"            else:"},{"line_number":115,"context_line":"                # Else we keep copy to reorder priority later"},{"line_number":116,"context_line":"                other_chassis \u003d other_chassis + [chassis]"}],"source_content_type":"text/x-python","patch_set":2,"id":"58ba861d_4f27c99f","line":113,"updated":"2023-08-24 16:18:19.000000000","message":"+\u003d ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":111,"context_line":"            # If chassis in new AZ"},{"line_number":112,"context_line":"            if chassis_in_new_az:"},{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"},{"line_number":114,"context_line":"            else:"},{"line_number":115,"context_line":"                # Else we keep copy to reorder priority later"},{"line_number":116,"context_line":"                other_chassis \u003d other_chassis + [chassis]"}],"source_content_type":"text/x-python","patch_set":2,"id":"45714bae_723275a9","line":113,"in_reply_to":"58ba861d_4f27c99f","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"},{"line_number":114,"context_line":"            else:"},{"line_number":115,"context_line":"                # Else we keep copy to reorder priority later"},{"line_number":116,"context_line":"                other_chassis \u003d other_chassis + [chassis]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        chassis_selected \u003d chassis_selected + other_chassis"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"a9d79928_74c7486b","line":116,"updated":"2023-08-24 16:18:19.000000000","message":"+\u003d ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                chassis_selected \u003d chassis_selected + [chassis]"},{"line_number":114,"context_line":"            else:"},{"line_number":115,"context_line":"                # Else we keep copy to reorder priority later"},{"line_number":116,"context_line":"                other_chassis \u003d other_chassis + [chassis]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        chassis_selected \u003d chassis_selected + other_chassis"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f8989527_753fcc79","line":116,"in_reply_to":"a9d79928_74c7486b","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                # Else we keep copy to reorder priority later"},{"line_number":116,"context_line":"                other_chassis \u003d other_chassis + [chassis]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        chassis_selected \u003d chassis_selected + other_chassis"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        return(chassis_selected)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fd685a4e_01069ece","line":118,"updated":"2023-08-24 16:18:19.000000000","message":"+\u003d ?","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                # Else we keep copy to reorder priority later"},{"line_number":116,"context_line":"                other_chassis \u003d other_chassis + [chassis]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        chassis_selected \u003d chassis_selected + other_chassis"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        return(chassis_selected)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"16f560a8_820304bc","line":118,"in_reply_to":"fd685a4e_01069ece","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _select_gateway_chassis(self, nb_idl, sb_idl, candidates):"},{"line_number":183,"context_line":"        return self._reorder_by_az(nb_idl, sb_idl,"},{"line_number":184,"context_line":"               OVNGatewayChanceScheduler._select_gateway_chassis(self,"},{"line_number":185,"context_line":"                                                nb_idl, sb_idl, candidates))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"837f8c4e_3577f81d","line":184,"range":{"start_line":184,"start_character":15,"end_line":184,"end_character":40},"updated":"2023-08-24 16:18:19.000000000","message":"nit: think this can be super()._select_gateway_chassis(...), same below","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def _select_gateway_chassis(self, nb_idl, sb_idl, candidates):"},{"line_number":183,"context_line":"        return self._reorder_by_az(nb_idl, sb_idl,"},{"line_number":184,"context_line":"               OVNGatewayChanceScheduler._select_gateway_chassis(self,"},{"line_number":185,"context_line":"                                                nb_idl, sb_idl, candidates))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"03d85961_7a863d74","line":184,"range":{"start_line":184,"start_character":15,"end_line":184,"end_character":40},"in_reply_to":"837f8c4e_3577f81d","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"abb031a3cbaabc3dcbaec5b88a5c6dd57f21adc7","unresolved":true,"context_lines":[{"line_number":113,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":114,"context_line":"            # Verify if chassis is in an AZ not already used"},{"line_number":115,"context_line":"            # and delete AZs of chassis from list"},{"line_number":116,"context_line":"            for i in chassis_azs:"},{"line_number":117,"context_line":"                if i in azs:"},{"line_number":118,"context_line":"                    azs.remove(i)"},{"line_number":119,"context_line":"                    chassis_in_new_az \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"7b4432dd_27566728","line":116,"range":{"start_line":116,"start_character":16,"end_line":116,"end_character":17},"updated":"2023-08-28 21:51:42.000000000","message":"nit: if you have to re-spin this can you name this \u0027az\u0027 ?","commit_id":"28e6a0ad54b1a5c6c7162e4065787715b1daef03"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"635c8d7842a391f2ff884646e45337c130f80c50","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":114,"context_line":"            # Verify if chassis is in an AZ not already used"},{"line_number":115,"context_line":"            # and delete AZs of chassis from list"},{"line_number":116,"context_line":"            for i in chassis_azs:"},{"line_number":117,"context_line":"                if i in azs:"},{"line_number":118,"context_line":"                    azs.remove(i)"},{"line_number":119,"context_line":"                    chassis_in_new_az \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"554f3083_cecca263","line":116,"range":{"start_line":116,"start_character":16,"end_line":116,"end_character":17},"in_reply_to":"7b4432dd_27566728","updated":"2023-08-29 06:42:41.000000000","message":"I changed it in latest patchset. I agree with you, it was not a so good variable name. Maybe I hadn\u0027t enough coffee too !","commit_id":"28e6a0ad54b1a5c6c7162e4065787715b1daef03"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a1b05df6c5bf658192307f9d0e836f872c2c907b","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"OVN_SCHEDULER_CHANCE \u003d \u0027chance\u0027"},{"line_number":29,"context_line":"OVN_SCHEDULER_LEAST_LOADED \u003d \u0027leastloaded\u0027"},{"line_number":30,"context_line":"OVN_SCHEDULER_CHANCE_AZDIST \u003d \u0027azchance\u0027"},{"line_number":31,"context_line":"OVN_SCHEDULER_LEAST_LOADED_AZDIST \u003d \u0027azleastloaded\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OVNGatewayScheduler(object, metaclass\u003dabc.ABCMeta):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3d585545_65957f45","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":51},"updated":"2023-08-29 15:07:02.000000000","message":"My main question here, for other reviewers is: should we create two new schedulers or implement the requested feature (AZ port distribution) in the current ones?\n\nBecause the current schedulers, \"chance\" and \"leastloaded\", are already AZ aware, I would suggest to add this functionality to the current ones, adding a \"features\" release note, making explicit that we\u0027ll change the current behaviour of the existing schedulers.","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2dd9b13c221410aa04d3a6943acdc15245cd82db","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"OVN_SCHEDULER_CHANCE \u003d \u0027chance\u0027"},{"line_number":29,"context_line":"OVN_SCHEDULER_LEAST_LOADED \u003d \u0027leastloaded\u0027"},{"line_number":30,"context_line":"OVN_SCHEDULER_CHANCE_AZDIST \u003d \u0027azchance\u0027"},{"line_number":31,"context_line":"OVN_SCHEDULER_LEAST_LOADED_AZDIST \u003d \u0027azleastloaded\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OVNGatewayScheduler(object, metaclass\u003dabc.ABCMeta):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e527d169_ff69cbf0","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":51},"in_reply_to":"2b0eaad6_93e34c17","updated":"2023-09-04 14:36:15.000000000","message":"Right. But the last sentence doesn\u0027t explicitly says that we are scheduling LRP among all AZs:\n\"\"\"\nwe will see that this port has been only scheduled to Chassis matching\nwith the router\u0027s availability zones\n\"\"\"\n\nThis sentence is describing the current behaviour: we are scheduling LRPs only on the selected AZs chassis. But IMO, as you commented, we should provide this functionality to the current L3 schedulers (chance, leastloaded).\n\nI consider that providing two very similar schedulers (chance vs azchance and leastloaded vs azleastloaded) with slightly different behaviour in one particular case, is not what we should provide to the users.","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e1cf200a1cb7e7298b2e9a36bfb9af81752fc027","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"OVN_SCHEDULER_CHANCE \u003d \u0027chance\u0027"},{"line_number":29,"context_line":"OVN_SCHEDULER_LEAST_LOADED \u003d \u0027leastloaded\u0027"},{"line_number":30,"context_line":"OVN_SCHEDULER_CHANCE_AZDIST \u003d \u0027azchance\u0027"},{"line_number":31,"context_line":"OVN_SCHEDULER_LEAST_LOADED_AZDIST \u003d \u0027azleastloaded\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OVNGatewayScheduler(object, metaclass\u003dabc.ABCMeta):"}],"source_content_type":"text/x-python","patch_set":5,"id":"2b0eaad6_93e34c17","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":51},"in_reply_to":"3d585545_65957f45","updated":"2023-08-30 20:47:15.000000000","message":"That is a good question Rodolfo. It seems the OVS and OVN schedulers should behave the same way, and if the OVN scheduler is already AZ aware we should just change the current one.\n\nSo the obvious comments:\n\n1) Will anyone miss the current behavior? imo I don\u0027t think so.\n2) Besides adding a release note we should add something to doc/source/admin/ovn/availablity_zones.rst to make this clear - if I\u0027m reading it right does it describe the current behavior?\n\n\"Each entry on this table represents an instance of the gateway port\n(L3 HA, for more information see :ref:`Routing in OVN\u003covn_routing\u003e`),\nthe ``chassis_name`` column indicates which Chassis that port instance\nis scheduled onto. If we co-relate each entry and their ``chassis_name``\nwe will see that this port has been only scheduled to Chassis matching\nwith the router\u0027s availability zones.\"","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"ade38f417f1801c50d1e7ef23ac0eb410cef935e","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"OVN_SCHEDULER_CHANCE \u003d \u0027chance\u0027"},{"line_number":29,"context_line":"OVN_SCHEDULER_LEAST_LOADED \u003d \u0027leastloaded\u0027"},{"line_number":30,"context_line":"OVN_SCHEDULER_CHANCE_AZDIST \u003d \u0027azchance\u0027"},{"line_number":31,"context_line":"OVN_SCHEDULER_LEAST_LOADED_AZDIST \u003d \u0027azleastloaded\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OVNGatewayScheduler(object, metaclass\u003dabc.ABCMeta):"}],"source_content_type":"text/x-python","patch_set":5,"id":"aa572ebb_0375a82f","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":51},"in_reply_to":"e527d169_ff69cbf0","updated":"2023-09-28 11:41:53.000000000","message":"In the latest patch set (7), I\u0027ve updated the code base to include the change into the two original schedulers. I\u0027ve also updated the documentation and added a release note. Please tell me if it\u0027s OK for you.","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2aa6c583cf5c45d1ff9038174cb6e9f2575dc602","unresolved":true,"context_lines":[{"line_number":91,"context_line":"    def _reorder_by_az(self, nb_idl, sb_idl, candidates):"},{"line_number":92,"context_line":"        chassis_selected \u003d []"},{"line_number":93,"context_line":"        other_chassis \u003d []"},{"line_number":94,"context_line":"        azs \u003d []"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Check if candidates list valid"},{"line_number":97,"context_line":"        if not candidates or ("}],"source_content_type":"text/x-python","patch_set":5,"id":"4a132e5d_a7a7369a","line":94,"updated":"2023-08-29 14:12:27.000000000","message":"I actually meant making it a set here:\n\nazs \u003d set()","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"0d34b7380d0abe271b475891cdc1f269680dbc21","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def _reorder_by_az(self, nb_idl, sb_idl, candidates):"},{"line_number":92,"context_line":"        chassis_selected \u003d []"},{"line_number":93,"context_line":"        other_chassis \u003d []"},{"line_number":94,"context_line":"        azs \u003d []"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Check if candidates list valid"},{"line_number":97,"context_line":"        if not candidates or ("}],"source_content_type":"text/x-python","patch_set":5,"id":"422b0ab2_cc505bf5","line":94,"in_reply_to":"4a132e5d_a7a7369a","updated":"2023-08-30 06:42:15.000000000","message":"Done","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2aa6c583cf5c45d1ff9038174cb6e9f2575dc602","unresolved":true,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        # Get list of all AZs"},{"line_number":105,"context_line":"        for chassis in candidates:"},{"line_number":106,"context_line":"            azs +\u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":107,"context_line":"        # Filter out duplicate items"},{"line_number":108,"context_line":"        azs \u003d list(set(azs))"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"d40ea93b_7782a011","line":106,"updated":"2023-08-29 14:12:27.000000000","message":"Then this would be something like:\n\n    for az in chassis_with_azs.get(chassis, {}):\n        azs.add(az)","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"0d34b7380d0abe271b475891cdc1f269680dbc21","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        # Get list of all AZs"},{"line_number":105,"context_line":"        for chassis in candidates:"},{"line_number":106,"context_line":"            azs +\u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":107,"context_line":"        # Filter out duplicate items"},{"line_number":108,"context_line":"        azs \u003d list(set(azs))"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fee420da_67490ead","line":106,"in_reply_to":"d40ea93b_7782a011","updated":"2023-08-30 06:42:15.000000000","message":"Done","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2aa6c583cf5c45d1ff9038174cb6e9f2575dc602","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        for chassis in candidates:"},{"line_number":106,"context_line":"            azs +\u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":107,"context_line":"        # Filter out duplicate items"},{"line_number":108,"context_line":"        azs \u003d list(set(azs))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        for chassis in candidates:"},{"line_number":111,"context_line":"            # Get AZs from current chassis"}],"source_content_type":"text/x-python","patch_set":5,"id":"98e06aba_021eac38","line":108,"updated":"2023-08-29 14:12:27.000000000","message":"And this goes away","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"0d34b7380d0abe271b475891cdc1f269680dbc21","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        for chassis in candidates:"},{"line_number":106,"context_line":"            azs +\u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":107,"context_line":"        # Filter out duplicate items"},{"line_number":108,"context_line":"        azs \u003d list(set(azs))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        for chassis in candidates:"},{"line_number":111,"context_line":"            # Get AZs from current chassis"}],"source_content_type":"text/x-python","patch_set":5,"id":"caa207d7_d0214fb2","line":108,"in_reply_to":"98e06aba_021eac38","updated":"2023-08-30 06:42:15.000000000","message":"Done","commit_id":"5fdf086a916b85eb877b08bda3f6b7bc740a51a2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        # Check if candidates list valid"},{"line_number":100,"context_line":"        if not candidates or ("},{"line_number":101,"context_line":"                candidates \u003d\u003d [ovn_const.OVN_GATEWAY_INVALID_CHASSIS]):"},{"line_number":102,"context_line":"            LOG.warning(\u0027No valid candidates to reorder by AZ\u0027)"},{"line_number":103,"context_line":"            return candidates"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        chassis_with_azs \u003d sb_idl.get_chassis_and_azs()"}],"source_content_type":"text/x-python","patch_set":9,"id":"56912e3b_0d376636","line":102,"range":{"start_line":102,"start_character":12,"end_line":102,"end_character":63},"updated":"2024-01-25 11:01:33.000000000","message":"This warning message is already written in https://github.com/openstack/neutron/blob/3ef02cc2fb44a665001df1074b9e6e383a9d83a6/neutron/scheduler/l3_ovn_scheduler.py#L74","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        # Check if candidates list valid"},{"line_number":100,"context_line":"        if not candidates or ("},{"line_number":101,"context_line":"                candidates \u003d\u003d [ovn_const.OVN_GATEWAY_INVALID_CHASSIS]):"},{"line_number":102,"context_line":"            LOG.warning(\u0027No valid candidates to reorder by AZ\u0027)"},{"line_number":103,"context_line":"            return candidates"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        chassis_with_azs \u003d sb_idl.get_chassis_and_azs()"}],"source_content_type":"text/x-python","patch_set":9,"id":"928ae179_e07dc5ed","line":102,"range":{"start_line":102,"start_character":12,"end_line":102,"end_character":63},"in_reply_to":"56912e3b_0d376636","updated":"2024-01-26 14:22:23.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Get list of all AZs"},{"line_number":108,"context_line":"        for chassis in candidates:"},{"line_number":109,"context_line":"            for az in chassis_with_azs.get(chassis, {}):"},{"line_number":110,"context_line":"                azs.add(az)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        for chassis in candidates:"},{"line_number":113,"context_line":"            # Get AZs from current chassis"}],"source_content_type":"text/x-python","patch_set":9,"id":"43c96ced_05b7f837","line":110,"range":{"start_line":109,"start_character":12,"end_line":110,"end_character":27},"updated":"2024-01-25 11:01:33.000000000","message":"There is no need to iterate:\n```\n    try:\n        azs.update(chassis_with_azs[chassis])\n    except KeyError:\n        continue\n```","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Get list of all AZs"},{"line_number":108,"context_line":"        for chassis in candidates:"},{"line_number":109,"context_line":"            for az in chassis_with_azs.get(chassis, {}):"},{"line_number":110,"context_line":"                azs.add(az)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        for chassis in candidates:"},{"line_number":113,"context_line":"            # Get AZs from current chassis"}],"source_content_type":"text/x-python","patch_set":9,"id":"aa814a60_ea860264","line":110,"range":{"start_line":109,"start_character":12,"end_line":110,"end_character":27},"in_reply_to":"43c96ced_05b7f837","updated":"2024-01-26 14:22:23.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        for chassis in candidates:"},{"line_number":113,"context_line":"            # Get AZs from current chassis"},{"line_number":114,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":115,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":116,"context_line":"            # Verify if chassis is in an AZ not already used"},{"line_number":117,"context_line":"            # and delete AZs of chassis from list"}],"source_content_type":"text/x-python","patch_set":9,"id":"62d87115_ead38f90","line":114,"range":{"start_line":114,"start_character":26,"end_line":114,"end_character":65},"updated":"2024-01-25 11:01:33.000000000","message":"There is no need to convert it to a list.","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        for chassis in candidates:"},{"line_number":113,"context_line":"            # Get AZs from current chassis"},{"line_number":114,"context_line":"            chassis_azs \u003d list(chassis_with_azs.get(chassis, []))"},{"line_number":115,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":116,"context_line":"            # Verify if chassis is in an AZ not already used"},{"line_number":117,"context_line":"            # and delete AZs of chassis from list"}],"source_content_type":"text/x-python","patch_set":9,"id":"b65d17ed_c3c6566f","line":114,"range":{"start_line":114,"start_character":26,"end_line":114,"end_character":65},"in_reply_to":"62d87115_ead38f90","updated":"2024-01-26 14:22:23.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":115,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":116,"context_line":"            # Verify if chassis is in an AZ not already used"},{"line_number":117,"context_line":"            # and delete AZs of chassis from list"},{"line_number":118,"context_line":"            for az in chassis_azs:"},{"line_number":119,"context_line":"                if az in azs:"},{"line_number":120,"context_line":"                    azs.remove(az)"},{"line_number":121,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":122,"context_line":"            # If chassis in new AZ"},{"line_number":123,"context_line":"            if chassis_in_new_az:"},{"line_number":124,"context_line":"                chassis_selected +\u003d [chassis]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5e11888c_103aa841","line":121,"range":{"start_line":118,"start_character":12,"end_line":121,"end_character":44},"updated":"2024-01-25 11:01:33.000000000","message":"Following the previous comment:\n```\ntry:\n    chassis_azs \u003d chassis_with_azs[chassis]\n    if azs.intersection(chassis_azs):\n        azs \u003d azs.difference(chassis_azs)\n        chassis_selected +\u003d [chassis]\n    else:\n        other_chassis +\u003d [chassis]\nexcept KeyError:\n    other_chassis +\u003d [chassis]\n```","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            chassis_in_new_az \u003d False"},{"line_number":116,"context_line":"            # Verify if chassis is in an AZ not already used"},{"line_number":117,"context_line":"            # and delete AZs of chassis from list"},{"line_number":118,"context_line":"            for az in chassis_azs:"},{"line_number":119,"context_line":"                if az in azs:"},{"line_number":120,"context_line":"                    azs.remove(az)"},{"line_number":121,"context_line":"                    chassis_in_new_az \u003d True"},{"line_number":122,"context_line":"            # If chassis in new AZ"},{"line_number":123,"context_line":"            if chassis_in_new_az:"},{"line_number":124,"context_line":"                chassis_selected +\u003d [chassis]"}],"source_content_type":"text/x-python","patch_set":9,"id":"ec0499bc_49720ed5","line":121,"range":{"start_line":118,"start_character":12,"end_line":121,"end_character":44},"in_reply_to":"5e11888c_103aa841","updated":"2024-01-26 14:22:23.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        chassis_selected +\u003d other_chassis"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return(chassis_selected)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @abc.abstractmethod"},{"line_number":134,"context_line":"    def _select_gateway_chassis(self, nb_idl, sb_idl, candidates,"}],"source_content_type":"text/x-python","patch_set":9,"id":"d79b479d_3fd2d88f","line":131,"range":{"start_line":131,"start_character":14,"end_line":131,"end_character":32},"updated":"2024-01-25 11:01:33.000000000","message":"return is not a method but an statement","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        chassis_selected +\u003d other_chassis"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return(chassis_selected)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @abc.abstractmethod"},{"line_number":134,"context_line":"    def _select_gateway_chassis(self, nb_idl, sb_idl, candidates,"}],"source_content_type":"text/x-python","patch_set":9,"id":"037d3d72_5df61c51","line":131,"range":{"start_line":131,"start_character":14,"end_line":131,"end_character":32},"in_reply_to":"d79b479d_3fd2d88f","updated":"2024-01-26 14:22:23.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"}],"neutron/tests/unit/scheduler/test_l3_ovn_scheduler.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5992f6c00714e5a3518b0e87c848a72f64cc828e","unresolved":true,"context_lines":[{"line_number":275,"context_line":"class OVNGatewayChanceSchedulerAZDist(TestOVNGatewayScheduler):"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def setUp(self):"},{"line_number":278,"context_line":"        super(OVNGatewayChanceSchedulerAZDist, self).setUp()"},{"line_number":279,"context_line":"        self.l3_scheduler \u003d l3_ovn_scheduler.OVNGatewayChanceSchedulerAZDist()"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def test_no_chassis_available_for_existing_gateway(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"60f11b0c_8df03d86","line":278,"updated":"2023-08-24 16:18:19.000000000","message":"nit: this can be super().setUp() since we only support py3","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"1d5ff1e7d986c1d03869e33183c63451abd0b01e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"class OVNGatewayChanceSchedulerAZDist(TestOVNGatewayScheduler):"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def setUp(self):"},{"line_number":278,"context_line":"        super(OVNGatewayChanceSchedulerAZDist, self).setUp()"},{"line_number":279,"context_line":"        self.l3_scheduler \u003d l3_ovn_scheduler.OVNGatewayChanceSchedulerAZDist()"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def test_no_chassis_available_for_existing_gateway(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8b6693_b0448043","line":278,"in_reply_to":"60f11b0c_8df03d86","updated":"2023-08-25 11:33:23.000000000","message":"Done","commit_id":"8205822e135df3adabf40f1b354966cf44e89ef1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.fake_chassis_and_azs \u003d {"},{"line_number":88,"context_line":"            \u0027None\u0027: {},"},{"line_number":89,"context_line":"            \u0027Multiple1\u0027: {\u0027hv1\u0027: {\u0027az-1\u0027},"},{"line_number":90,"context_line":"                          \u0027hv2\u0027: {\u0027az-0\u0027},"},{"line_number":91,"context_line":"                          \u0027hv3\u0027: {\u0027az-0\u0027},"},{"line_number":92,"context_line":"                          \u0027hv4\u0027: {\u0027az-0\u0027},"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ec72e46_88fb2bc5","line":89,"range":{"start_line":89,"start_character":34,"end_line":89,"end_character":40},"updated":"2024-01-25 11:01:33.000000000","message":"You need to check with multiple AZs per chassis, not in all of them, but at least in a couple.","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.fake_chassis_and_azs \u003d {"},{"line_number":88,"context_line":"            \u0027None\u0027: {},"},{"line_number":89,"context_line":"            \u0027Multiple1\u0027: {\u0027hv1\u0027: {\u0027az-1\u0027},"},{"line_number":90,"context_line":"                          \u0027hv2\u0027: {\u0027az-0\u0027},"},{"line_number":91,"context_line":"                          \u0027hv3\u0027: {\u0027az-0\u0027},"},{"line_number":92,"context_line":"                          \u0027hv4\u0027: {\u0027az-0\u0027},"}],"source_content_type":"text/x-python","patch_set":9,"id":"13acacfa_8e6d643a","line":89,"range":{"start_line":89,"start_character":34,"end_line":89,"end_character":40},"in_reply_to":"1ec72e46_88fb2bc5","updated":"2024-01-26 14:22:23.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a017503ecb2e48b5731b3ab82c73afdf2531528a","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        self.assertCountEqual(chassis, mapping.get(\u0027Chassis\u0027))"},{"line_number":239,"context_line":"        # least loaded will be the first one in the list,"},{"line_number":240,"context_line":"        # networking-ovn will assign highest priority to this first element"},{"line_number":241,"context_line":"        self.assertEqual([\u0027hv5\u0027, \u0027hv1\u0027, \u0027hv4\u0027, \u0027hv3\u0027, \u0027hv2\u0027], chassis)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_least_loaded_chassis_available_for_new_gateway2(self):"},{"line_number":244,"context_line":"        mapping \u003d self.fake_chassis_gateway_mappings[\u0027Multiple2\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"377bfc72_cff04b24","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":70},"updated":"2024-01-25 11:01:33.000000000","message":"You should not modify previous tests. Instead of this, you should implement a new testing class and there using \"FakeOVNGatewaySchedulerSbOvnIdl\", for \"OVNGatewayLeastLoadedScheduler\" and \"OVNGatewayChanceScheduler\". If any of the existing tests, now using AZs returns a different value, then override this test and justify why the results are different from the non-AZ test.","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"3d1323d95e9fd5f574b3e2d5f41d9dd050145687","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        self.assertCountEqual(chassis, mapping.get(\u0027Chassis\u0027))"},{"line_number":239,"context_line":"        # least loaded will be the first one in the list,"},{"line_number":240,"context_line":"        # networking-ovn will assign highest priority to this first element"},{"line_number":241,"context_line":"        self.assertEqual([\u0027hv5\u0027, \u0027hv1\u0027, \u0027hv4\u0027, \u0027hv3\u0027, \u0027hv2\u0027], chassis)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_least_loaded_chassis_available_for_new_gateway2(self):"},{"line_number":244,"context_line":"        mapping \u003d self.fake_chassis_gateway_mappings[\u0027Multiple2\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"cc9bb241_811168f3","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":70},"in_reply_to":"377bfc72_cff04b24","updated":"2024-01-26 14:22:23.000000000","message":"I agree it may be better. But, I think that FakeOVNGatewaySchedulerSbOvnIdl is unfortunately still required in TestOVNGatewayScheduler, as l3_scheduler.select now requires sb_idl. I made a proposition in next patchset to keep previous tests and having a new test class OVNGatewayLeastLoadedSchedulerWithAZ for OVNGatewayLeastLoadedScheduler taking care of AZs. I\u0027m not sure we can do the same for chance scheduler as order in not determinist.","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"432a51b5d5ce8382f99e3c0499d39590051f657a","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        self.assertCountEqual(chassis, mapping.get(\u0027Chassis\u0027))"},{"line_number":239,"context_line":"        # least loaded will be the first one in the list,"},{"line_number":240,"context_line":"        # networking-ovn will assign highest priority to this first element"},{"line_number":241,"context_line":"        self.assertEqual([\u0027hv5\u0027, \u0027hv1\u0027, \u0027hv4\u0027, \u0027hv3\u0027, \u0027hv2\u0027], chassis)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_least_loaded_chassis_available_for_new_gateway2(self):"},{"line_number":244,"context_line":"        mapping \u003d self.fake_chassis_gateway_mappings[\u0027Multiple2\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"4e1c24f9_42a0dc19","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":70},"in_reply_to":"cc9bb241_811168f3","updated":"2024-01-29 12:09:29.000000000","message":"Done","commit_id":"f3922a8d89e7ff30c374f0255917989ed004e01a"}],"releasenotes/notes/bug-2030741-f4c780df9cf3db4e.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"39908ba02a6fd89596f0f8fd831b95bb13325a1e","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":"    Fixes L3 ovn schedulers (chance, leastloaded) to distribute LRP gateways"},{"line_number":5,"context_line":"    among all eligible AZs (if any)."},{"line_number":6,"context_line":"    `LP#2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`__"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"707530b6_dfd51a87","line":4,"range":{"start_line":4,"start_character":64,"end_line":4,"end_character":67},"updated":"2023-10-04 02:11:30.000000000","message":"I would spell out what LRP is, something like\n\nLogical Router Port (LRP)","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"39908ba02a6fd89596f0f8fd831b95bb13325a1e","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":"    Fixes L3 ovn schedulers (chance, leastloaded) to distribute LRP gateways"},{"line_number":5,"context_line":"    among all eligible AZs (if any)."},{"line_number":6,"context_line":"    `LP#2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`__"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5c114c13_eb33d1cf","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":16},"updated":"2023-10-04 02:11:30.000000000","message":"s/OVN","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"d2e73412f5f26937c10bfdb8dc48d2bd8380d329","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":"    Fixes L3 ovn schedulers (chance, leastloaded) to distribute LRP gateways"},{"line_number":5,"context_line":"    among all eligible AZs (if any)."},{"line_number":6,"context_line":"    `LP#2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`__"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3e7e1ef4_496294ae","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":16},"in_reply_to":"5c114c13_eb33d1cf","updated":"2023-10-05 06:19:49.000000000","message":"Done","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"d2e73412f5f26937c10bfdb8dc48d2bd8380d329","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":"    Fixes L3 ovn schedulers (chance, leastloaded) to distribute LRP gateways"},{"line_number":5,"context_line":"    among all eligible AZs (if any)."},{"line_number":6,"context_line":"    `LP#2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`__"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"87221d6a_c35422f2","line":4,"range":{"start_line":4,"start_character":64,"end_line":4,"end_character":67},"in_reply_to":"707530b6_dfd51a87","updated":"2023-10-05 06:19:49.000000000","message":"Done","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"39908ba02a6fd89596f0f8fd831b95bb13325a1e","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes L3 ovn schedulers (chance, leastloaded) to distribute LRP gateways"},{"line_number":5,"context_line":"    among all eligible AZs (if any)."},{"line_number":6,"context_line":"    `LP#2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`__"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"a52101c4_789ba3d0","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":55},"updated":"2023-10-04 02:11:30.000000000","message":"s/For more information, see bug `2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`_.","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"},{"author":{"_account_id":23763,"name":"morice","email":"yann.morice@arkea.com","username":"ymorice"},"change_message_id":"d2e73412f5f26937c10bfdb8dc48d2bd8380d329","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes L3 ovn schedulers (chance, leastloaded) to distribute LRP gateways"},{"line_number":5,"context_line":"    among all eligible AZs (if any)."},{"line_number":6,"context_line":"    `LP#2030741 \u003chttps://launchpad.net/bugs/2030741\u003e`__"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"e5025092_3aa97fdf","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":55},"in_reply_to":"a52101c4_789ba3d0","updated":"2023-10-05 06:19:49.000000000","message":"Done","commit_id":"4c52fdd1438a87e35c19e4e2a555c3cb9ae8fc95"}]}
