)]}'
{"ovn_bgp_agent/drivers/openstack/utils/wire.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e023d647f9e691d1ecfe5922426e3a74ea9e511d","unresolved":true,"context_lines":[{"line_number":467,"context_line":"    \"\"\""},{"line_number":468,"context_line":"    # The bridge name is also the name of its internal port. The MAC address"},{"line_number":469,"context_line":"    # is the MAC address of the bridge itself."},{"line_number":470,"context_line":"    ovs.add_fdb_entry(bridge, bridge, mac, 0)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"def _ensure_egress_flows(bridge, patch_ports):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e2181567_a31733bb","line":470,"range":{"start_line":470,"start_character":43,"end_line":470,"end_character":44},"updated":"2024-11-25 17:09:11.000000000","message":"nit: This is default, if it\u0027s better to pass it explicitly, it is easier to read if numbers are passed as keyword arguments, like `vlan\u003d0`. That way it\u0027s clear from the first read what does the number mean.","commit_id":"eca44e15f40e59f9bbccfd627cc30ca07e4683b7"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"ec711acb2b92c267ec478adb907d14fd787df89a","unresolved":true,"context_lines":[{"line_number":467,"context_line":"    \"\"\""},{"line_number":468,"context_line":"    # The bridge name is also the name of its internal port. The MAC address"},{"line_number":469,"context_line":"    # is the MAC address of the bridge itself."},{"line_number":470,"context_line":"    ovs.add_fdb_entry(bridge, bridge, mac, 0)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"def _ensure_egress_flows(bridge, patch_ports):"}],"source_content_type":"text/x-python","patch_set":1,"id":"58e40d73_244b8868","line":470,"range":{"start_line":470,"start_character":43,"end_line":470,"end_character":44},"in_reply_to":"e2181567_a31733bb","updated":"2024-11-27 16:11:36.000000000","message":"Acknowledged","commit_id":"eca44e15f40e59f9bbccfd627cc30ca07e4683b7"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5a8be14fa221923d43a802871c8ccf781c4bd487","unresolved":true,"context_lines":[{"line_number":259,"context_line":"            _ensure_ovn_network_link(ovn_idl, network, \u0027external\u0027,"},{"line_number":260,"context_line":"                                     ip\u003dip, mac\u003dmac)"},{"line_number":261,"context_line":"            _ensure_ingress_flows(bridge, mac, network, provider_cidrs)"},{"line_number":262,"context_line":"            _ensure_fdb_entry(bridge, mac)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    return ovn_bridge_mappings, flows_info"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4bb20095_8ea9c5d9","line":263,"range":{"start_line":262,"start_character":12,"end_line":263,"end_character":1},"updated":"2024-11-22 12:17:40.000000000","message":"Just asking: it is unlikely that the bridge mappings change, but in that case, what happens with the orphan FDB entry?","commit_id":"de8830abfe5745751d0e3dda264f4e5062891470"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"bf780d0132d839291ee116faa92b8f6b95785ed5","unresolved":true,"context_lines":[{"line_number":259,"context_line":"            _ensure_ovn_network_link(ovn_idl, network, \u0027external\u0027,"},{"line_number":260,"context_line":"                                     ip\u003dip, mac\u003dmac)"},{"line_number":261,"context_line":"            _ensure_ingress_flows(bridge, mac, network, provider_cidrs)"},{"line_number":262,"context_line":"            _ensure_fdb_entry(bridge, mac)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    return ovn_bridge_mappings, flows_info"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"46e11f97_d6a63a35","line":263,"range":{"start_line":262,"start_character":12,"end_line":263,"end_character":1},"in_reply_to":"4bb20095_8ea9c5d9","updated":"2024-11-22 16:32:04.000000000","message":"It will stay there until the next ovs-vswitchd restart.\n\nI think it\u0027s generally harmless for the setups this is used in, because normally this entry would have the same value but just learned dynamically based on the traffic sent from the `type\u003dinternal` port of the bridge.\n\nDuplicate MACs are generally avoided in normal conditions but ovn-bgp-agent relies on this to avoid a separate IP and MAC allocation for the bridge interface and the LRP acting as a next-hop.\n\nCleaning it up would still be a good idea although currently the OVN-related state isn\u0027t cleaned up at all:\n\nhttps://opendev.org/openstack/ovn-bgp-agent/src/commit/d7e275ea858a7d0c57511bd4353734eff9989a91/ovn_bgp_agent/drivers/openstack/utils/wire.py#L489-L491\n\nWe don\u0027t have a persistent store to compare the previous state of bridge-mappings vs the current state in ovsdb. I think the OVN-related cleanup may be missing for the same reason.\n\nIf we agree on some comparison mechanism for current vs old state (mainly, where to store the persistent state that indicates that some FDB entries have been programmed by ovn-bgp-agent), I think the rest will be easy to implement.\n\nI could suggest a temporary file somewhere under /var/run/ovn-bgp-agent to store the state ovn-bgp-agent would think it created which it would read on startup and use as a hint. In the case of the FDB state, a tmpfile will be enough because the runtime FDB state isn\u0027t persistent and cannot be stored in ovsdb, so upon reboot any state will be gone anyway.","commit_id":"de8830abfe5745751d0e3dda264f4e5062891470"}],"ovn_bgp_agent/tests/unit/privileged/test_ovs_vsctl.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e023d647f9e691d1ecfe5922426e3a74ea9e511d","unresolved":true,"context_lines":[{"line_number":104,"context_line":"                           \u0027-O\u0027, \u0027OpenFlow13\u0027)]"},{"line_number":105,"context_line":"        self.mock_exc.assert_has_calls(calls)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def test_ovs_appctl(self):"},{"line_number":108,"context_line":"        ovs_vsctl.ovs_appctl("},{"line_number":109,"context_line":"            [\u0027fdb/add\u0027, \u0027br-fabric\u0027, \u0027br-fabric\u0027, \u00270\u0027, \u0027de:ad:be:ef:ca:fe\u0027])"},{"line_number":110,"context_line":"        self.mock_exc.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":1,"id":"76324d1e_3bfd7c22","line":107,"updated":"2024-11-25 17:09:11.000000000","message":"This would be a great adept for functional testing - call `ovs_appctl()` and then make sure the call had an effect on the OVS system.","commit_id":"eca44e15f40e59f9bbccfd627cc30ca07e4683b7"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"ec711acb2b92c267ec478adb907d14fd787df89a","unresolved":true,"context_lines":[{"line_number":104,"context_line":"                           \u0027-O\u0027, \u0027OpenFlow13\u0027)]"},{"line_number":105,"context_line":"        self.mock_exc.assert_has_calls(calls)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def test_ovs_appctl(self):"},{"line_number":108,"context_line":"        ovs_vsctl.ovs_appctl("},{"line_number":109,"context_line":"            [\u0027fdb/add\u0027, \u0027br-fabric\u0027, \u0027br-fabric\u0027, \u00270\u0027, \u0027de:ad:be:ef:ca:fe\u0027])"},{"line_number":110,"context_line":"        self.mock_exc.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":1,"id":"af6ac405_e0681cbb","line":107,"in_reply_to":"76324d1e_3bfd7c22","updated":"2024-11-27 16:11:36.000000000","message":"Unfortunately `ovs-appctl` doesn\u0027t rely on the ovsdb protocol and the existing fixtures aren\u0027t very useful as-is.\n\nI\u0027ll see how can the ones from `ovsdbapp` that build and spin up OVS can be extended to make this func-testable.","commit_id":"eca44e15f40e59f9bbccfd627cc30ca07e4683b7"}]}
