)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"922c3e73e9fa69855337b2eb5193ffbda9edfd44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"86ba5277_8c2da942","updated":"2026-07-30 20:06:41.000000000","message":"I would be for submitting this workaround and then we can remove it when OVN fixes the issue. It is still unknown how long it will take for OVN to fix this","commit_id":"a38ab1fd9a90e633c44def111cb513cd7094e639"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"443e22ac112b2304705f277e57d8f2067747ad9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0fb9c4da_65b6a841","updated":"2026-07-06 15:32:23.000000000","message":"This is a workaround for a core ovn issue that may be resolved in the next ovn.26.03.x release.","commit_id":"a38ab1fd9a90e633c44def111cb513cd7094e639"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"8c27172a941af59616fc6c1ccb7e0ec26dc0b95d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9eab8be0_35d47017","updated":"2026-07-06 12:52:20.000000000","message":"recheck neutron-tempest-plugin-ovn","commit_id":"a38ab1fd9a90e633c44def111cb513cd7094e639"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8c341901178c58f778594d0b1c08c57cc7133f9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1c48918e_ee790ef2","updated":"2026-08-10 20:09:44.000000000","message":"I stumbled upon this functional failure when testing locally","commit_id":"60f748f3d4399bddd96393c00abf946238e70c64"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"5dbc22fbe641449fe9fa6f4303b6311509d9ee95","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0e7ae0bf_6764de81","updated":"2026-09-01 13:46:19.000000000","message":"I tried OVN main branch yesterday and the issue is fixed. We just need to wait for the backport to ovn 26.03 and this WO would not be needed.","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d81c7450cdf358b8fb612529730d0f9d46b3e8bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bb37e79d_0ec9a70c","updated":"2026-08-26 09:26:09.000000000","message":"There is pretty many tests added as for just temporary workaround :)\nGenerally it looks ok for me. Please address Miro\u0027s comments and LGTM for me","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}],"neutron/agent/ovn/extensions/evpn/__init__.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"6ffac1ee15a2e76342e57cd431f434dbfcb3e77c","unresolved":true,"context_lines":[{"line_number":121,"context_line":"        self.nl_dispatcher.register_handler("},{"line_number":122,"context_line":"            nl_const.RTM_DELNEIGH,"},{"line_number":123,"context_line":"            self._neigh_handler.handle_delneigh)"},{"line_number":124,"context_line":"        self.nl_dispatcher.register_replay_callbacks("},{"line_number":125,"context_line":"            on_start\u003dvrf_handler.replay_start,"},{"line_number":126,"context_line":"            on_end\u003dvrf_handler.replay_end)"},{"line_number":127,"context_line":"        self.nl_dispatcher.start()"},{"line_number":128,"context_line":"        LOG.info(\"NetlinkDispatcher started as part of EVPN extension\")"},{"line_number":129,"context_line":"        super().start()"}],"source_content_type":"text/x-python","patch_set":6,"id":"5eea0e88_dde01eeb","line":126,"range":{"start_line":124,"start_character":0,"end_line":126,"end_character":42},"updated":"2026-08-25 19:44:30.000000000","message":"What happens with neigh_handler on agent crash/restart? Should the neigh_handler also dump current states of interfaces and make sure that Static_Mac_Binding table up to date with the state of interfaces?","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"92855a20574fc4cc9f1f0e41f8274ebfa2f2f2b2","unresolved":true,"context_lines":[{"line_number":121,"context_line":"        self.nl_dispatcher.register_handler("},{"line_number":122,"context_line":"            nl_const.RTM_DELNEIGH,"},{"line_number":123,"context_line":"            self._neigh_handler.handle_delneigh)"},{"line_number":124,"context_line":"        self.nl_dispatcher.register_replay_callbacks("},{"line_number":125,"context_line":"            on_start\u003dvrf_handler.replay_start,"},{"line_number":126,"context_line":"            on_end\u003dvrf_handler.replay_end)"},{"line_number":127,"context_line":"        self.nl_dispatcher.start()"},{"line_number":128,"context_line":"        LOG.info(\"NetlinkDispatcher started as part of EVPN extension\")"},{"line_number":129,"context_line":"        super().start()"}],"source_content_type":"text/x-python","patch_set":6,"id":"e44c2525_cf5dec74","line":126,"range":{"start_line":124,"start_character":0,"end_line":126,"end_character":42},"in_reply_to":"5eea0e88_dde01eeb","updated":"2026-08-25 19:54:16.000000000","message":"Good question! crash and restart should be fine since the information is stored in the OVN DB but in theory if a VPN tunnel was formed by the ovn-controller while the agent was stopped, we would miss the neigh information and the static MAC entry would be missed.","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}],"neutron/agent/ovn/extensions/evpn/events.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"6ffac1ee15a2e76342e57cd431f434dbfcb3e77c","unresolved":true,"context_lines":[{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            self.fsm.advance(evpn_fsm.EvpnFSM.FSM_EVENT_PORT_BINDING_CREATE,"},{"line_number":78,"context_line":"                             vrf, mac\u003drow.mac[0], vni\u003dvni, vid\u003dvid,"},{"line_number":79,"context_line":"                             logical_port\u003drow.options[\"distributed-port\"])"},{"line_number":80,"context_line":"        except evpn_exc.FSMIllegalTransition:"},{"line_number":81,"context_line":"            LOG.error(\"Unexpected FSM transition for VRF %s on %s\","},{"line_number":82,"context_line":"                      vrf, row.logical_port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9190be21_f3d9a630","line":79,"range":{"start_line":79,"start_character":29,"end_line":79,"end_character":74},"updated":"2026-08-25 19:44:30.000000000","message":"the `distributed-port` should be checked in the `match_fn`, just like vni and vid","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"efaa1d9226fc034ee4d58bdf7a4e3ef2ae575923","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            self.fsm.advance(evpn_fsm.EvpnFSM.FSM_EVENT_PORT_BINDING_CREATE,"},{"line_number":78,"context_line":"                             vrf, mac\u003drow.mac[0], vni\u003dvni, vid\u003dvid,"},{"line_number":79,"context_line":"                             logical_port\u003drow.options[\"distributed-port\"])"},{"line_number":80,"context_line":"        except evpn_exc.FSMIllegalTransition:"},{"line_number":81,"context_line":"            LOG.error(\"Unexpected FSM transition for VRF %s on %s\","},{"line_number":82,"context_line":"                      vrf, row.logical_port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"b2afa67a_dd46ca57","line":79,"range":{"start_line":79,"start_character":29,"end_line":79,"end_character":74},"in_reply_to":"9190be21_f3d9a630","updated":"2026-08-25 19:58:44.000000000","message":"Done","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}],"neutron/agent/ovn/extensions/evpn/fsm.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"eadce925609047acd21ab2caee0430ac18990008","unresolved":true,"context_lines":[{"line_number":112,"context_line":"        evpn.vrf_up \u003d False"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _advertise(self, evpn):"},{"line_number":115,"context_line":"        svi \u003d evpn_utils.svi_name(evpn.vid)"},{"line_number":116,"context_line":"        self._neigh_handler.register_port(svi, evpn.logical_port)"},{"line_number":117,"context_line":"        self._svd.add_vni(evpn.vni, evpn.vid, evpn.vrf, evpn.mac,"},{"line_number":118,"context_line":"                          self._cfg.br_mtu)"}],"source_content_type":"text/x-python","patch_set":6,"id":"710d2fe9_b5022d4d","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":43},"updated":"2026-08-25 20:21:08.000000000","message":"nit: this logic is little fragile(long term) as you are implicitly using index `0`. The `EvpnSvd` class is also defaulting to 0. Again fine for now, and maybe ok until we pull this workaround","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}],"neutron/agent/ovn/extensions/evpn/netlink_monitor.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0a8cd4d1e0c7ddb8f97b902037221567c8adbe54","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            port \u003d self._ports[self._ifindex_to_br[ifindex]]"},{"line_number":214,"context_line":"        except KeyError:"},{"line_number":215,"context_line":"            return"},{"line_number":216,"context_line":"        if not (msg.get(\u0027flags\u0027, 0) \u0026 NTF_EXT_LEARNED):"},{"line_number":217,"context_line":"            return"},{"line_number":218,"context_line":"        ip \u003d msg.get_attr(\u0027NDA_DST\u0027)"},{"line_number":219,"context_line":"        mac \u003d msg.get_attr(\u0027NDA_LLADDR\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f67ba5c_bc88aaf0","line":216,"updated":"2026-07-03 14:09:02.000000000","message":"pep8: C0325: Unnecessary parens after \u0027not\u0027 keyword (superfluous-parens)","commit_id":"9c38f5791f8374bfdb9c915a1ffeeb39fcc3cb86"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"6ffac1ee15a2e76342e57cd431f434dbfcb3e77c","unresolved":true,"context_lines":[{"line_number":301,"context_line":"            self.nb_idl.create_or_update_static_mac_binding("},{"line_number":302,"context_line":"                port.logical_port, ip, mac,"},{"line_number":303,"context_line":"            ).execute(check_error\u003dTrue)"},{"line_number":304,"context_line":"            LOG.debug(\"NeighHandler: created/updated binding %s %s -\u003e %s\","},{"line_number":305,"context_line":"                      port.logical_port, ip, mac)"},{"line_number":306,"context_line":"        except Exception:"},{"line_number":307,"context_line":"            LOG.exception(\"Failed to create/update Static_MAC_Binding \""}],"source_content_type":"text/x-python","patch_set":6,"id":"d1c13315_b25b0d8e","line":304,"range":{"start_line":304,"start_character":36,"end_line":304,"end_character":60},"updated":"2026-08-25 19:44:30.000000000","message":"nit: created/updates Static_MAC_Binding with %s %s -\u003e %s","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"efaa1d9226fc034ee4d58bdf7a4e3ef2ae575923","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            self.nb_idl.create_or_update_static_mac_binding("},{"line_number":302,"context_line":"                port.logical_port, ip, mac,"},{"line_number":303,"context_line":"            ).execute(check_error\u003dTrue)"},{"line_number":304,"context_line":"            LOG.debug(\"NeighHandler: created/updated binding %s %s -\u003e %s\","},{"line_number":305,"context_line":"                      port.logical_port, ip, mac)"},{"line_number":306,"context_line":"        except Exception:"},{"line_number":307,"context_line":"            LOG.exception(\"Failed to create/update Static_MAC_Binding \""}],"source_content_type":"text/x-python","patch_set":6,"id":"6ca26a01_2e2cb2ef","line":304,"range":{"start_line":304,"start_character":36,"end_line":304,"end_character":60},"in_reply_to":"d1c13315_b25b0d8e","updated":"2026-08-25 19:58:44.000000000","message":"Done","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}],"neutron/privileged/agent/linux/svd.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"eadce925609047acd21ab2caee0430ac18990008","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    Equivalent to:"},{"line_number":127,"context_line":"        bridge vni add dev \u003cvxlan\u003e vni \u003cvni\u003e"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    On kernels \u003e\u003d 5.18, adding a VLAN tunnel mapping on a vxlan device"},{"line_number":130,"context_line":"    with vnifilter enabled auto-creates the VNI filter entry, so"},{"line_number":131,"context_line":"    EEXIST is tolerated here."},{"line_number":132,"context_line":"    \"\"\""},{"line_number":133,"context_line":"    msg \u003d _make_bridge_vni_msg(vxlan_idx, vni)"},{"line_number":134,"context_line":"    try:"},{"line_number":135,"context_line":"        ipr.nlm_request(msg, msg_type\u003dRTM_NEWTUNNEL,"},{"line_number":136,"context_line":"                        msg_flags\u003dBRIDGE_ADD_VNI_MSG_FLAGS)"},{"line_number":137,"context_line":"    except netlink_exc.NetlinkError as e:"},{"line_number":138,"context_line":"        if e.code !\u003d errno.EEXIST:"},{"line_number":139,"context_line":"            raise"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def _bridge_del_vni(ipr, vxlan_idx, vni):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3318ef88_a66013b2","line":139,"range":{"start_line":129,"start_character":0,"end_line":139,"end_character":17},"updated":"2026-08-25 20:21:08.000000000","message":"I would make this change in a separate patch so we don\u0027t accidently revert it once we revert this workaround.","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d81c7450cdf358b8fb612529730d0f9d46b3e8bf","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    Equivalent to:"},{"line_number":127,"context_line":"        bridge vni add dev \u003cvxlan\u003e vni \u003cvni\u003e"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    On kernels \u003e\u003d 5.18, adding a VLAN tunnel mapping on a vxlan device"},{"line_number":130,"context_line":"    with vnifilter enabled auto-creates the VNI filter entry, so"},{"line_number":131,"context_line":"    EEXIST is tolerated here."},{"line_number":132,"context_line":"    \"\"\""},{"line_number":133,"context_line":"    msg \u003d _make_bridge_vni_msg(vxlan_idx, vni)"},{"line_number":134,"context_line":"    try:"},{"line_number":135,"context_line":"        ipr.nlm_request(msg, msg_type\u003dRTM_NEWTUNNEL,"},{"line_number":136,"context_line":"                        msg_flags\u003dBRIDGE_ADD_VNI_MSG_FLAGS)"},{"line_number":137,"context_line":"    except netlink_exc.NetlinkError as e:"},{"line_number":138,"context_line":"        if e.code !\u003d errno.EEXIST:"},{"line_number":139,"context_line":"            raise"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def _bridge_del_vni(ipr, vxlan_idx, vni):"}],"source_content_type":"text/x-python","patch_set":6,"id":"628865f0_fcb445ce","line":139,"range":{"start_line":129,"start_character":0,"end_line":139,"end_character":17},"in_reply_to":"3318ef88_a66013b2","updated":"2026-08-26 09:26:09.000000000","message":"+1","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}],"neutron/tests/unit/agent/ovn/extensions/evpn/test_fsm.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"eadce925609047acd21ab2caee0430ac18990008","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        self.assertTrue(evpn.vrf_up)"},{"line_number":70,"context_line":"        self.mock_svd.add_vni.assert_called_once_with("},{"line_number":71,"context_line":"            10, 1, vrf, \u0027aa:bb:cc:dd:ee:ff\u0027, BR_MTU)"},{"line_number":72,"context_line":"        self.mock_driver.create_router.assert_called_once_with(vrf, 10)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_advertise_then_port_binding_delete(self):"},{"line_number":75,"context_line":"        vrf \u003d \u0027vr0a1b2c3d-fff\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"ab98faaa_580374ec","line":72,"updated":"2026-08-25 20:21:08.000000000","message":"assert that neigh_handler mock was called for `activate_port`. Similar for other unit tests","commit_id":"39826809bfe083057a11683853668cdbf29a4f08"}]}
