)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29074,"name":"Felix Huettner","email":"felix.huettner@digits.schwarz","username":"felix.huettner"},"change_message_id":"e589c47262b9040bfc2eda2e88ca2ebb25406d96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e42e109f_4e1f1b96","updated":"2023-09-06 09:53:28.000000000","message":"recheck: completely different test failed","commit_id":"0a58131daf1040e9e7d902758c423478f847aecd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"26ac1e7379d2a0fe9372ab559e937d8485fad1a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2ed550d2_d17843b3","updated":"2023-09-15 16:54:36.000000000","message":"1) One question in the code.\n2) You need to add testing, at least UTs to prove that is working\n3) A release note, in the \"other\" section.","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"},{"author":{"_account_id":29074,"name":"Felix Huettner","email":"felix.huettner@digits.schwarz","username":"felix.huettner"},"change_message_id":"911dc4f540e44fd29d817fb78fc50c2c94bf8170","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d6b2909d_fbe212a4","updated":"2023-09-11 09:46:13.000000000","message":"recheck: some nova error","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"},{"author":{"_account_id":29074,"name":"Felix Huettner","email":"felix.huettner@digits.schwarz","username":"felix.huettner"},"change_message_id":"02c50a4a418720a405ef2450f893ca7996a715a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0994e05d_ba22fce2","updated":"2023-09-11 14:54:40.000000000","message":"recheck: something strange happend with dhcp clients","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"},{"author":{"_account_id":29074,"name":"Felix Huettner","email":"felix.huettner@digits.schwarz","username":"felix.huettner"},"change_message_id":"6d9ad9eb3e73cd8e24ff4e339e87889fc256b611","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4c1915c2_370a39b3","in_reply_to":"2ed550d2_d17843b3","updated":"2023-09-18 09:37:53.000000000","message":"thanks done.\nI also adapted the commit message, to have a more concrete example","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d9a0a8d4bad133caa1d77a30efea7e9ad6548cb6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c75a8ab9_1191343e","updated":"2023-09-21 14:34:40.000000000","message":"Please check my comment in the tests. Why this output? Shouldn\u0027t this new algorithm rebalance the chassis depending on the priority?","commit_id":"b3da53c666dca6ca12d845286cd2a6fb708f7755"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"26ac1e7379d2a0fe9372ab559e937d8485fad1a5","unresolved":true,"context_lines":[{"line_number":437,"context_line":"                    chassis_with_azs\u003dchassis_with_azs)"},{"line_number":438,"context_line":"            if existing_chassis !\u003d filtered_existing_chassis:"},{"line_number":439,"context_line":"                first_diff \u003d None"},{"line_number":440,"context_line":"                for i in range(len(filtered_existing_chassis)):"},{"line_number":441,"context_line":"                    if existing_chassis[i] !\u003d filtered_existing_chassis[i]:"},{"line_number":442,"context_line":"                        first_diff \u003d i"},{"line_number":443,"context_line":"                        break"},{"line_number":444,"context_line":"                if first_diff is not None:"},{"line_number":445,"context_line":"                    LOG.debug("},{"line_number":446,"context_line":"                        \"A chassis for this gateway has been filtered. \""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a130e86_b7547924","line":443,"range":{"start_line":440,"start_character":16,"end_line":443,"end_character":29},"updated":"2023-09-15 16:54:36.000000000","message":"ok, just to be sure: that will re-create the whole chassis list, including the first one. But this is **only for unhosted LRPs**, right?","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"},{"author":{"_account_id":29074,"name":"Felix Huettner","email":"felix.huettner@digits.schwarz","username":"felix.huettner"},"change_message_id":"6d9ad9eb3e73cd8e24ff4e339e87889fc256b611","unresolved":true,"context_lines":[{"line_number":437,"context_line":"                    chassis_with_azs\u003dchassis_with_azs)"},{"line_number":438,"context_line":"            if existing_chassis !\u003d filtered_existing_chassis:"},{"line_number":439,"context_line":"                first_diff \u003d None"},{"line_number":440,"context_line":"                for i in range(len(filtered_existing_chassis)):"},{"line_number":441,"context_line":"                    if existing_chassis[i] !\u003d filtered_existing_chassis[i]:"},{"line_number":442,"context_line":"                        first_diff \u003d i"},{"line_number":443,"context_line":"                        break"},{"line_number":444,"context_line":"                if first_diff is not None:"},{"line_number":445,"context_line":"                    LOG.debug("},{"line_number":446,"context_line":"                        \"A chassis for this gateway has been filtered. \""}],"source_content_type":"text/x-python","patch_set":6,"id":"e90fd605_981511ff","line":443,"range":{"start_line":440,"start_character":16,"end_line":443,"end_character":29},"in_reply_to":"1a130e86_b7547924","updated":"2023-09-18 09:37:53.000000000","message":"Thanks for the question. This actually contained a bug that is now fixed.\nIt will now recreate part of the chassis list for everything returned by `get_unhosted_gateways`. The part recreated is the first changed chassis and all chassis with lower priority.\n\nIt will no longer touch the first chassis. There has been a safeguard for that below already, but now it is also in here.","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7edb0568e1870bb431968298e1f254fb9c5d4cb0","unresolved":true,"context_lines":[{"line_number":437,"context_line":"                    chassis_with_azs\u003dchassis_with_azs)"},{"line_number":438,"context_line":"            if existing_chassis !\u003d filtered_existing_chassis:"},{"line_number":439,"context_line":"                first_diff \u003d None"},{"line_number":440,"context_line":"                for i in range(len(filtered_existing_chassis)):"},{"line_number":441,"context_line":"                    if existing_chassis[i] !\u003d filtered_existing_chassis[i]:"},{"line_number":442,"context_line":"                        first_diff \u003d i"},{"line_number":443,"context_line":"                        break"},{"line_number":444,"context_line":"                if first_diff is not None:"},{"line_number":445,"context_line":"                    LOG.debug("},{"line_number":446,"context_line":"                        \"A chassis for this gateway has been filtered. \""}],"source_content_type":"text/x-python","patch_set":6,"id":"b9236467_9704fdc1","line":443,"range":{"start_line":440,"start_character":16,"end_line":443,"end_character":29},"in_reply_to":"e90fd605_981511ff","updated":"2024-01-17 13:21:21.000000000","message":"Ah good, it\u0027s important to not touch the highest priority chassis otherwise things can move around and cause some data disruption","commit_id":"ba58c3809fcc8a507f8e856907883dcf9b82581b"}],"neutron/tests/unit/services/ovn_l3/test_plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d9a0a8d4bad133caa1d77a30efea7e9ad6548cb6","unresolved":true,"context_lines":[{"line_number":1627,"context_line":"        # for 2. port reschedule all besides the new first (chassis 4)"},{"line_number":1628,"context_line":"        # for 3. port keep all and drop the last"},{"line_number":1629,"context_line":"        self.mock_schedule.side_effect \u003d ["},{"line_number":1630,"context_line":"            [\u0027chassis1\u0027, \u0027chassis4\u0027, \u0027chassis3\u0027],"},{"line_number":1631,"context_line":"            [\u0027chassis4\u0027, \u0027chassis3\u0027, \u0027chassis1\u0027],"},{"line_number":1632,"context_line":"            [\u0027chassis4\u0027, \u0027chassis3\u0027, \u0027chassis1\u0027]]"},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"        self.l3_inst.schedule_unhosted_gateways()"},{"line_number":1635,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"e6181068_f7952907","line":1632,"range":{"start_line":1630,"start_character":12,"end_line":1632,"end_character":49},"updated":"2023-09-21 14:34:40.000000000","message":"To be honest, I don\u0027t think the algorithm is working fine. This matrix should be:\n```\nch1, ch4, ch3\nch3, ch1, ch4 \u003c-- this should be the logical list if all chassis are balanced\nch4, ch3, ch1 \n```\n\nWith this second chassis list, the available chassis are perfectly balanced per priority.","commit_id":"b3da53c666dca6ca12d845286cd2a6fb708f7755"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"00e3e405c23b0de3eaae71f375fc52a16a78ab0c","unresolved":false,"context_lines":[{"line_number":1627,"context_line":"        # for 2. port reschedule all besides the new first (chassis 4)"},{"line_number":1628,"context_line":"        # for 3. port keep all and drop the last"},{"line_number":1629,"context_line":"        self.mock_schedule.side_effect \u003d ["},{"line_number":1630,"context_line":"            [\u0027chassis1\u0027, \u0027chassis4\u0027, \u0027chassis3\u0027],"},{"line_number":1631,"context_line":"            [\u0027chassis4\u0027, \u0027chassis3\u0027, \u0027chassis1\u0027],"},{"line_number":1632,"context_line":"            [\u0027chassis4\u0027, \u0027chassis3\u0027, \u0027chassis1\u0027]]"},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"        self.l3_inst.schedule_unhosted_gateways()"},{"line_number":1635,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a53d1e2_5b618c27","line":1632,"range":{"start_line":1630,"start_character":12,"end_line":1632,"end_character":49},"in_reply_to":"65198328_036776af","updated":"2024-01-17 10:23:16.000000000","message":"Ok, that makes sense.\n\nWe need to create a good documentation for these algorithms. Other developers will find them confusing without a good documentation and examples.","commit_id":"b3da53c666dca6ca12d845286cd2a6fb708f7755"},{"author":{"_account_id":29074,"name":"Felix Huettner","email":"felix.huettner@digits.schwarz","username":"felix.huettner"},"change_message_id":"8d0946a7cffdc9e23e982d251611eb77ffadc3d5","unresolved":true,"context_lines":[{"line_number":1627,"context_line":"        # for 2. port reschedule all besides the new first (chassis 4)"},{"line_number":1628,"context_line":"        # for 3. port keep all and drop the last"},{"line_number":1629,"context_line":"        self.mock_schedule.side_effect \u003d ["},{"line_number":1630,"context_line":"            [\u0027chassis1\u0027, \u0027chassis4\u0027, \u0027chassis3\u0027],"},{"line_number":1631,"context_line":"            [\u0027chassis4\u0027, \u0027chassis3\u0027, \u0027chassis1\u0027],"},{"line_number":1632,"context_line":"            [\u0027chassis4\u0027, \u0027chassis3\u0027, \u0027chassis1\u0027]]"},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"        self.l3_inst.schedule_unhosted_gateways()"},{"line_number":1635,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"65198328_036776af","line":1632,"range":{"start_line":1630,"start_character":12,"end_line":1632,"end_character":49},"in_reply_to":"e6181068_f7952907","updated":"2023-10-02 10:09:22.000000000","message":"Yes but that would trigger a failover that we want to avoid.\n\nIn case of the second port that you highlighted `_schedule_gateway` will be called with the following information`:\n* gateway_name: lrp-foo-2\n* candidates: chassis1, chassis3, chassis4\n* existing_chassis: chassis4\n\nSince chassis4 is already in the first slot it will not be changed (as that would also cause a failover of the highest prio chassis).\nWhich means only chassis1 and chassis3 are available for the next two slots (prio 2 and 1). Since there is none of them already used for prio 2 the choice is equal and random, i chose chassis3 here for no particular reason. This means that the only chassis for prio 1 is chassis1","commit_id":"b3da53c666dca6ca12d845286cd2a6fb708f7755"}]}
