)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"abf6495eab31c7b114bbd14c406fef726b72cad9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bbd1d3fa_f41c62f6","updated":"2025-09-23 14:38:41.000000000","message":"recheck - just making sure there is no sporadic functional test failure","commit_id":"a51e28d85f1e5e7fada308e45d60c1d8145923a8"}],"neutron/agent/ovn/agent/ovsdb.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7be425d1b9bdd3cec0f364171aad748515cf4857","unresolved":true,"context_lines":[{"line_number":184,"context_line":"    return max_kbps, min_kbps"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"def set_ovn_bridge_mapping(ovs_idl, bridge_mapping):"},{"line_number":188,"context_line":"    \"\"\"Set the OVN bridge mapping in the Open_vSwitch table."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    This method will replace the existing mapping if it exists."}],"source_content_type":"text/x-python","patch_set":2,"id":"c431df44_24513ab0","line":187,"range":{"start_line":187,"start_character":4,"end_line":187,"end_character":26},"updated":"2025-09-18 11:16:16.000000000","message":"A couple of questions:\n* Where is this method used?\n* Doesn\u0027t this belong to the admin configuration phase? In other words, Neutron shouldn\u0027t touch this parameter, only read it.","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b9649bd8c2e9fd927bd9019687c206c04b6ec97","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    return max_kbps, min_kbps"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"def set_ovn_bridge_mapping(ovs_idl, bridge_mapping):"},{"line_number":188,"context_line":"    \"\"\"Set the OVN bridge mapping in the Open_vSwitch table."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    This method will replace the existing mapping if it exists."}],"source_content_type":"text/x-python","patch_set":2,"id":"1ab897a9_fe3e0c5d","line":187,"range":{"start_line":187,"start_character":4,"end_line":187,"end_character":26},"in_reply_to":"9b61a409_0e04c7ac","updated":"2025-10-14 08:32:50.000000000","message":"Right, that depends on this extension. Thanks for the clarification.","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2873ab926153c64caf5933c8a982ae2b16a5f415","unresolved":true,"context_lines":[{"line_number":184,"context_line":"    return max_kbps, min_kbps"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"def set_ovn_bridge_mapping(ovs_idl, bridge_mapping):"},{"line_number":188,"context_line":"    \"\"\"Set the OVN bridge mapping in the Open_vSwitch table."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    This method will replace the existing mapping if it exists."}],"source_content_type":"text/x-python","patch_set":2,"id":"9b61a409_0e04c7ac","line":187,"range":{"start_line":187,"start_character":4,"end_line":187,"end_character":26},"in_reply_to":"c431df44_24513ab0","updated":"2025-09-18 17:23:34.000000000","message":"1) It\u0027s used here: https://review.opendev.org/c/openstack/neutron/+/960895/2/neutron/agent/ovn/extensions/bgp/__init__.py#74\n\n2) That depends on us. The \"bgp\" bridges, for example br-eth0 and br-eth1 on the diagram here https://opendev.org/openstack/neutron-specs/src/commit/3abdc8f23a998eabcd41ac6d9dbc31012919da22/images/ovn-bgp-topology.jpg\nneed to be in the ovn-bridge-mappings because ovn-controller needs to create the patch ports to connect the physical NIC with OVN. As whether it should be configured by installer or not could be a subject for a discussion.\n\nMy take was to isolate the BGP configuration away from ordinary OVN node configuration. That said, we can configure the bridge-mappings as we used to do with the installer, then aside from that we configure the `bgp-peer-bridges` - could be also in the OVN agent config file but the benefit having it here is that we do not need to restart service in case we want to add/remove/do maintenance of the bridges/NIC. So from the configuration standpoint, you do not care about the bridge-mappings for BGP - you just say here are the bridges - let the agent configure whatever is neeeded.","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b9649bd8c2e9fd927bd9019687c206c04b6ec97","unresolved":true,"context_lines":[{"line_number":192,"context_line":"    new_bridge_mappings \u003d \u0027,\u0027.join(bridge_mapping)"},{"line_number":193,"context_line":"    ovs_idl.db_set("},{"line_number":194,"context_line":"        \u0027Open_vSwitch\u0027, \u0027.\u0027,"},{"line_number":195,"context_line":"        external_ids\u003d{\u0027ovn-bridge-mappings\u0027: new_bridge_mappings}"},{"line_number":196,"context_line":"    ).execute(check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9130ac05_2c06d5be","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":65},"updated":"2025-10-14 08:32:50.000000000","message":"This will override the \u0027ovn-bridge-mappings\u0027 config. Is that OK? That means no other mapping will be allowed in this compute node","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fef58ed60fe8f29473bc3aba4ab630e259643485","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    new_bridge_mappings \u003d \u0027,\u0027.join(bridge_mapping)"},{"line_number":193,"context_line":"    ovs_idl.db_set("},{"line_number":194,"context_line":"        \u0027Open_vSwitch\u0027, \u0027.\u0027,"},{"line_number":195,"context_line":"        external_ids\u003d{\u0027ovn-bridge-mappings\u0027: new_bridge_mappings}"},{"line_number":196,"context_line":"    ).execute(check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"14206ece_9be38b83","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":65},"in_reply_to":"9130ac05_2c06d5be","updated":"2025-10-14 16:03:48.000000000","message":"This is a generic function, that sets whatever was passed. It\u0027s just a wrapper around `db_set()`. The caller is responsible to include existing items, for example I do it here https://review.opendev.org/c/openstack/neutron/+/960895/2/neutron/agent/ovn/extensions/bgp/events.py#73","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"}],"neutron/agent/ovn/extensions/bgp/__init__.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7be425d1b9bdd3cec0f364171aad748515cf4857","unresolved":true,"context_lines":[{"line_number":27,"context_line":"class BGPAgentExtension(ovn_ext_mgr.OVNAgentExtension):"},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        super().__init__()"},{"line_number":30,"context_line":"        self._is_started_event \u003d threading.Event()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"352ed077_161e9ad6","line":30,"range":{"start_line":30,"start_character":13,"end_line":30,"end_character":30},"updated":"2025-09-18 11:16:16.000000000","message":"`OVNAgentExtension` has a property (bool) that is `is_started`, which reads `self._is_started`. Instead of creating a new variable, you should use `self._is_started` and set it to True at the end of `start`. In any case, because you are not doing anything in `start`, why don\u0027t you remove it?\n\n(ok, checking the upper patch, I see `start` is actually being used, but I keep my comment about the usage of `self._is_started`)","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2873ab926153c64caf5933c8a982ae2b16a5f415","unresolved":true,"context_lines":[{"line_number":27,"context_line":"class BGPAgentExtension(ovn_ext_mgr.OVNAgentExtension):"},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        super().__init__()"},{"line_number":30,"context_line":"        self._is_started_event \u003d threading.Event()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ef35e22_6675f8f5","line":30,"range":{"start_line":30,"start_character":13,"end_line":30,"end_character":30},"in_reply_to":"352ed077_161e9ad6","updated":"2025-09-18 17:23:34.000000000","message":"`_is_started` is a boolean and won\u0027t wait if it is not set - which is what I needed at https://review.opendev.org/c/openstack/neutron/+/960895/2/neutron/agent/ovn/extensions/bgp/events.py@52. So essentially when handling events, we need to access the agent attributes only after the agent is ready. If it was the bool, it would see it\u0027s false and then continue processing or skipping the code, which is not what we want.","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b9649bd8c2e9fd927bd9019687c206c04b6ec97","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class BGPAgentExtension(ovn_ext_mgr.OVNAgentExtension):"},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        super().__init__()"},{"line_number":30,"context_line":"        self._is_started_event \u003d threading.Event()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae82b8f4_915a7f03","line":30,"range":{"start_line":30,"start_character":13,"end_line":30,"end_character":30},"in_reply_to":"5ef35e22_6675f8f5","updated":"2025-10-14 08:32:50.000000000","message":"Understood. Maybe we would need to implement something similar in the base ``OVNAgentExtension`` class (but this is for a follow up patch).","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b9649bd8c2e9fd927bd9019687c206c04b6ec97","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        return []"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def start(self):"},{"line_number":63,"context_line":"        self._is_started_event.clear()"},{"line_number":64,"context_line":"        super().start()"},{"line_number":65,"context_line":"        self._is_started_event.set()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"0d49fe5a_cdef0688","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":38},"updated":"2025-10-14 08:32:50.000000000","message":"Do we need that here? We clear the event in the initialization phase, that is executing in the initialization of the `OVNNeutronAgent` object.\n\nI remember documenting that: https://github.com/openstack/neutron/blob/master/doc/source/ovn/ovn_agent.rst#plugable-extensions","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fef58ed60fe8f29473bc3aba4ab630e259643485","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return []"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def start(self):"},{"line_number":63,"context_line":"        self._is_started_event.clear()"},{"line_number":64,"context_line":"        super().start()"},{"line_number":65,"context_line":"        self._is_started_event.set()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4b3e1270_a5869093","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":38},"in_reply_to":"0d49fe5a_cdef0688","updated":"2025-10-14 16:03:48.000000000","message":"You reviewed an old patchset - with https://review.opendev.org/c/openstack/neutron/+/963865 we won\u0027t need the event at all. This patch will be required in the depending patch in the chain.","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"407f152ebc523a95521cf6c0edf5eeee96cfe2c6","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return []"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def start(self):"},{"line_number":63,"context_line":"        self._is_started_event.clear()"},{"line_number":64,"context_line":"        super().start()"},{"line_number":65,"context_line":"        self._is_started_event.set()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b29d8251_c6566d26","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":38},"in_reply_to":"4b3e1270_a5869093","updated":"2025-10-14 16:04:30.000000000","message":"I realized this might have been just a comment from some previous review where you didn\u0027t send out the comments :)","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"}],"neutron/agent/ovn/extensions/bgp/events.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b9649bd8c2e9fd927bd9019687c206c04b6ec97","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":39,"context_line":"        super().__init__(self.EVENTS, self.TABLE, None)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @property"},{"line_number":42,"context_line":"    def event_name(self):"},{"line_number":43,"context_line":"        return self.__class__.__name__"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @property"},{"line_number":46,"context_line":"    def bgp_agent(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"e368be07_e0ccf1a4","line":43,"range":{"start_line":41,"start_character":0,"end_line":43,"end_character":38},"updated":"2025-10-14 08:32:50.000000000","message":"nit: add a TODO to remove it when ovsdbapp\u003e2.13.0, with commit 03a2a11a8041c8b1c07e6285aa0396f8ef8651c5","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fef58ed60fe8f29473bc3aba4ab630e259643485","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":39,"context_line":"        super().__init__(self.EVENTS, self.TABLE, None)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @property"},{"line_number":42,"context_line":"    def event_name(self):"},{"line_number":43,"context_line":"        return self.__class__.__name__"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @property"},{"line_number":46,"context_line":"    def bgp_agent(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"248632f4_7726052a","line":43,"range":{"start_line":41,"start_character":0,"end_line":43,"end_character":38},"in_reply_to":"e368be07_e0ccf1a4","updated":"2025-10-14 16:03:48.000000000","message":"Done","commit_id":"052c9edefe3cd072336e92c81f205b0800bed307"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"0707ed8404eb18f59c9169e868b7d6077f5976f5","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class CreateLocalOVSEvent(LocalOVSEvent):"},{"line_number":57,"context_line":"    EVENTS \u003d (LocalOVSEvent.ROW_CREATE,)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def match_fn(self, event, row, old):"},{"line_number":60,"context_line":"        if constants.AGENT_BGP_PEER_BRIDGES not in row.external_ids:"}],"source_content_type":"text/x-python","patch_set":17,"id":"893b817a_7d93351c","line":57,"updated":"2026-01-16 19:07:23.000000000","message":"Do we need to handle the case where someone manually modifies Open_vSwitch.external_ids instead of just what it is at start? I know you were doing a lot of fixing of manually screwed up stuff in other patches. (This is an actual question and not a suggestion)","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"3597204e56e636d69912e0e5dfb7f95b82e05674","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class CreateLocalOVSEvent(LocalOVSEvent):"},{"line_number":57,"context_line":"    EVENTS \u003d (LocalOVSEvent.ROW_CREATE,)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def match_fn(self, event, row, old):"},{"line_number":60,"context_line":"        if constants.AGENT_BGP_PEER_BRIDGES not in row.external_ids:"}],"source_content_type":"text/x-python","patch_set":17,"id":"f63fb02f_d74e7190","line":57,"in_reply_to":"893b817a_7d93351c","updated":"2026-01-16 19:14:05.000000000","message":"You mean something like this ?https://review.opendev.org/c/openstack/neutron/+/964429/8/neutron/agent/ovn/extensions/bgp/events.py#104","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"13392471f4c42dd7cd83a94a0622e1a7f8eda8fd","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class CreateLocalOVSEvent(LocalOVSEvent):"},{"line_number":57,"context_line":"    EVENTS \u003d (LocalOVSEvent.ROW_CREATE,)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def match_fn(self, event, row, old):"},{"line_number":60,"context_line":"        if constants.AGENT_BGP_PEER_BRIDGES not in row.external_ids:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fd99645_7b7abdba","line":57,"in_reply_to":"f63fb02f_d74e7190","updated":"2026-01-16 19:24:16.000000000","message":"Something very much like that. 😄","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"}],"neutron/services/bgp/constants.py":[{"author":{"_account_id":32288,"name":"Martin Kalcok","email":"martin.kalcok@canonical.com","username":"martin.kalcok"},"change_message_id":"bd486e927bf37f586f64762cba92a713bd6680d7","unresolved":true,"context_lines":[{"line_number":26,"context_line":"BGP_CHASSIS_NETWORK_NAME \u003d \u0027bgp-chassis-network-name\u0027"},{"line_number":27,"context_line":"BGP_CHASSIS_LRP_MAC \u003d \u0027bgp-chassis-lrp-mac\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"AGENT_BGP_PEER_BRIDGES \u003d \u0027bgp-peer-bridges\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"AGENT_BGP_EXT_NAME \u003d \u0027ovn-bgp\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"fca4cee3_04ecc70a","line":29,"updated":"2025-11-14 18:13:02.000000000","message":"I had the similar question in previous patch, but given that this value is used as a key in `external_ids` of the OVS database/table, would it make sense to prefix it with `neutron-` to avoid potential clashes?","commit_id":"02c81b5d68ea5fedcae489b72f160382537a4693"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cf7cf30069272019e2df41618908cee9e03c4f7c","unresolved":true,"context_lines":[{"line_number":26,"context_line":"BGP_CHASSIS_NETWORK_NAME \u003d \u0027bgp-chassis-network-name\u0027"},{"line_number":27,"context_line":"BGP_CHASSIS_LRP_MAC \u003d \u0027bgp-chassis-lrp-mac\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"AGENT_BGP_PEER_BRIDGES \u003d \u0027bgp-peer-bridges\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"AGENT_BGP_EXT_NAME \u003d \u0027ovn-bgp\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"a3406ee7_d852375b","line":29,"in_reply_to":"2f73251b_565dd7f7","updated":"2025-12-15 21:20:04.000000000","message":"I didn\u0027t think it was necessary but no strong opinion on that. If you think the `neutron-bgp-` would be handy to have, I can change the constants maybe prior to this patch and then rebase.","commit_id":"02c81b5d68ea5fedcae489b72f160382537a4693"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30d36c20c4907aaefabfd7003981536f0e0005c7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"BGP_CHASSIS_NETWORK_NAME \u003d \u0027bgp-chassis-network-name\u0027"},{"line_number":27,"context_line":"BGP_CHASSIS_LRP_MAC \u003d \u0027bgp-chassis-lrp-mac\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"AGENT_BGP_PEER_BRIDGES \u003d \u0027bgp-peer-bridges\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"AGENT_BGP_EXT_NAME \u003d \u0027ovn-bgp\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"103b5931_464cda43","line":29,"in_reply_to":"a3406ee7_d852375b","updated":"2026-01-02 19:16:17.000000000","message":"Done","commit_id":"02c81b5d68ea5fedcae489b72f160382537a4693"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"88241f2180c6cd9505b44bcd9570901538ecf15a","unresolved":true,"context_lines":[{"line_number":26,"context_line":"BGP_CHASSIS_NETWORK_NAME \u003d \u0027bgp-chassis-network-name\u0027"},{"line_number":27,"context_line":"BGP_CHASSIS_LRP_MAC \u003d \u0027bgp-chassis-lrp-mac\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"AGENT_BGP_PEER_BRIDGES \u003d \u0027bgp-peer-bridges\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"AGENT_BGP_EXT_NAME \u003d \u0027ovn-bgp\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"2f73251b_565dd7f7","line":29,"in_reply_to":"fca4cee3_04ecc70a","updated":"2025-12-11 11:53:32.000000000","message":"I think it could be good to have those to be prefixed maybe with `neutron-bgp-`, wdyt Jakub?","commit_id":"02c81b5d68ea5fedcae489b72f160382537a4693"}],"neutron/tests/functional/agent/ovn/extensions/test_bgp.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"0707ed8404eb18f59c9169e868b7d6077f5976f5","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        finally:"},{"line_number":49,"context_line":"            self.addCleanup(self._reset_class_attributes)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _reset_class_attributes(self):"},{"line_number":52,"context_line":"        # The connection is a class attribute so we need to reset it in order"},{"line_number":53,"context_line":"        # to connect to the newly spawned per-test ovsdb server"},{"line_number":54,"context_line":"        impl_idl.NeutronOvsdbIdl._klass._ovsdb_connection \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"cf1d1c43_5dd5e460","line":51,"updated":"2026-01-16 19:07:23.000000000","message":"No change needed, just making a note.\n\nThe ML2/OVN driver overrides the `ovsdbapp.backend.ovs_idl.Backend` class to make ovsdb_connection not a singleton, but the code in neutron.agent.ovsdb.impl_idl.NeutronOvsddbIdl does not use this overridden backend (and I honestly don\u0027t know at this point if it should--it\u0027s all very confusing). This is why these tests might need to reset `_ovsdb_connection \u003d None` and other neutron tests wouldn\u0027t.\n\nSome point in the future we should audit all of this stuff, but it is in that \"not currently breaking anything,here be dragons\" state right now.","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"13392471f4c42dd7cd83a94a0622e1a7f8eda8fd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        finally:"},{"line_number":49,"context_line":"            self.addCleanup(self._reset_class_attributes)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _reset_class_attributes(self):"},{"line_number":52,"context_line":"        # The connection is a class attribute so we need to reset it in order"},{"line_number":53,"context_line":"        # to connect to the newly spawned per-test ovsdb server"},{"line_number":54,"context_line":"        impl_idl.NeutronOvsdbIdl._klass._ovsdb_connection \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"094d4837_033a36ba","line":51,"in_reply_to":"cf1d1c43_5dd5e460","updated":"2026-01-16 19:24:16.000000000","message":"Done","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"0707ed8404eb18f59c9169e868b7d6077f5976f5","unresolved":true,"context_lines":[{"line_number":80,"context_line":"            bms \u003d self._get_bridge_mappings()"},{"line_number":81,"context_line":"            return sorted(bms.split(\u0027,\u0027)) \u003d\u003d sorted(expected_bms.split(\u0027,\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        utils.wait_until_true("},{"line_number":84,"context_line":"            wait_for_bms,"},{"line_number":85,"context_line":"            sleep\u003d0.1,"},{"line_number":86,"context_line":"            timeout\u003d5,"}],"source_content_type":"text/x-python","patch_set":17,"id":"f3c7c5fe_62a8ab74","line":83,"updated":"2026-01-16 19:07:23.000000000","message":"I need to somehow make WaitEvent easier to use to avoid wait_until_true() calls for waiting for the results of ovsdb ops. Maybe I could make a contextmanager version.","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"13392471f4c42dd7cd83a94a0622e1a7f8eda8fd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            bms \u003d self._get_bridge_mappings()"},{"line_number":81,"context_line":"            return sorted(bms.split(\u0027,\u0027)) \u003d\u003d sorted(expected_bms.split(\u0027,\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        utils.wait_until_true("},{"line_number":84,"context_line":"            wait_for_bms,"},{"line_number":85,"context_line":"            sleep\u003d0.1,"},{"line_number":86,"context_line":"            timeout\u003d5,"}],"source_content_type":"text/x-python","patch_set":17,"id":"17a74299_8ea9de0e","line":83,"in_reply_to":"f3c7c5fe_62a8ab74","updated":"2026-01-16 19:24:16.000000000","message":"Done","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"}],"pyproject.toml":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8f5bfd52de0fe8a58b0a31e05921b0c58256a7f7","unresolved":true,"context_lines":[{"line_number":171,"context_line":"qos_hwol \u003d \"neutron.agent.ovn.extensions.qos_hwol:QoSHardwareOffloadExtension\""},{"line_number":172,"context_line":"noop \u003d \"neutron.agent.ovn.extensions.noop:NoopOVNAgentExtension\""},{"line_number":173,"context_line":"testing \u003d \"neutron.tests.functional.agent.ovn.agent.fake_ovn_agent_extension:FakeOVNAgentExtension\""},{"line_number":174,"context_line":"ovn-bgp \u003d \"neutron.agent.ovn.extensions.bgp:BGPAgentExtension\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"[project.entry-points.\"neutron.services.logapi.drivers\"]"},{"line_number":177,"context_line":"ovs \u003d \"neutron.services.logapi.drivers.openvswitch.ovs_firewall_log:OVSFirewallLoggingDriver\""}],"source_content_type":"text/x-toml","patch_set":17,"id":"dd32ae0c_ff8874e6","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":7},"updated":"2026-01-05 14:48:59.000000000","message":"nit: all extensions have `_` instead of `-`.","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0fc2cec344a45a0c7087c101ca7cd0b8c7b68274","unresolved":false,"context_lines":[{"line_number":171,"context_line":"qos_hwol \u003d \"neutron.agent.ovn.extensions.qos_hwol:QoSHardwareOffloadExtension\""},{"line_number":172,"context_line":"noop \u003d \"neutron.agent.ovn.extensions.noop:NoopOVNAgentExtension\""},{"line_number":173,"context_line":"testing \u003d \"neutron.tests.functional.agent.ovn.agent.fake_ovn_agent_extension:FakeOVNAgentExtension\""},{"line_number":174,"context_line":"ovn-bgp \u003d \"neutron.agent.ovn.extensions.bgp:BGPAgentExtension\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"[project.entry-points.\"neutron.services.logapi.drivers\"]"},{"line_number":177,"context_line":"ovs \u003d \"neutron.services.logapi.drivers.openvswitch.ovs_firewall_log:OVSFirewallLoggingDriver\""}],"source_content_type":"text/x-toml","patch_set":17,"id":"c104fd18_3f66767c","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":7},"in_reply_to":"dd32ae0c_ff8874e6","updated":"2026-01-05 15:00:10.000000000","message":"Ok, the `service_plugins` name is `ovn-bgp`. Let\u0027s use the same string in both.","commit_id":"78cdb673d48fe6937167bde089dcb22c22b3d19c"}]}
