)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dc4401d2fe750977d818a6a1f16b6781485e641d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"176e1bb3_9c8af22e","updated":"2025-11-05 12:35:55.000000000","message":"recheck neutron-functional","commit_id":"868b1c959a30b9a134ab2efee729d93476ae1659"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6d3a17e724859de8e2bfc9b6b2f21c1fb34eb7c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"ea762d19_8b828c08","updated":"2026-03-24 15:23:38.000000000","message":"recheck zuul","commit_id":"47ccd29e6031432b32d8e3f98c178de84fdd06e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e83f514acc47bd5db79da4838959480ae576e58","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"ec3d63ed_ed2109fa","updated":"2026-03-31 13:49:11.000000000","message":"recheck neutron-functional","commit_id":"fc1ab0044a80b2c756a4b612b723789585563fba"}],"neutron/common/ovn/utils.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4cb7761edfa74076f127e4fe2944ebb0ac5b65d8","unresolved":true,"context_lines":[{"line_number":939,"context_line":"    \"\"\"Given a chassis list, returns a dictionary with chassis name and prio"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"    The chassis list is ordered according to the priority: the first one is the"},{"line_number":942,"context_line":"    highest priority chassis, the last one is the least priority chassis."},{"line_number":943,"context_line":"    \"\"\""},{"line_number":944,"context_line":"    return {chassis: prio + 1 for prio, chassis"},{"line_number":945,"context_line":"            in enumerate(reversed(chassis_list))}"}],"source_content_type":"text/x-python","patch_set":39,"id":"eca6c791_ac01e6c2","line":942,"range":{"start_line":942,"start_character":50,"end_line":942,"end_character":55},"updated":"2026-04-01 20:16:06.000000000","message":"nit: lowest","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"90cb0e1ec572c5133eb8c59d622a584d3ea344bb","unresolved":false,"context_lines":[{"line_number":939,"context_line":"    \"\"\"Given a chassis list, returns a dictionary with chassis name and prio"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"    The chassis list is ordered according to the priority: the first one is the"},{"line_number":942,"context_line":"    highest priority chassis, the last one is the least priority chassis."},{"line_number":943,"context_line":"    \"\"\""},{"line_number":944,"context_line":"    return {chassis: prio + 1 for prio, chassis"},{"line_number":945,"context_line":"            in enumerate(reversed(chassis_list))}"}],"source_content_type":"text/x-python","patch_set":39,"id":"3f71713c_512ec963","line":942,"range":{"start_line":942,"start_character":50,"end_line":942,"end_character":55},"in_reply_to":"eca6c791_ac01e6c2","updated":"2026-04-06 10:22:44.000000000","message":"Done","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4cb7761edfa74076f127e4fe2944ebb0ac5b65d8","unresolved":true,"context_lines":[{"line_number":602,"context_line":"                check_error\u003dTrue):"},{"line_number":603,"context_line":"            # If one of the HC of the HCG is associated to the chassis, append"},{"line_number":604,"context_line":"            # it and return."},{"line_number":605,"context_line":"            for __ in (hc for hc in hcg.ha_chassis if"},{"line_number":606,"context_line":"                      hc.chassis_name \u003d\u003d chassis_name):"},{"line_number":607,"context_line":"                ret.append(hcg)"},{"line_number":608,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":39,"id":"c1b22dae_28679d37","line":605,"range":{"start_line":605,"start_character":12,"end_line":605,"end_character":22},"updated":"2026-04-01 20:16:06.000000000","message":"Is this a place where any() works?","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"90cb0e1ec572c5133eb8c59d622a584d3ea344bb","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                check_error\u003dTrue):"},{"line_number":603,"context_line":"            # If one of the HC of the HCG is associated to the chassis, append"},{"line_number":604,"context_line":"            # it and return."},{"line_number":605,"context_line":"            for __ in (hc for hc in hcg.ha_chassis if"},{"line_number":606,"context_line":"                      hc.chassis_name \u003d\u003d chassis_name):"},{"line_number":607,"context_line":"                ret.append(hcg)"},{"line_number":608,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":39,"id":"1bc5b5b7_e271960f","line":605,"range":{"start_line":605,"start_character":12,"end_line":605,"end_character":22},"in_reply_to":"c1b22dae_28679d37","updated":"2026-04-06 10:22:44.000000000","message":"Much better.","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4cb7761edfa74076f127e4fe2944ebb0ac5b65d8","unresolved":true,"context_lines":[{"line_number":1233,"context_line":"                chassis_prio \u003d {}"},{"line_number":1234,"context_line":"                for gc in lrp.gateway_chassis:"},{"line_number":1235,"context_line":"                    chassis_prio[gc.chassis_name] \u003d gc.priority"},{"line_number":1236,"context_line":"                r_name \u003d lrp.external_ids.get("},{"line_number":1237,"context_line":"                    ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY)"},{"line_number":1238,"context_line":"                if not r_name:"},{"line_number":1239,"context_line":"                    LOG.warning(\u0027Logical_Router_Port %s does not \u0027"},{"line_number":1240,"context_line":"                                \u0027have the router name in external_ids.\u0027,"},{"line_number":1241,"context_line":"                                lrp.name)"},{"line_number":1242,"context_line":"                    continue"},{"line_number":1243,"context_line":""},{"line_number":1244,"context_line":"                # Add the new HA_Chassis_Group and assign to the LRP."},{"line_number":1245,"context_line":"                hcg_cmd \u003d txn.add(self._nb_idl.ha_chassis_group_with_hc_add("}],"source_content_type":"text/x-python","patch_set":39,"id":"15ba31a5_0b2b7830","line":1242,"range":{"start_line":1236,"start_character":16,"end_line":1242,"end_character":28},"updated":"2026-04-01 20:16:06.000000000","message":"nit: this check can go above the chassis_prio assignment","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"90cb0e1ec572c5133eb8c59d622a584d3ea344bb","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"                chassis_prio \u003d {}"},{"line_number":1234,"context_line":"                for gc in lrp.gateway_chassis:"},{"line_number":1235,"context_line":"                    chassis_prio[gc.chassis_name] \u003d gc.priority"},{"line_number":1236,"context_line":"                r_name \u003d lrp.external_ids.get("},{"line_number":1237,"context_line":"                    ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY)"},{"line_number":1238,"context_line":"                if not r_name:"},{"line_number":1239,"context_line":"                    LOG.warning(\u0027Logical_Router_Port %s does not \u0027"},{"line_number":1240,"context_line":"                                \u0027have the router name in external_ids.\u0027,"},{"line_number":1241,"context_line":"                                lrp.name)"},{"line_number":1242,"context_line":"                    continue"},{"line_number":1243,"context_line":""},{"line_number":1244,"context_line":"                # Add the new HA_Chassis_Group and assign to the LRP."},{"line_number":1245,"context_line":"                hcg_cmd \u003d txn.add(self._nb_idl.ha_chassis_group_with_hc_add("}],"source_content_type":"text/x-python","patch_set":39,"id":"b44028d8_e55206d6","line":1242,"range":{"start_line":1236,"start_character":16,"end_line":1242,"end_character":28},"in_reply_to":"15ba31a5_0b2b7830","updated":"2026-04-06 10:22:44.000000000","message":"Indeed, it is irrelevant to build `chassis_prio` for nothing.","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ffb8f89b41297bb09d9b0dc3a7680be55ab2ed68","unresolved":true,"context_lines":[{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        raise periodics.NeverAgain()"},{"line_number":1350,"context_line":""},{"line_number":1351,"context_line":"    # TODO(ralonsoh): to remove in H+3\u003dK (2028.1) cycle (2nd next SLURP"},{"line_number":1352,"context_line":"    # release)"},{"line_number":1353,"context_line":"    @has_lock_periodic("},{"line_number":1354,"context_line":"        periodic_run_limit\u003dovn_const.MAINTENANCE_TASK_RETRY_LIMIT,"}],"source_content_type":"text/x-python","patch_set":42,"id":"6466d075_aa39638d","line":1351,"updated":"2026-04-14 10:20:29.000000000","message":"IMHO removing it in 2027.2 would also be fine, but this plan is ok for me too","commit_id":"a428e5e1ddad2df87221b9db4f3ee79101562e47"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_maintenance.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4cb7761edfa74076f127e4fe2944ebb0ac5b65d8","unresolved":true,"context_lines":[{"line_number":1657,"context_line":"            periodics.NeverAgain,"},{"line_number":1658,"context_line":"            self.maint.migrate_lrp_gateway_chassis_to_ha_chassis_group)"},{"line_number":1659,"context_line":""},{"line_number":1660,"context_line":"        hcg \u003d self.nb_api.lookup(\u0027HA_Chassis_Group\u0027, lr_name, default\u003dNone)"},{"line_number":1661,"context_line":"        self.assertEqual(len(chassis_prio), len(hcg.ha_chassis))"},{"line_number":1662,"context_line":"        for ha_chassis in hcg.ha_chassis:"},{"line_number":1663,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"747d6ba6_2593b43e","line":1660,"updated":"2026-04-01 20:16:06.000000000","message":"Do we need a self.assertIsNotNone(hcg) here? It\u0027s going to blow up on the next line anyway","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"90cb0e1ec572c5133eb8c59d622a584d3ea344bb","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"            periodics.NeverAgain,"},{"line_number":1658,"context_line":"            self.maint.migrate_lrp_gateway_chassis_to_ha_chassis_group)"},{"line_number":1659,"context_line":""},{"line_number":1660,"context_line":"        hcg \u003d self.nb_api.lookup(\u0027HA_Chassis_Group\u0027, lr_name, default\u003dNone)"},{"line_number":1661,"context_line":"        self.assertEqual(len(chassis_prio), len(hcg.ha_chassis))"},{"line_number":1662,"context_line":"        for ha_chassis in hcg.ha_chassis:"},{"line_number":1663,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"aee6e25a_ed0c7fd7","line":1660,"in_reply_to":"747d6ba6_2593b43e","updated":"2026-04-06 10:22:44.000000000","message":"That\u0027s the point: that must never be None and if that happens, the next line will raise an exception.","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"}],"neutron/tests/functional/services/ovn_l3/test_plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4cb7761edfa74076f127e4fe2944ebb0ac5b65d8","unresolved":true,"context_lines":[{"line_number":928,"context_line":"        for row in self.nb_api.tables["},{"line_number":929,"context_line":"                \u0027Logical_Router_Port\u0027].rows.values():"},{"line_number":930,"context_line":"            hcg \u003d getattr(row, \u0027ha_chassis_group\u0027, None)"},{"line_number":931,"context_line":"            self.assertTrue(hcg)"},{"line_number":932,"context_line":"            self.assertEqual(ovn_const.MAX_GW_CHASSIS,"},{"line_number":933,"context_line":"                             len(hcg[0].ha_chassis))"},{"line_number":934,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"8cccbc4d_f12703ba","line":931,"range":{"start_line":931,"start_character":17,"end_line":931,"end_character":27},"updated":"2026-04-01 20:16:06.000000000","message":"Strange to be assertTrue, seems it should be checking assertEqual(1, len(hcg)) ? Although bool([]) is False","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"90cb0e1ec572c5133eb8c59d622a584d3ea344bb","unresolved":false,"context_lines":[{"line_number":928,"context_line":"        for row in self.nb_api.tables["},{"line_number":929,"context_line":"                \u0027Logical_Router_Port\u0027].rows.values():"},{"line_number":930,"context_line":"            hcg \u003d getattr(row, \u0027ha_chassis_group\u0027, None)"},{"line_number":931,"context_line":"            self.assertTrue(hcg)"},{"line_number":932,"context_line":"            self.assertEqual(ovn_const.MAX_GW_CHASSIS,"},{"line_number":933,"context_line":"                             len(hcg[0].ha_chassis))"},{"line_number":934,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"ff8649f1_3ae3e76d","line":931,"range":{"start_line":931,"start_character":17,"end_line":931,"end_character":27},"in_reply_to":"8cccbc4d_f12703ba","updated":"2026-04-06 10:22:44.000000000","message":"`ha_chassis_group` is a reference to another register, and could have 0 or 1 elements [1]. In any case, to check the length of the list is more explicit.\n\n[1]https://github.com/ovn-org/ovn/blob/d8b34bdf603b47cc964a6cbe8c94f86a9432aaf9/ovn-nb.ovsschema#L574-L579","commit_id":"ce1ef32386b07d3c2d70246af7f7d3da12a79a07"}]}
