)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"020fc510f86ad95f9cf1a31d21dae441e7d42570","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8f92530a_49865125","updated":"2026-09-28 06:52:22.000000000","message":"recheck not related","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"62ad7d86ed0affddcde8caab57a1694f711ca767","unresolved":true,"context_lines":[{"line_number":600,"context_line":"        port_name \u003d getattr(row, \u0027logical_port\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        prefix \u003d utils.ovn_cr_lrouter_port_name(\u0027\u0027)"},{"line_number":602,"context_line":"        port_id \u003d port_name.removeprefix(prefix)"},{"line_number":603,"context_line":"        datapath \u003d getattr(row, \u0027datapath\u0027, None)"},{"line_number":604,"context_line":"        router_name \u003d (getattr(datapath, \u0027external_ids\u0027, {}) or {}).get("},{"line_number":605,"context_line":"            \u0027name\u0027, \u0027\u0027)"},{"line_number":606,"context_line":"        router \u003d router_name.removeprefix(ovn_const.OVN_NAME_PREFIX)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e56c6a46_29e2b1ab","line":603,"range":{"start_line":603,"start_character":19,"end_line":603,"end_character":49},"updated":"2026-09-28 09:58:36.000000000","message":"nit: the `row.datapath` is always present (not in `old`)","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"c0838b9d75a810d724da48ae2e5ed98527b5cdb6","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        port_name \u003d getattr(row, \u0027logical_port\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        prefix \u003d utils.ovn_cr_lrouter_port_name(\u0027\u0027)"},{"line_number":602,"context_line":"        port_id \u003d port_name.removeprefix(prefix)"},{"line_number":603,"context_line":"        datapath \u003d getattr(row, \u0027datapath\u0027, None)"},{"line_number":604,"context_line":"        router_name \u003d (getattr(datapath, \u0027external_ids\u0027, {}) or {}).get("},{"line_number":605,"context_line":"            \u0027name\u0027, \u0027\u0027)"},{"line_number":606,"context_line":"        router \u003d router_name.removeprefix(ovn_const.OVN_NAME_PREFIX)"}],"source_content_type":"text/x-python","patch_set":2,"id":"0a928859_9b8a76ea","line":603,"range":{"start_line":603,"start_character":19,"end_line":603,"end_character":49},"in_reply_to":"e56c6a46_29e2b1ab","updated":"2026-09-30 15:20:59.000000000","message":"Done","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"62ad7d86ed0affddcde8caab57a1694f711ca767","unresolved":true,"context_lines":[{"line_number":597,"context_line":"        return True"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def run(self, event, row, old):"},{"line_number":600,"context_line":"        port_name \u003d getattr(row, \u0027logical_port\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        prefix \u003d utils.ovn_cr_lrouter_port_name(\u0027\u0027)"},{"line_number":602,"context_line":"        port_id \u003d port_name.removeprefix(prefix)"},{"line_number":603,"context_line":"        datapath \u003d getattr(row, \u0027datapath\u0027, None)"},{"line_number":604,"context_line":"        router_name \u003d (getattr(datapath, \u0027external_ids\u0027, {}) or {}).get("},{"line_number":605,"context_line":"            \u0027name\u0027, \u0027\u0027)"},{"line_number":606,"context_line":"        router \u003d router_name.removeprefix(ovn_const.OVN_NAME_PREFIX)"},{"line_number":607,"context_line":"        if (not port_name.startswith(prefix) or"},{"line_number":608,"context_line":"                not uuidutils.is_uuid_like(port_id) or"},{"line_number":609,"context_line":"                not router_name.startswith(ovn_const.OVN_NAME_PREFIX) or"},{"line_number":610,"context_line":"                not uuidutils.is_uuid_like(router)):"},{"line_number":611,"context_line":"            return"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        chassis \u003d getattr(row, \u0027chassis\u0027, None)"},{"line_number":614,"context_line":"        if not chassis:"}],"source_content_type":"text/x-python","patch_set":2,"id":"51580d13_c30195c2","line":611,"range":{"start_line":600,"start_character":8,"end_line":611,"end_character":18},"updated":"2026-09-28 09:58:36.000000000","message":"All this section should be in `match_fn`.\nA short explanation of why this `if (not port_name.startswith(prefix)...` branch is needed would be nice to have","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"c0838b9d75a810d724da48ae2e5ed98527b5cdb6","unresolved":false,"context_lines":[{"line_number":597,"context_line":"        return True"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def run(self, event, row, old):"},{"line_number":600,"context_line":"        port_name \u003d getattr(row, \u0027logical_port\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        prefix \u003d utils.ovn_cr_lrouter_port_name(\u0027\u0027)"},{"line_number":602,"context_line":"        port_id \u003d port_name.removeprefix(prefix)"},{"line_number":603,"context_line":"        datapath \u003d getattr(row, \u0027datapath\u0027, None)"},{"line_number":604,"context_line":"        router_name \u003d (getattr(datapath, \u0027external_ids\u0027, {}) or {}).get("},{"line_number":605,"context_line":"            \u0027name\u0027, \u0027\u0027)"},{"line_number":606,"context_line":"        router \u003d router_name.removeprefix(ovn_const.OVN_NAME_PREFIX)"},{"line_number":607,"context_line":"        if (not port_name.startswith(prefix) or"},{"line_number":608,"context_line":"                not uuidutils.is_uuid_like(port_id) or"},{"line_number":609,"context_line":"                not router_name.startswith(ovn_const.OVN_NAME_PREFIX) or"},{"line_number":610,"context_line":"                not uuidutils.is_uuid_like(router)):"},{"line_number":611,"context_line":"            return"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        chassis \u003d getattr(row, \u0027chassis\u0027, None)"},{"line_number":614,"context_line":"        if not chassis:"}],"source_content_type":"text/x-python","patch_set":2,"id":"31fb5b30_cf624ce1","line":611,"range":{"start_line":600,"start_character":8,"end_line":611,"end_character":18},"in_reply_to":"51580d13_c30195c2","updated":"2026-09-30 15:20:59.000000000","message":"Done","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"62ad7d86ed0affddcde8caab57a1694f711ca767","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        status \u003d (n_const.PORT_STATUS_ACTIVE if host"},{"line_number":292,"context_line":"                  else n_const.PORT_STATUS_DOWN)"},{"line_number":293,"context_line":"        context \u003d n_context.get_admin_context()"},{"line_number":294,"context_line":"        filters \u003d {\u0027id\u0027: [port_id], \u0027device_id\u0027: [router],"},{"line_number":295,"context_line":"                   \u0027device_owner\u0027: [n_const.DEVICE_OWNER_ROUTER_GW]}"},{"line_number":296,"context_line":"        for port in self._plugin.get_ports(context, filters\u003dfilters):"},{"line_number":297,"context_line":"            # FIXME(lucasagomes): Ideally here we would use only"},{"line_number":298,"context_line":"            # one database transaction for the status and binding the"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6a88f1_01f4763b","line":295,"range":{"start_line":294,"start_character":7,"end_line":295,"end_character":68},"updated":"2026-09-28 09:58:36.000000000","message":"If we have the `port_id`, there is not need for any other filter","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"c0838b9d75a810d724da48ae2e5ed98527b5cdb6","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        status \u003d (n_const.PORT_STATUS_ACTIVE if host"},{"line_number":292,"context_line":"                  else n_const.PORT_STATUS_DOWN)"},{"line_number":293,"context_line":"        context \u003d n_context.get_admin_context()"},{"line_number":294,"context_line":"        filters \u003d {\u0027id\u0027: [port_id], \u0027device_id\u0027: [router],"},{"line_number":295,"context_line":"                   \u0027device_owner\u0027: [n_const.DEVICE_OWNER_ROUTER_GW]}"},{"line_number":296,"context_line":"        for port in self._plugin.get_ports(context, filters\u003dfilters):"},{"line_number":297,"context_line":"            # FIXME(lucasagomes): Ideally here we would use only"},{"line_number":298,"context_line":"            # one database transaction for the status and binding the"}],"source_content_type":"text/x-python","patch_set":2,"id":"e8a2e629_cd0b52a9","line":295,"range":{"start_line":294,"start_character":7,"end_line":295,"end_character":68},"in_reply_to":"1a6a88f1_01f4763b","updated":"2026-09-30 15:20:59.000000000","message":"Done","commit_id":"eeabcd90aae21ba558d1b3b2431f5d62008d2ed6"}]}
