)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7a941241f432b5039084cf502b9a0a83eed74f59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f02eac08_7739aca8","updated":"2026-06-10 11:14:57.000000000","message":"Please, address the comments in a follow-up patch","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"}],"neutron/services/evpn/commands.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9d4ab55001eefb5e8e22a89e2d1fff0de852c115","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            self.api, hcg_name, may_exist\u003dTrue,"},{"line_number":146,"context_line":"            external_ids\u003dhcg_external_ids)"},{"line_number":147,"context_line":"        hcg_cmd.run_idl(txn)"},{"line_number":148,"context_line":"        hcg \u003d self.api.lookup(\u0027HA_Chassis_Group\u0027, hcg_name)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        chassis_priority \u003d ovn_utils.get_chassis_priority(self.gw_chassis)"},{"line_number":151,"context_line":"        for chassis_name, priority in chassis_priority.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"cd29461e_100c1d2e","line":148,"range":{"start_line":148,"start_character":50,"end_line":148,"end_character":58},"updated":"2026-06-10 02:18:02.000000000","message":"nit: You might be able to look this up by hcg_cmd.result which should be the uuid which might be like a microsecond faster.","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7a941241f432b5039084cf502b9a0a83eed74f59","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            self.api, hcg_name, may_exist\u003dTrue,"},{"line_number":146,"context_line":"            external_ids\u003dhcg_external_ids)"},{"line_number":147,"context_line":"        hcg_cmd.run_idl(txn)"},{"line_number":148,"context_line":"        hcg \u003d self.api.lookup(\u0027HA_Chassis_Group\u0027, hcg_name)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        chassis_priority \u003d ovn_utils.get_chassis_priority(self.gw_chassis)"},{"line_number":151,"context_line":"        for chassis_name, priority in chassis_priority.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"f1bdaa4c_f55bab2d","line":148,"range":{"start_line":148,"start_character":50,"end_line":148,"end_character":58},"in_reply_to":"cd29461e_100c1d2e","updated":"2026-06-10 11:14:57.000000000","message":"Right, we have `ovsdbapp.utils.get_uuid`","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b48e667ac2500685c25066bffdb7551f6a529da3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            self.api, hcg_name, may_exist\u003dTrue,"},{"line_number":146,"context_line":"            external_ids\u003dhcg_external_ids)"},{"line_number":147,"context_line":"        hcg_cmd.run_idl(txn)"},{"line_number":148,"context_line":"        hcg \u003d self.api.lookup(\u0027HA_Chassis_Group\u0027, hcg_name)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        chassis_priority \u003d ovn_utils.get_chassis_priority(self.gw_chassis)"},{"line_number":151,"context_line":"        for chassis_name, priority in chassis_priority.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"103dda48_84178183","line":148,"range":{"start_line":148,"start_character":50,"end_line":148,"end_character":58},"in_reply_to":"f1bdaa4c_f55bab2d","updated":"2026-06-10 12:51:28.000000000","message":"Done","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9d4ab55001eefb5e8e22a89e2d1fff0de852c115","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        hcg_cmd.run_idl(txn)"},{"line_number":148,"context_line":"        hcg \u003d self.api.lookup(\u0027HA_Chassis_Group\u0027, hcg_name)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        chassis_priority \u003d ovn_utils.get_chassis_priority(self.gw_chassis)"},{"line_number":151,"context_line":"        for chassis_name, priority in chassis_priority.items():"},{"line_number":152,"context_line":"            ovn_nb_commands.HAChassisGroupAddChassisCommand("},{"line_number":153,"context_line":"                self.api, hcg.uuid, chassis_name, priority).run_idl(txn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ebfcc70a_4bc506bf","line":150,"range":{"start_line":150,"start_character":37,"end_line":150,"end_character":57},"updated":"2026-06-10 02:18:02.000000000","message":"Since we aren\u0027t pre-sorting gw_chassis, this will essentially be \"sorted by uuid\" (because the python IDL is insane) so kind of \"repeatably random\". This means one chassis will handle all that are ever created. should we use random.sample() to distribute?","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b48e667ac2500685c25066bffdb7551f6a529da3","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        hcg_cmd.run_idl(txn)"},{"line_number":148,"context_line":"        hcg \u003d self.api.lookup(\u0027HA_Chassis_Group\u0027, hcg_name)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        chassis_priority \u003d ovn_utils.get_chassis_priority(self.gw_chassis)"},{"line_number":151,"context_line":"        for chassis_name, priority in chassis_priority.items():"},{"line_number":152,"context_line":"            ovn_nb_commands.HAChassisGroupAddChassisCommand("},{"line_number":153,"context_line":"                self.api, hcg.uuid, chassis_name, priority).run_idl(txn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e49cd1cb_467662bd","line":150,"range":{"start_line":150,"start_character":37,"end_line":150,"end_character":57},"in_reply_to":"538bb20d_afc620e6","updated":"2026-06-10 12:51:28.000000000","message":"Done","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7a941241f432b5039084cf502b9a0a83eed74f59","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        hcg_cmd.run_idl(txn)"},{"line_number":148,"context_line":"        hcg \u003d self.api.lookup(\u0027HA_Chassis_Group\u0027, hcg_name)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        chassis_priority \u003d ovn_utils.get_chassis_priority(self.gw_chassis)"},{"line_number":151,"context_line":"        for chassis_name, priority in chassis_priority.items():"},{"line_number":152,"context_line":"            ovn_nb_commands.HAChassisGroupAddChassisCommand("},{"line_number":153,"context_line":"                self.api, hcg.uuid, chassis_name, priority).run_idl(txn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"538bb20d_afc620e6","line":150,"range":{"start_line":150,"start_character":37,"end_line":150,"end_character":57},"in_reply_to":"ebfcc70a_4bc506bf","updated":"2026-06-10 11:14:57.000000000","message":"Actually we should use `sync_ha_chassis_group_router` method to create a router HA_Chassis_Group. This method will call `_sync_ha_chassis_group` and it will create a random list here:\n```\n    # The number of chassis to add will depend on the chassis to keep and the\n    # maximum chassis number.\n    ch_add_list \u003d list(candidates - set(ch_existing_dict))\n    if ch_add_list:\n        num_to_add \u003d min(max_chassis_number - len(ch_keep), len(ch_add_list))\n        ch_add_list \u003d random.sample(ch_add_list, num_to_add)\n```","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"}],"neutron/services/evpn/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd7db0dfb3ca4942ff0f2bc4ad326ea703a01801","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        router_id \u003d payload.resource_id"},{"line_number":128,"context_line":"        vlan \u003d self._evpn_db.get_vlan_for_router(payload.context, router_id)"},{"line_number":129,"context_line":"        gw_chassis \u003d self._sb_idl.get_gateway_chassis_from_cms_options()"},{"line_number":130,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":131,"context_line":"            txn.add(evpn_ovn.CreateEVPNRouterCommand("},{"line_number":132,"context_line":"                self._nb_idl, router_id, vni, vlan, gw_chassis))"}],"source_content_type":"text/x-python","patch_set":1,"id":"c3472318_c5202684","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":72},"updated":"2026-06-10 11:20:35.000000000","message":"This is too broad, we should limit this gw_chassis list to only those connected to the provider network to which the LRP that will receive the HCG will be connected to. If I\u0027m not wrong, this LS must be connected to a provider network with physical connectivity, right?","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b48e667ac2500685c25066bffdb7551f6a529da3","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        router_id \u003d payload.resource_id"},{"line_number":128,"context_line":"        vlan \u003d self._evpn_db.get_vlan_for_router(payload.context, router_id)"},{"line_number":129,"context_line":"        gw_chassis \u003d self._sb_idl.get_gateway_chassis_from_cms_options()"},{"line_number":130,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":131,"context_line":"            txn.add(evpn_ovn.CreateEVPNRouterCommand("},{"line_number":132,"context_line":"                self._nb_idl, router_id, vni, vlan, gw_chassis))"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a8b2026_64aaa45a","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":72},"in_reply_to":"c3472318_c5202684","updated":"2026-06-10 12:51:28.000000000","message":"The provider network must be present on all nodes. Or you mean we could combine pure L3 fabric with stretched L2 for compute nodes?","commit_id":"f379dea40d3c969185a9c283648538e43589bd04"}]}
