)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4ebe1bda0c4a6a80d3ca39b689e88d52a7992015","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d7978048_33a71e62","updated":"2024-02-20 22:42:22.000000000","message":"recheck neutron-fullstack-with-uwsgi","commit_id":"a18bac520affbdae84dfb80c73a5050ccbd447d4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"efb10caf7c9b3638bf83c1d0538ac488f488c875","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"bcd4b2ed_471f29c2","updated":"2024-02-21 15:36:40.000000000","message":"recheck neutron-ovn-grenade-multinode-skip-level","commit_id":"2919746b12d1e23c74d9655cb3579327d96fc4ad"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9408d1bb58beab0f081e5892f5d2a025909eccc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f9ba06ce_110941fc","updated":"2024-03-01 07:05:16.000000000","message":"recheck pep8 solved by https://review.opendev.org/c/openstack/neutron/+/910583","commit_id":"01367a1f3de83213f412913733240c47e1799413"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d4142032f99beda3787d41b5fadf32c2ecff761c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"8e7115fc_236c273e","updated":"2024-03-07 13:36:38.000000000","message":"Sorry for the time it took me to review it.\n\nSoft -1, just want to talk a little about a few changes in this patch that I am a bit concerned about.","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1ffaae36ba66e00735b3ddad534f5ef3e1684b06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"525eb219_de189d09","updated":"2024-04-03 23:11:36.000000000","message":"Very nice! Just a small documentation id","commit_id":"8b9c9cd9441564a725bb2268692bc9f57884b8be"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"913d27bc505ed1f4f5af82c36f3e38f2dff2bbc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"8ae75bdc_6339aa2c","updated":"2024-04-04 23:50:09.000000000","message":"-1 to bring attention to the inline question","commit_id":"9480f4638f8e0c6219900c2ba914051b86e4f004"}],"neutron/common/ovn/utils.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8ae05bbc464abb6c9230eba2f7c4b02a9ac64d20","unresolved":true,"context_lines":[{"line_number":986,"context_line":"    :param context:    Neutron API context"},{"line_number":987,"context_line":"    :param port_id:    The port ID"},{"line_number":988,"context_line":"    :param network_id: The network ID"},{"line_number":989,"context_line":"    :param network_id: The router ID"},{"line_number":990,"context_line":"    :param sb_idl:     OVN SB IDL"},{"line_number":991,"context_line":"    :returns:          An instance of HAChassisGroupInfo"},{"line_number":992,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"a12455c8_96691491","line":989,"range":{"start_line":989,"start_character":11,"end_line":989,"end_character":21},"updated":"2024-02-21 15:43:47.000000000","message":"router_id right?","commit_id":"2919746b12d1e23c74d9655cb3579327d96fc4ad"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14292b2ae10e4d2ee0dcaf3409134b3d5809156a","unresolved":false,"context_lines":[{"line_number":986,"context_line":"    :param context:    Neutron API context"},{"line_number":987,"context_line":"    :param port_id:    The port ID"},{"line_number":988,"context_line":"    :param network_id: The network ID"},{"line_number":989,"context_line":"    :param network_id: The router ID"},{"line_number":990,"context_line":"    :param sb_idl:     OVN SB IDL"},{"line_number":991,"context_line":"    :returns:          An instance of HAChassisGroupInfo"},{"line_number":992,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"13a91f94_808e082a","line":989,"range":{"start_line":989,"start_character":11,"end_line":989,"end_character":21},"in_reply_to":"a12455c8_96691491","updated":"2024-02-22 07:59:35.000000000","message":"Done","commit_id":"2919746b12d1e23c74d9655cb3579327d96fc4ad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8ae05bbc464abb6c9230eba2f7c4b02a9ac64d20","unresolved":true,"context_lines":[{"line_number":1019,"context_line":"                name_only\u003dFalse)"},{"line_number":1020,"context_line":"            group_name \u003d ovn_name(network_id)"},{"line_number":1021,"context_line":"            LOG.debug(\u0027HA Chassis Group %s is based on network %s\u0027,"},{"line_number":1022,"context_line":"                      group_name, network_id)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":1025,"context_line":"        resource \u003d plugin.get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"8da4b7fd_49de5db7","line":1022,"updated":"2024-02-21 15:43:47.000000000","message":"nitty nit: You don\u0027t need to change anything here if You don\u0027t want to, it\u0027s more about my personal \"taste\" - I would instead of doing such many levels of indentation extract those pieces of code into additional private methods like e.g.: _get_info_for_ha_chassis_group_external_port(), _get_info_for_ha_chassis_group_network() and _get_info_for_ha_chassis_group_router()\nIMHO it would be more readable that way. But it\u0027s up to You how it will be done. It works fine either way 😊","commit_id":"2919746b12d1e23c74d9655cb3579327d96fc4ad"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14292b2ae10e4d2ee0dcaf3409134b3d5809156a","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"                name_only\u003dFalse)"},{"line_number":1020,"context_line":"            group_name \u003d ovn_name(network_id)"},{"line_number":1021,"context_line":"            LOG.debug(\u0027HA Chassis Group %s is based on network %s\u0027,"},{"line_number":1022,"context_line":"                      group_name, network_id)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":1025,"context_line":"        resource \u003d plugin.get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"f548f5a5_b85e7969","line":1022,"in_reply_to":"8da4b7fd_49de5db7","updated":"2024-02-22 07:59:35.000000000","message":"Done","commit_id":"2919746b12d1e23c74d9655cb3579327d96fc4ad"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d4142032f99beda3787d41b5fadf32c2ecff761c","unresolved":true,"context_lines":[{"line_number":1172,"context_line":"        ha_ch_grp \u003d ha_ch_grp_cmd.result"},{"line_number":1173,"context_line":"    else:"},{"line_number":1174,"context_line":"        # The HA chassis group is being created in this transaction."},{"line_number":1175,"context_line":"        ha_ch_grp \u003d None"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"    max_chassis_number \u003d constants.MAX_CHASSIS_IN_HA_GROUP"},{"line_number":1178,"context_line":"    priority \u003d constants.HA_CHASSIS_GROUP_HIGHEST_PRIORITY"}],"source_content_type":"text/x-python","patch_set":23,"id":"822bfb68_ca6d5420","line":1175,"updated":"2024-03-07 13:36:38.000000000","message":"I replaced this logic at [0] because during that work this logic wasn\u0027t working as expected. So I used the RowNotFound and created the Chassis Group.\n\nAre we sure this works now ? Perhaps we could keep the logic with RowNotFound just to be certain.\n\n[0] https://review.opendev.org/c/openstack/neutron/+/894767/16/neutron/common/ovn/utils.py#1045","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"59a9dc01b4a423ea85135d9c811ddd18d5d80a44","unresolved":false,"context_lines":[{"line_number":1172,"context_line":"        ha_ch_grp \u003d ha_ch_grp_cmd.result"},{"line_number":1173,"context_line":"    else:"},{"line_number":1174,"context_line":"        # The HA chassis group is being created in this transaction."},{"line_number":1175,"context_line":"        ha_ch_grp \u003d None"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"    max_chassis_number \u003d constants.MAX_CHASSIS_IN_HA_GROUP"},{"line_number":1178,"context_line":"    priority \u003d constants.HA_CHASSIS_GROUP_HIGHEST_PRIORITY"}],"source_content_type":"text/x-python","patch_set":23,"id":"14e1d133_2f02df1f","line":1175,"in_reply_to":"822bfb68_ca6d5420","updated":"2024-03-08 16:09:05.000000000","message":"After the needed changes in the FT test [1], the testing is working. And I also tested this manually and I see the HCG created if it was not present or ha_ch_grp_cmd has the result if the HCG was already created. The \"ha_chassis_group_add\" is safe to be called in any case (with may_exist\u003dTrue)\n\n[1]https://review.opendev.org/c/openstack/neutron/+/909194/23/neutron/tests/functional/common/ovn/test_utils.py","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d4142032f99beda3787d41b5fadf32c2ecff761c","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"             hcg_info.group_name, high_prio_ch_name)"},{"line_number":1226,"context_line":"    # Return the existing register UUID or the HA chassis group creation"},{"line_number":1227,"context_line":"    # command (see ovsdbapp ``HAChassisGroupAddChassisCommand`` class)."},{"line_number":1228,"context_line":"    return ha_ch_grp.uuid if ha_ch_grp else ha_ch_grp_cmd, high_prio_ch_name"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"def get_port_type_virtual_and_parents(subnets_by_id, fixed_ips, network_id,"}],"source_content_type":"text/x-python","patch_set":23,"id":"c33cb5b6_cc28e927","line":1228,"updated":"2024-03-07 13:36:38.000000000","message":"Isn\u0027t this very confusing now ? You can get a UUID or a Command + String (group name).\n\nNow, it\u0027s not only a different type being returned but also the number of elements are different two (sometimes one sometimes two).","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"59a9dc01b4a423ea85135d9c811ddd18d5d80a44","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"             hcg_info.group_name, high_prio_ch_name)"},{"line_number":1226,"context_line":"    # Return the existing register UUID or the HA chassis group creation"},{"line_number":1227,"context_line":"    # command (see ovsdbapp ``HAChassisGroupAddChassisCommand`` class)."},{"line_number":1228,"context_line":"    return ha_ch_grp.uuid if ha_ch_grp else ha_ch_grp_cmd, high_prio_ch_name"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"def get_port_type_virtual_and_parents(subnets_by_id, fixed_ips, network_id,"}],"source_content_type":"text/x-python","patch_set":23,"id":"538218a9_59f0ed87","line":1228,"in_reply_to":"c33cb5b6_cc28e927","updated":"2024-03-08 16:09:05.000000000","message":"The number of elements returned is always two. The condition applies to the first parameter only. The output could be:\n* UUID, string\n* cmd,  string","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a952bea6d22b11bbe1f80d65ccfe803129ef80b9","unresolved":true,"context_lines":[{"line_number":1103,"context_line":"            from_network_and_port(network_id, port_id))"},{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":"    # Get the Availability Zones hints"},{"line_number":1106,"context_line":"    az_hints \u003d common_utils.get_az_hints(resource)"},{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    return HAChassisGroupInfo("},{"line_number":1109,"context_line":"        group_name\u003dgroup_name, chassis_list\u003dchassis_list, az_hints\u003daz_hints,"},{"line_number":1110,"context_line":"        ignore_chassis\u003dignore_chassis)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"def _filter_candidates_for_ha_chassis_group(hcg_info):"}],"source_content_type":"text/x-python","patch_set":30,"id":"85b892d5_e66cc948","line":1110,"range":{"start_line":1106,"start_character":0,"end_line":1110,"end_character":38},"updated":"2024-03-28 18:40:26.000000000","message":"So basically this function will save only these two lines. I\u0027d be more in favor splitting this function into two avoiding the if line on L1098 and copy\u0026pasting these L1106 and L1108, because I think determining what to return based on different parameters just introduces some unnecessary complexity.","commit_id":"f975f527a1cde02e13f68c32d3d4a0805478bad0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b8c7217958d34f78adaae7b3ef6c3feb652dec6e","unresolved":false,"context_lines":[{"line_number":1103,"context_line":"            from_network_and_port(network_id, port_id))"},{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":"    # Get the Availability Zones hints"},{"line_number":1106,"context_line":"    az_hints \u003d common_utils.get_az_hints(resource)"},{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    return HAChassisGroupInfo("},{"line_number":1109,"context_line":"        group_name\u003dgroup_name, chassis_list\u003dchassis_list, az_hints\u003daz_hints,"},{"line_number":1110,"context_line":"        ignore_chassis\u003dignore_chassis)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"def _filter_candidates_for_ha_chassis_group(hcg_info):"}],"source_content_type":"text/x-python","patch_set":30,"id":"2059b095_d312ea69","line":1110,"range":{"start_line":1106,"start_character":0,"end_line":1110,"end_character":38},"in_reply_to":"85b892d5_e66cc948","updated":"2024-03-31 17:00:09.000000000","message":"Done","commit_id":"f975f527a1cde02e13f68c32d3d4a0805478bad0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a952bea6d22b11bbe1f80d65ccfe803129ef80b9","unresolved":true,"context_lines":[{"line_number":1161,"context_line":"    \"\"\""},{"line_number":1162,"context_line":"    # If there are Chassis marked for hosting external ports create a HA"},{"line_number":1163,"context_line":"    # Chassis Group per external port, otherwise do it at the network level"},{"line_number":1164,"context_line":"    hcg_info \u003d _get_info_for_ha_chassis_group("},{"line_number":1165,"context_line":"        context, sb_idl, port_id\u003dport_id, network_id\u003dnetwork_id,"},{"line_number":1166,"context_line":"        router_id\u003drouter_id)"},{"line_number":1167,"context_line":"    candidates \u003d _filter_candidates_for_ha_chassis_group(hcg_info)"},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    # Try to get the HA Chassis Group or create if it doesn\u0027t exist"}],"source_content_type":"text/x-python","patch_set":30,"id":"baeb91e9_24a6e9bb","line":1166,"range":{"start_line":1164,"start_character":0,"end_line":1166,"end_character":28},"updated":"2024-03-28 18:40:26.000000000","message":"Then I\u0027d move this out of the function and pass hcg_info as a parameter as all ids are used only here. The HAChassisGroupInfo can have additional field for custom external ids that would be added on L1170 unconditionally.","commit_id":"f975f527a1cde02e13f68c32d3d4a0805478bad0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b8c7217958d34f78adaae7b3ef6c3feb652dec6e","unresolved":false,"context_lines":[{"line_number":1161,"context_line":"    \"\"\""},{"line_number":1162,"context_line":"    # If there are Chassis marked for hosting external ports create a HA"},{"line_number":1163,"context_line":"    # Chassis Group per external port, otherwise do it at the network level"},{"line_number":1164,"context_line":"    hcg_info \u003d _get_info_for_ha_chassis_group("},{"line_number":1165,"context_line":"        context, sb_idl, port_id\u003dport_id, network_id\u003dnetwork_id,"},{"line_number":1166,"context_line":"        router_id\u003drouter_id)"},{"line_number":1167,"context_line":"    candidates \u003d _filter_candidates_for_ha_chassis_group(hcg_info)"},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    # Try to get the HA Chassis Group or create if it doesn\u0027t exist"}],"source_content_type":"text/x-python","patch_set":30,"id":"6008e2a1_a4d90ed8","line":1166,"range":{"start_line":1164,"start_character":0,"end_line":1166,"end_character":28},"in_reply_to":"baeb91e9_24a6e9bb","updated":"2024-03-31 17:00:09.000000000","message":"Understood. I agree with this: \"sync_ha_chassis_group\" should handle only the HCG creation and this method should be called from upper ones (one for HCG for network and another one for routers).","commit_id":"f975f527a1cde02e13f68c32d3d4a0805478bad0"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1ffaae36ba66e00735b3ddad534f5ef3e1684b06","unresolved":true,"context_lines":[{"line_number":1078,"context_line":"def _sync_ha_chassis_group(nb_idl, hcg_info, txn):"},{"line_number":1079,"context_line":"    \"\"\"Return the UUID of the HA Chassis Group or the HA Chassis Group cmd."},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"    Given the Neutron Network ID, this method will return (or create"},{"line_number":1082,"context_line":"    and then return) the appropriate HA Chassis Group the external"},{"line_number":1083,"context_line":"    port (in that network) needs to be associated with."},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"    If the Neutron Router ID is provided, the method will return (or create and"},{"line_number":1086,"context_line":"    return) the HA Chassis Group for this router."},{"line_number":1087,"context_line":""},{"line_number":1088,"context_line":"    :param nb_idl: OVN NB IDL"},{"line_number":1089,"context_line":"    :param hcg_info: HA Chassis Group information named tuple"}],"source_content_type":"text/x-python","patch_set":33,"id":"53bd8645_a41a04f8","line":1086,"range":{"start_line":1081,"start_character":0,"end_line":1086,"end_character":49},"updated":"2024-04-03 23:11:36.000000000","message":"Nit: I found this description confusing. After this refactoring and functionality addition, this method doesn\u0027t deal with a network_id or a router_id. Those are handled by  sync_ha_chassis_group_router and  sync_ha_chassis_group_network. In fact, this method doesn\u0027t distinguish between these two cases. My suggestion is collapsing these two paragraphs into something along the lines of:\n\nThis method will return (or create and then return) the appropriate HA Chassis Group for the resource specified in hcg_info, which can be a network or a router","commit_id":"8b9c9cd9441564a725bb2268692bc9f57884b8be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"db071ff45b8c70befdbe3fcf414f36c90077e988","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"def _sync_ha_chassis_group(nb_idl, hcg_info, txn):"},{"line_number":1079,"context_line":"    \"\"\"Return the UUID of the HA Chassis Group or the HA Chassis Group cmd."},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"    Given the Neutron Network ID, this method will return (or create"},{"line_number":1082,"context_line":"    and then return) the appropriate HA Chassis Group the external"},{"line_number":1083,"context_line":"    port (in that network) needs to be associated with."},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":"    If the Neutron Router ID is provided, the method will return (or create and"},{"line_number":1086,"context_line":"    return) the HA Chassis Group for this router."},{"line_number":1087,"context_line":""},{"line_number":1088,"context_line":"    :param nb_idl: OVN NB IDL"},{"line_number":1089,"context_line":"    :param hcg_info: HA Chassis Group information named tuple"}],"source_content_type":"text/x-python","patch_set":33,"id":"0d11b15e_6872149c","line":1086,"range":{"start_line":1081,"start_character":0,"end_line":1086,"end_character":49},"in_reply_to":"53bd8645_a41a04f8","updated":"2024-04-04 18:25:09.000000000","message":"I\u0027ll update this docstring","commit_id":"8b9c9cd9441564a725bb2268692bc9f57884b8be"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/commands.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8ab7daac49282c48c137bc31102e4568ef919799","unresolved":true,"context_lines":[{"line_number":356,"context_line":"            msg \u003d _(\"Logical Router %s does not exist\") % self.name"},{"line_number":357,"context_line":"            raise RuntimeError(msg)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        self.api._tables[\u0027Logical_Router\u0027].rows[lrouter.uuid].delete()"},{"line_number":361,"context_line":"        hcg \u003d idlutils.row_by_value(self.api.idl, \u0027HA_Chassis_Group\u0027, \u0027name\u0027,"},{"line_number":362,"context_line":"                                    self.name, default\u003dNone)"}],"source_content_type":"text/x-python","patch_set":6,"id":"0b2c44f6_d5ea766f","line":359,"updated":"2024-02-19 11:43:26.000000000","message":"remove","commit_id":"a7309bb8c140d62e1ed4c11bad4cdf003531de20"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e8c7617bb24d7aab0c65e1555fd2a7157d446052","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            msg \u003d _(\"Logical Router %s does not exist\") % self.name"},{"line_number":357,"context_line":"            raise RuntimeError(msg)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        self.api._tables[\u0027Logical_Router\u0027].rows[lrouter.uuid].delete()"},{"line_number":361,"context_line":"        hcg \u003d idlutils.row_by_value(self.api.idl, \u0027HA_Chassis_Group\u0027, \u0027name\u0027,"},{"line_number":362,"context_line":"                                    self.name, default\u003dNone)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f2e1ca2_f99bbc53","line":359,"in_reply_to":"0b2c44f6_d5ea766f","updated":"2024-02-20 07:29:22.000000000","message":"Done","commit_id":"a7309bb8c140d62e1ed4c11bad4cdf003531de20"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d4142032f99beda3787d41b5fadf32c2ecff761c","unresolved":true,"context_lines":[{"line_number":428,"context_line":"        return cmd.UpdateLRouterCommand(self, name,"},{"line_number":429,"context_line":"                                        if_exists, **columns)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def lr_del(self, router, if_exists\u003dFalse):"},{"line_number":432,"context_line":"        return cmd.LrDelCommand(self, router, if_exists\u003dif_exists)"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def add_lrouter_port(self, name, lrouter, may_exist\u003dFalse, **columns):"},{"line_number":435,"context_line":"        return cmd.AddLRouterPortCommand(self, name, lrouter,"}],"source_content_type":"text/x-python","patch_set":23,"id":"4b5c1cfa_ca6ed850","line":432,"range":{"start_line":431,"start_character":0,"end_line":432,"end_character":66},"updated":"2024-03-07 13:36:38.000000000","message":"Do we want to overwrite the ovsdbapp lr_del() with a custom one ? I wonder if we could at least add a note saying we are doing it. But ideally, we should also enhance the one in ovsdbapp and use it here after it\u0027s released (leave a TODO for it if we do it).","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"59a9dc01b4a423ea85135d9c811ddd18d5d80a44","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        return cmd.UpdateLRouterCommand(self, name,"},{"line_number":429,"context_line":"                                        if_exists, **columns)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def lr_del(self, router, if_exists\u003dFalse):"},{"line_number":432,"context_line":"        return cmd.LrDelCommand(self, router, if_exists\u003dif_exists)"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def add_lrouter_port(self, name, lrouter, may_exist\u003dFalse, **columns):"},{"line_number":435,"context_line":"        return cmd.AddLRouterPortCommand(self, name, lrouter,"}],"source_content_type":"text/x-python","patch_set":23,"id":"0a3b226e_a54ba0bf","line":432,"range":{"start_line":431,"start_character":0,"end_line":432,"end_character":66},"in_reply_to":"4b5c1cfa_ca6ed850","updated":"2024-03-08 16:09:05.000000000","message":"This is why \"LrDelCommand\" is the same as ovsdbapp.LrDelCommand with the extra code needed [1]. I can\u0027t update ovsdbapp LrDelCommand with this code because this is Neutron specific (L425-L429). Any code update in ovsdbapp LrDelCommand will be still executed in this local implementation.\n\nIn any case I\u0027ll leave a comment here, specifying that this is a method overridden from the parent API class ``nb_impl_idl.OvnNbApiIdlImpl``.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/909194/23/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/commands.py","commit_id":"20f1d427c10f382c726c42b87f8300c0f74e4151"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"913d27bc505ed1f4f5af82c36f3e38f2dff2bbc9","unresolved":true,"context_lines":[{"line_number":1746,"context_line":"                if selected_chassis:"},{"line_number":1747,"context_line":"                    options \u003d {\u0027chassis\u0027: selected_chassis}"},{"line_number":1748,"context_line":"                    commands.append(self._nb_idl.db_set("},{"line_number":1749,"context_line":"                        \u0027Logical_Router\u0027, lrouter, (\u0027options\u0027, options)))"},{"line_number":1750,"context_line":"            else:"},{"line_number":1751,"context_line":"                # VLAN/flat network with a physical network, bind the LRP to"},{"line_number":1752,"context_line":"                # a chassis using the OVN L3 scheduler."}],"source_content_type":"text/x-python","patch_set":34,"id":"0b97de2c_93c96564","line":1749,"updated":"2024-04-04 23:50:09.000000000","message":"I apologize, I should have asked this in me previous review, but I thought about this while reviewing https://review.opendev.org/c/openstack/neutron/+/909437. At this point, if there is not a selected_chassis, we cannot fulfill our contract of HA for this router. Shouldn\u0027t we leave a trace in the log file?","commit_id":"9480f4638f8e0c6219900c2ba914051b86e4f004"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd3fa49777083eca419bc9cc745394cfd74265bf","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"                if selected_chassis:"},{"line_number":1747,"context_line":"                    options \u003d {\u0027chassis\u0027: selected_chassis}"},{"line_number":1748,"context_line":"                    commands.append(self._nb_idl.db_set("},{"line_number":1749,"context_line":"                        \u0027Logical_Router\u0027, lrouter, (\u0027options\u0027, options)))"},{"line_number":1750,"context_line":"            else:"},{"line_number":1751,"context_line":"                # VLAN/flat network with a physical network, bind the LRP to"},{"line_number":1752,"context_line":"                # a chassis using the OVN L3 scheduler."}],"source_content_type":"text/x-python","patch_set":34,"id":"7e0e6712_0326b756","line":1749,"in_reply_to":"0b97de2c_93c96564","updated":"2024-04-08 16:30:12.000000000","message":"We don\u0027t log this with the LRP chassis scheduler. In any case, and because this is a relevant event, we can log an INFO message (not warning) if that is the case. In order to match both schedulers, ``schedule_new_gateway`` should do the same (in a follow-up patch).","commit_id":"9480f4638f8e0c6219900c2ba914051b86e4f004"}]}
