)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0e82301a7fffb69fd867eadde9262581ee88366a","unresolved":true,"context_lines":[{"line_number":22,"context_line":"and the vlan interface is deleted."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related-Bug: #2144617"},{"line_number":25,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/991528"},{"line_number":26,"context_line":"Assisted-By: Claude Opus 4.6"},{"line_number":27,"context_line":"Change-Id: Ia9aeb47a6b06b003b2ff3c65c525603a1b760bb9"},{"line_number":28,"context_line":"Signed-off-by: Helen Chen \u003cichen@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"fd90bb8f_51b9f9d6","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":67},"updated":"2026-06-05 14:58:37.000000000","message":"It seems the patch is built on top of the current one. Doesn\u0027t it create a cyclical dependency? What do we need this patch for?","commit_id":"f7a1fe8fc41bd233dbdfd4dfa08aa29da9ff6c20"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9d5fba8f8685e30db8fd5bc4dd27c7a113a6f357","unresolved":false,"context_lines":[{"line_number":22,"context_line":"and the vlan interface is deleted."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related-Bug: #2144617"},{"line_number":25,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/991528"},{"line_number":26,"context_line":"Assisted-By: Claude Opus 4.6"},{"line_number":27,"context_line":"Change-Id: Ia9aeb47a6b06b003b2ff3c65c525603a1b760bb9"},{"line_number":28,"context_line":"Signed-off-by: Helen Chen \u003cichen@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"bedbda04_8937987f","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":67},"in_reply_to":"fd90bb8f_51b9f9d6","updated":"2026-06-09 04:18:30.000000000","message":"Done","commit_id":"f7a1fe8fc41bd233dbdfd4dfa08aa29da9ff6c20"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"22df20b1_42bc3c98","updated":"2026-06-04 22:25:18.000000000","message":"I think we need to handle agent restarts if I\u0027m no mistaken.","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"1b0292f0e8ff4a135fc2f3d9f2e1f2a028dec2b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"567e7886_b7987ce7","updated":"2026-06-05 01:33:40.000000000","message":"fixed the pep8/event functional test due to needing to pass an argument the EvpnFSM.","commit_id":"0f14f0ddcecc7d0dc44ec1f42ad7566b7d07ed36"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"a8ecfa13ca790cb4bda821a02cd2bfee29b2ea63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"41b64bce_3b15447d","in_reply_to":"567e7886_b7987ce7","updated":"2026-06-05 01:58:54.000000000","message":"Or at least I tried to, gerrit rejected it for some reason. I\u0027ll wait until the parent patch merges (hopefully in an hour) and try again.","commit_id":"0f14f0ddcecc7d0dc44ec1f42ad7566b7d07ed36"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"86738593f6c8c0f7bf8fe06d4664d93c9a411978","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"9e2a3e51_50972249","updated":"2026-06-08 18:54:57.000000000","message":"We pushed new PS and my comment on PS15 at the same time :)","commit_id":"7d6d2f44e0662c6ae4c3a4edd3aec429875efeca"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"cf086456d768d167901b8c169e57b133fd43287e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"13156269_462809b5","updated":"2026-06-09 04:50:42.000000000","message":"just fixed a couple of unit tests","commit_id":"6d43aab58ff35d7b31e1cc613577635e7e66c888"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"815e1c056ddb153e9addd32272ab9f2f5b15e74a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f0a12957_8c0a547c","updated":"2026-06-09 10:19:15.000000000","message":"recheck parent in gate again","commit_id":"6d43aab58ff35d7b31e1cc613577635e7e66c888"}],"neutron/agent/ovn/extensions/evpn/__init__.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 Red Hat, LLC"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"5d2ae0c2_263b93be","line":1,"range":{"start_line":1,"start_character":26,"end_line":1,"end_character":29},"updated":"2026-06-04 22:25:18.000000000","message":":]","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"d7c66d73aca000a161b6f9dcceb9b87d4a723aa4","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 Red Hat, LLC"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"b32bb5b8_555c5a3b","line":1,"range":{"start_line":1,"start_character":26,"end_line":1,"end_character":29},"in_reply_to":"5d2ae0c2_263b93be","updated":"2026-06-04 22:51:54.000000000","message":"We technically are Red Hat, LLC now. I had to look it up. https://www.redhat.com/en/about/trademark-guidelines-and-policies","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"a14e1cbebda1a454c9d93dd649a302d1e946405d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 Red Hat, LLC"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"8dfa89ad_bae3973a","line":1,"range":{"start_line":1,"start_character":26,"end_line":1,"end_character":29},"in_reply_to":"b32bb5b8_555c5a3b","updated":"2026-06-05 13:10:08.000000000","message":"Done","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        vxlan_port \u003d ext_ids[\u0027ovn-evpn-vxlan-ports\u0027]"},{"line_number":45,"context_line":"        vxlan_parent \u003d \u0027vxlan_sys_%s\u0027 % vxlan_port"},{"line_number":46,"context_line":"        dstport \u003d CONF.ovn_evpn.child_vxlan_port"},{"line_number":47,"context_line":"        mac \u003d net_lib.get_random_mac(CONF.base_mac.split(\u0027:\u0027))"},{"line_number":48,"context_line":"        LOG.debug(\"EVPN config: local_ip %s vxlan_parent %s \""},{"line_number":49,"context_line":"                  \"child vxlan port %d SVD MAC %s\","},{"line_number":50,"context_line":"                  local_ip, vxlan_parent, dstport, mac)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a53045a_0d64b18f","line":47,"updated":"2026-06-04 22:25:18.000000000","message":"Wouldn\u0027t we get a different MAC for the SVD whenever we restart the agent?","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"a14e1cbebda1a454c9d93dd649a302d1e946405d","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        vxlan_port \u003d ext_ids[\u0027ovn-evpn-vxlan-ports\u0027]"},{"line_number":45,"context_line":"        vxlan_parent \u003d \u0027vxlan_sys_%s\u0027 % vxlan_port"},{"line_number":46,"context_line":"        dstport \u003d CONF.ovn_evpn.child_vxlan_port"},{"line_number":47,"context_line":"        mac \u003d net_lib.get_random_mac(CONF.base_mac.split(\u0027:\u0027))"},{"line_number":48,"context_line":"        LOG.debug(\"EVPN config: local_ip %s vxlan_parent %s \""},{"line_number":49,"context_line":"                  \"child vxlan port %d SVD MAC %s\","},{"line_number":50,"context_line":"                  local_ip, vxlan_parent, dstport, mac)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7058be9b_610d3ce2","line":47,"in_reply_to":"3a53045a_0d64b18f","updated":"2026-06-05 13:10:08.000000000","message":"Restart code will come later.  For what it\u0027s worth, the MAC for SVD (Linux bridge and vxlan) isn\u0027t used by data traffic.","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        br_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_LB_NAME_PREFIX, 0)"},{"line_number":59,"context_line":"        vxlan_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_VXLAN_IFNAME, 0)"},{"line_number":60,"context_line":"        self.svd \u003d svd.Svd(br_evpn\u003dbr_evpn, vxlan_evpn\u003dvxlan_evpn)"},{"line_number":61,"context_line":"        self.svd.create(local_ip\u003dlocal_ip, mac\u003dmac,"},{"line_number":62,"context_line":"                        vxlan_parent\u003dvxlan_parent, dstport\u003ddstport)"},{"line_number":63,"context_line":"        self._evpn_fsm \u003d fsm.EvpnFSM(self.svd)"},{"line_number":64,"context_line":"        vrf_handler \u003d netlink_monitor.VrfHandler(self._evpn_fsm)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c853d5b7_838e4a3b","line":61,"updated":"2026-06-04 22:25:18.000000000","message":"Wouldn\u0027t this blow on agent restarts?","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"6d63809f6dc095c3ac84e6b21595642460e7a129","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        br_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_LB_NAME_PREFIX, 0)"},{"line_number":59,"context_line":"        vxlan_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_VXLAN_IFNAME, 0)"},{"line_number":60,"context_line":"        self.svd \u003d svd.Svd(br_evpn\u003dbr_evpn, vxlan_evpn\u003dvxlan_evpn)"},{"line_number":61,"context_line":"        self.svd.create(local_ip\u003dlocal_ip, mac\u003dmac,"},{"line_number":62,"context_line":"                        vxlan_parent\u003dvxlan_parent, dstport\u003ddstport)"},{"line_number":63,"context_line":"        self._evpn_fsm \u003d fsm.EvpnFSM(self.svd)"},{"line_number":64,"context_line":"        vrf_handler \u003d netlink_monitor.VrfHandler(self._evpn_fsm)"}],"source_content_type":"text/x-python","patch_set":6,"id":"799b2b66_d17066d1","line":61,"in_reply_to":"7f057e20_453782ab","updated":"2026-06-09 04:20:40.000000000","message":"Done (marking because the try/except looks sufficient to me for now)","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"1b0292f0e8ff4a135fc2f3d9f2e1f2a028dec2b6","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        br_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_LB_NAME_PREFIX, 0)"},{"line_number":59,"context_line":"        vxlan_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_VXLAN_IFNAME, 0)"},{"line_number":60,"context_line":"        self.svd \u003d svd.Svd(br_evpn\u003dbr_evpn, vxlan_evpn\u003dvxlan_evpn)"},{"line_number":61,"context_line":"        self.svd.create(local_ip\u003dlocal_ip, mac\u003dmac,"},{"line_number":62,"context_line":"                        vxlan_parent\u003dvxlan_parent, dstport\u003ddstport)"},{"line_number":63,"context_line":"        self._evpn_fsm \u003d fsm.EvpnFSM(self.svd)"},{"line_number":64,"context_line":"        vrf_handler \u003d netlink_monitor.VrfHandler(self._evpn_fsm)"}],"source_content_type":"text/x-python","patch_set":6,"id":"e0d2c6c9_7c14b16b","line":61,"in_reply_to":"c853d5b7_838e4a3b","updated":"2026-06-05 01:33:40.000000000","message":"Do we need to add registered cleanup/atexit methods to the ovn agent? signal handling?","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8f8dbcfe94362b8491b440121babd1c39387f0a3","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        br_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_LB_NAME_PREFIX, 0)"},{"line_number":59,"context_line":"        vxlan_evpn \u003d \u0027%s%d\u0027 % (evpn_const.EVPN_VXLAN_IFNAME, 0)"},{"line_number":60,"context_line":"        self.svd \u003d svd.Svd(br_evpn\u003dbr_evpn, vxlan_evpn\u003dvxlan_evpn)"},{"line_number":61,"context_line":"        self.svd.create(local_ip\u003dlocal_ip, mac\u003dmac,"},{"line_number":62,"context_line":"                        vxlan_parent\u003dvxlan_parent, dstport\u003ddstport)"},{"line_number":63,"context_line":"        self._evpn_fsm \u003d fsm.EvpnFSM(self.svd)"},{"line_number":64,"context_line":"        vrf_handler \u003d netlink_monitor.VrfHandler(self._evpn_fsm)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f057e20_453782ab","line":61,"in_reply_to":"e0d2c6c9_7c14b16b","updated":"2026-06-05 11:56:40.000000000","message":"I think it would make sense to either have a flag like our favorite \"may_exist\" - or always assume the svd might exist on the system and in such case it should just check it\u0027s configured correctly","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25bb364034bb552692d863c975217e4cd8e42fda","unresolved":true,"context_lines":[{"line_number":53,"context_line":"    def _get_evpn_config(self):"},{"line_number":54,"context_line":"        ext_ids \u003d self.agent_api.ovs_idl.db_get("},{"line_number":55,"context_line":"            \u0027Open_vSwitch\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute()"},{"line_number":56,"context_line":"        local_ip \u003d ext_ids[\u0027ovn-evpn-local-ip\u0027]"},{"line_number":57,"context_line":"        vxlan_port \u003d ext_ids[\u0027ovn-evpn-vxlan-ports\u0027]"},{"line_number":58,"context_line":"        vxlan_parent \u003d \u0027vxlan_sys_%s\u0027 % vxlan_port"},{"line_number":59,"context_line":"        dstport \u003d CONF.ovn_evpn.child_vxlan_port"},{"line_number":60,"context_line":"        mac \u003d net_lib.get_random_mac(CONF.base_mac.split(\u0027:\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"0fa734f9_96eed8a0","line":57,"range":{"start_line":56,"start_character":8,"end_line":57,"end_character":52},"updated":"2026-06-09 08:09:34.000000000","message":"What if we don\u0027t have these keys?","commit_id":"6d43aab58ff35d7b31e1cc613577635e7e66c888"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a99b44cea82f65cc053ef185eaf35c6bb8b053c0","unresolved":true,"context_lines":[{"line_number":53,"context_line":"    def _get_evpn_config(self):"},{"line_number":54,"context_line":"        ext_ids \u003d self.agent_api.ovs_idl.db_get("},{"line_number":55,"context_line":"            \u0027Open_vSwitch\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute()"},{"line_number":56,"context_line":"        local_ip \u003d ext_ids[\u0027ovn-evpn-local-ip\u0027]"},{"line_number":57,"context_line":"        vxlan_port \u003d ext_ids[\u0027ovn-evpn-vxlan-ports\u0027]"},{"line_number":58,"context_line":"        vxlan_parent \u003d \u0027vxlan_sys_%s\u0027 % vxlan_port"},{"line_number":59,"context_line":"        dstport \u003d CONF.ovn_evpn.child_vxlan_port"},{"line_number":60,"context_line":"        mac \u003d net_lib.get_random_mac(CONF.base_mac.split(\u0027:\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"bfe808b3_c6fe7ff1","line":57,"range":{"start_line":56,"start_character":8,"end_line":57,"end_character":52},"in_reply_to":"0fa734f9_96eed8a0","updated":"2026-06-09 11:54:22.000000000","message":"The agent ends up in an endless restarting loop","commit_id":"6d43aab58ff35d7b31e1cc613577635e7e66c888"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a99b44cea82f65cc053ef185eaf35c6bb8b053c0","unresolved":true,"context_lines":[{"line_number":80,"context_line":"                            vxlan_parent\u003dself.cfg.vxlan_parent,"},{"line_number":81,"context_line":"                            dstport\u003dself.cfg.dstport, br_mtu\u003dself.cfg.br_mtu)"},{"line_number":82,"context_line":"        except linux_svd.SvdDeviceAlreadyExists:"},{"line_number":83,"context_line":"            LOG.warning(\"SVD already exists, reusing\")"},{"line_number":84,"context_line":"        self._evpn_fsm \u003d fsm.EvpnFSM(self.svd, self.cfg)"},{"line_number":85,"context_line":"        vrf_handler \u003d netlink_monitor.VrfHandler(self._evpn_fsm)"},{"line_number":86,"context_line":"        self.nl_dispatcher \u003d nl_dispatcher.NetlinkDispatcher("}],"source_content_type":"text/x-python","patch_set":18,"id":"032449aa_d47d0ea0","line":83,"range":{"start_line":83,"start_character":16,"end_line":83,"end_character":23},"updated":"2026-06-09 11:54:22.000000000","message":"Should this be INFO? We will always have an SVD existing except the very first start of the agent.","commit_id":"6d43aab58ff35d7b31e1cc613577635e7e66c888"}],"neutron/agent/ovn/extensions/evpn/fsm.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        self.instances \u003d {}  # vrf -\u003e Evpn"},{"line_number":82,"context_line":"        self._svd \u003d svd"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _set_mac_vni(self, evpn, mac, vni, vid):"},{"line_number":85,"context_line":"        evpn.mac \u003d mac"},{"line_number":86,"context_line":"        evpn.vni \u003d vni"},{"line_number":87,"context_line":"        evpn.vid \u003d vid"}],"source_content_type":"text/x-python","patch_set":6,"id":"a4d6253f_b078d067","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":20},"updated":"2026-06-04 22:25:18.000000000","message":"nit: Maybe we can come up with a better naming, like `_set_evpn_params`","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9d5fba8f8685e30db8fd5bc4dd27c7a113a6f357","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.instances \u003d {}  # vrf -\u003e Evpn"},{"line_number":82,"context_line":"        self._svd \u003d svd"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _set_mac_vni(self, evpn, mac, vni, vid):"},{"line_number":85,"context_line":"        evpn.mac \u003d mac"},{"line_number":86,"context_line":"        evpn.vni \u003d vni"},{"line_number":87,"context_line":"        evpn.vid \u003d vid"}],"source_content_type":"text/x-python","patch_set":6,"id":"8a04be6a_30d1c2e2","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":20},"in_reply_to":"a4d6253f_b078d067","updated":"2026-06-09 04:18:30.000000000","message":"Done","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":100,"context_line":"        evpn.vrf_up \u003d False"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _advertise(self, evpn):"},{"line_number":103,"context_line":"        LOG.debug(\"EVPN: VNI %d Create VLAN and update FRR \""},{"line_number":104,"context_line":"                  \"configuration to start advertising and learning\", evpn.vni)"},{"line_number":105,"context_line":"        self._svd.add_vni(evpn.vni, evpn.vid, evpn.vrf, evpn.mac)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df6851d5_d7d33422","line":103,"updated":"2026-06-04 22:25:18.000000000","message":"Maybe we should log this after the `add_vni` call?","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"a14e1cbebda1a454c9d93dd649a302d1e946405d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        evpn.vrf_up \u003d False"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _advertise(self, evpn):"},{"line_number":103,"context_line":"        LOG.debug(\"EVPN: VNI %d Create VLAN and update FRR \""},{"line_number":104,"context_line":"                  \"configuration to start advertising and learning\", evpn.vni)"},{"line_number":105,"context_line":"        self._svd.add_vni(evpn.vni, evpn.vid, evpn.vrf, evpn.mac)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"640e62ee_5a6cf9b7","line":103,"in_reply_to":"df6851d5_d7d33422","updated":"2026-06-05 13:10:08.000000000","message":"Done","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"ee43dddb7d699278ae974472ac482867162cc4db","unresolved":true,"context_lines":[{"line_number":109,"context_line":"                  \"configuration to stop advertising and learning\", evpn.vni)"},{"line_number":110,"context_line":"        self._svd.del_vni(evpn.vni, evpn.vid)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _set_evpn_router_and_advertise(self, evpn):"},{"line_number":113,"context_line":"        self._set_evpn_router(evpn)"},{"line_number":114,"context_line":"        self._advertise(evpn)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _set_evpn_bridge_and_advertise(self, evpn, mac, vni, vid):"},{"line_number":117,"context_line":"        self._set_evpn_bridge(evpn, mac, vni, vid)"},{"line_number":118,"context_line":"        self._advertise(evpn)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _destroy(self, evpn):"},{"line_number":121,"context_line":"        LOG.debug(\"EVPN deleted: VRF %s\", evpn.vrf)"}],"source_content_type":"text/x-python","patch_set":11,"id":"0ac1c3a4_1a90acee","line":118,"range":{"start_line":112,"start_character":0,"end_line":118,"end_character":29},"updated":"2026-06-08 13:46:44.000000000","message":"Sorry I dont understand following","commit_id":"f7a1fe8fc41bd233dbdfd4dfa08aa29da9ff6c20"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"853fc1b5a2e8b75f451776ddd0d465bb5e040f77","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                  \"configuration to stop advertising and learning\", evpn.vni)"},{"line_number":110,"context_line":"        self._svd.del_vni(evpn.vni, evpn.vid)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _set_evpn_router_and_advertise(self, evpn):"},{"line_number":113,"context_line":"        self._set_evpn_router(evpn)"},{"line_number":114,"context_line":"        self._advertise(evpn)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _set_evpn_bridge_and_advertise(self, evpn, mac, vni, vid):"},{"line_number":117,"context_line":"        self._set_evpn_bridge(evpn, mac, vni, vid)"},{"line_number":118,"context_line":"        self._advertise(evpn)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _destroy(self, evpn):"},{"line_number":121,"context_line":"        LOG.debug(\"EVPN deleted: VRF %s\", evpn.vrf)"}],"source_content_type":"text/x-python","patch_set":11,"id":"2dda7767_f1514e8a","line":118,"range":{"start_line":112,"start_character":0,"end_line":118,"end_character":29},"in_reply_to":"0ac1c3a4_1a90acee","updated":"2026-06-08 14:44:00.000000000","message":"I think I see it now, \n`_advertise` can be called either when \"VRF comes up while the evpn bridge is already present\" or \"when port binding arrives while VRF is already up\" (the second one is unlikely, but still good to have)\n\nI was just concerned that we are calling into `_advertise` twice, but now I see it should not happen.","commit_id":"f7a1fe8fc41bd233dbdfd4dfa08aa29da9ff6c20"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d5fef6d9f9a45e9ecf9c32c7a911d92b0ca05da","unresolved":true,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _unadvertise(self, evpn):"},{"line_number":110,"context_line":"        LOG.debug(\"EVPN: VNI %d Remove VLAN and update FRR \""},{"line_number":111,"context_line":"                  \"configuration to stop advertising and learning\", evpn.vni)"},{"line_number":112,"context_line":"        self._svd.del_vni(evpn.vni, evpn.vid)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _set_evpn_router_and_advertise(self, evpn):"}],"source_content_type":"text/x-python","patch_set":18,"id":"b0e6ee0f_ca913e70","line":111,"updated":"2026-06-09 08:18:32.000000000","message":"nitty nit: here you log debug message before it actually delete vlan and update FRR config but in the ``_advertize`` above you log very similar debug message after it actually do the job. Shouldn\u0027t we be more consistent with those?","commit_id":"6d43aab58ff35d7b31e1cc613577635e7e66c888"}],"neutron/conf/agent/ovn/ovn_neutron_agent/config.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        help\u003d_(\u0027Timeout in seconds for the OVSDB connection transaction\u0027))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"OVN_EVPN_OPTS \u003d ["},{"line_number":37,"context_line":"    cfg.IntOpt("},{"line_number":38,"context_line":"        \u0027bgp_as\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027BGP Autonomous System number for EVPN\u0027)),"}],"source_content_type":"text/x-python","patch_set":6,"id":"13600db3_068f1a01","line":36,"updated":"2026-06-04 22:25:18.000000000","message":"No action required: I\u0027m wondering if we should have a dedicated conf module for the extension instead to isolate a configurable extension from others.","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"b63bba59cc13f0cd7f503ae40714eba20ab93dca","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        help\u003d_(\u0027Timeout in seconds for the OVSDB connection transaction\u0027))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"OVN_EVPN_OPTS \u003d ["},{"line_number":37,"context_line":"    cfg.IntOpt("},{"line_number":38,"context_line":"        \u0027bgp_as\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027BGP Autonomous System number for EVPN\u0027)),"}],"source_content_type":"text/x-python","patch_set":6,"id":"77d1a23a_0b0415eb","line":36,"in_reply_to":"13600db3_068f1a01","updated":"2026-06-06 00:29:26.000000000","message":"I agree, `bgp_as` and `child_vxlan_port` are not used by OVN or OVS.\nI also need to add `bgp_local_interface` variable which will be used in FRR conf.\nI\u0027ll implement dedicated conf module for evpn extension in my patch. then we can follow up with a patch that will move these config into the new extensions config","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"ee43dddb7d699278ae974472ac482867162cc4db","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        help\u003d_(\u0027Timeout in seconds for the OVSDB connection transaction\u0027))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"OVN_EVPN_OPTS \u003d ["},{"line_number":37,"context_line":"    cfg.IntOpt("},{"line_number":38,"context_line":"        \u0027bgp_as\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027BGP Autonomous System number for EVPN\u0027)),"}],"source_content_type":"text/x-python","patch_set":6,"id":"c80265e6_4045bd00","line":36,"in_reply_to":"77d1a23a_0b0415eb","updated":"2026-06-08 13:46:44.000000000","message":"FYI, I made a new `config.py` for evpn in my patch here and I added TODO for this section to move it there. So for now, I would submit this patch as is. And then we can quickly follow up with just moving these two configs into the new config.py\nhttps://review.opendev.org/c/openstack/neutron/+/992018/1/neutron/conf/agent/ovn/ovn_neutron_agent/config.py","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"}],"neutron/tests/functional/agent/ovn/extensions/test_evpn.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d934dc2daad87fd22948a3749321a530e8ac1316","unresolved":true,"context_lines":[{"line_number":97,"context_line":"        self.assertEqual(baseline, vrf_handler._known_vrfs)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class TestFsmSvdIntegration(functional_base.BaseSudoTestCase):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    DSTPORT \u003d 15000"},{"line_number":103,"context_line":"    LOCAL_IP \u003d \u002710.10.10.10\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"9415a040_994df2d8","line":100,"range":{"start_line":100,"start_character":28,"end_line":100,"end_character":60},"updated":"2026-06-08 18:53:49.000000000","message":"You need to rebase on https://review.opendev.org/c/openstack/neutron/+/991931 and use the `BaseNetlinkTestCase` as the baseclass","commit_id":"32b80b4904e29e5d8d78bcf60844a47f9317b878"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d934dc2daad87fd22948a3749321a530e8ac1316","unresolved":true,"context_lines":[{"line_number":97,"context_line":"        self.assertEqual(baseline, vrf_handler._known_vrfs)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class TestFsmSvdIntegration(functional_base.BaseSudoTestCase):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    DSTPORT \u003d 15000"},{"line_number":103,"context_line":"    LOCAL_IP \u003d \u002710.10.10.10\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"1185258b_e6026bb2","line":100,"range":{"start_line":100,"start_character":44,"end_line":100,"end_character":60},"updated":"2026-06-08 18:53:49.000000000","message":"`BaseNetlinkTestCase`","commit_id":"32b80b4904e29e5d8d78bcf60844a47f9317b878"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f6a28dbc5b0871044ffaf7993b4e5ffdded74d98","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.assertEqual(baseline, vrf_handler._known_vrfs)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class TestFsmSvdIntegration(functional_base.BaseSudoTestCase):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    DSTPORT \u003d 15000"},{"line_number":103,"context_line":"    LOCAL_IP \u003d \u002710.10.10.10\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"75530f6c_51564816","line":100,"range":{"start_line":100,"start_character":44,"end_line":100,"end_character":60},"in_reply_to":"1185258b_e6026bb2","updated":"2026-06-08 18:54:12.000000000","message":"Done","commit_id":"32b80b4904e29e5d8d78bcf60844a47f9317b878"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9d5fba8f8685e30db8fd5bc4dd27c7a113a6f357","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.assertEqual(baseline, vrf_handler._known_vrfs)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class TestFsmSvdIntegration(functional_base.BaseSudoTestCase):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    DSTPORT \u003d 15000"},{"line_number":103,"context_line":"    LOCAL_IP \u003d \u002710.10.10.10\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"d39624a0_8d313e49","line":100,"range":{"start_line":100,"start_character":28,"end_line":100,"end_character":60},"in_reply_to":"9415a040_994df2d8","updated":"2026-06-09 04:18:30.000000000","message":"Done","commit_id":"32b80b4904e29e5d8d78bcf60844a47f9317b878"}],"neutron/tests/unit/agent/ovn/extensions/test_evpn.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a3247ba8bbdd62176f2b55c8774c64d0d1b45404","unresolved":true,"context_lines":[{"line_number":71,"context_line":"                          return_value\u003dself.MAC).start()"},{"line_number":72,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_start(self):"},{"line_number":75,"context_line":"        self.ext.start()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.mock_svd_cls.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"ff6014a1_e220f359","line":74,"updated":"2026-06-04 22:25:18.000000000","message":"I\u0027m not sure with the value of this test.","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"a14e1cbebda1a454c9d93dd649a302d1e946405d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                          return_value\u003dself.MAC).start()"},{"line_number":72,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_start(self):"},{"line_number":75,"context_line":"        self.ext.start()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.mock_svd_cls.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"643449ce_89111164","line":74,"in_reply_to":"ff6014a1_e220f359","updated":"2026-06-05 13:10:08.000000000","message":"Done","commit_id":"0ad1f1ac96b93417c64f6a47f0e7f986f207db08"}]}
