)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"41f3fd9e89eb29e6f75c4d8d15f178cf1fd9d1e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6ba93896_7f831f1c","updated":"2024-01-17 09:04:57.000000000","message":"-1 only for visibility","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"04fb727cb87f0043aaf4ed56dc26bdbb5ae412cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d3cdd10d_b3963388","updated":"2024-02-29 07:12:54.000000000","message":"couple of extra nic","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"7a5a9ea091da5ad1b0e6356aaf88a70a2d06a970","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9c83fb06_ac69d9b5","updated":"2024-02-29 07:13:00.000000000","message":"nits xD","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"831962b88f4b67a7a92f2e7f4cc856334fc6e5d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"79e31737_26089f2e","updated":"2024-03-04 11:36:54.000000000","message":"Thanks Fernando!","commit_id":"e6201b35bc0d83597e527cb3c3a4d5b800d85044"}],"ovn_bgp_agent/drivers/openstack/utils/driver_utils.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"d91bf75836971ae9e2d5c4cd8ec8481c3899db14","unresolved":true,"context_lines":[{"line_number":65,"context_line":"    parts \u003d ip_address.rsplit(\u0027:\u0027, 1)"},{"line_number":66,"context_line":"    if len(parts) \u003d\u003d 2 and parts[1].isdigit():"},{"line_number":67,"context_line":"        return parts[0]"},{"line_number":68,"context_line":"    return"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ea486d1_848ebf73","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":10},"updated":"2024-02-29 07:15:24.000000000","message":"this is implicit","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ae2e8ea38450d91de2a598d6641b4f3ee7ead277","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    parts \u003d ip_address.rsplit(\u0027:\u0027, 1)"},{"line_number":66,"context_line":"    if len(parts) \u003d\u003d 2 and parts[1].isdigit():"},{"line_number":67,"context_line":"        return parts[0]"},{"line_number":68,"context_line":"    return"}],"source_content_type":"text/x-python","patch_set":7,"id":"2da969e9_feee532d","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":10},"in_reply_to":"9ea486d1_848ebf73","updated":"2024-03-01 08:43:14.000000000","message":"refactor to cover case of IPv6 ending in only digits section","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"539e2a1402c5d39a3adc927d68188778e2a87b7e","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    if last_colon_index \u003d\u003d -1:"},{"line_number":68,"context_line":"        return ip_address"},{"line_number":69,"context_line":"    # check if right side from index is a digit, in positive case remove it"},{"line_number":70,"context_line":"    if ip_address[last_colon_index + 1:].isdigit():"},{"line_number":71,"context_line":"        return ip_address[:last_colon_index]"},{"line_number":72,"context_line":"    return ip_address"}],"source_content_type":"text/x-python","patch_set":8,"id":"cb29247d_c3443984","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":2},"updated":"2024-03-01 09:27:52.000000000","message":"this works due to IPv6 coming with \"[ipv6]\", right? perhaps worth to add it to the comment","commit_id":"f0017fc6fc8da331266a907d8c1a340871c0ee55"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ce42cf6eb31027961282488f9da97f166d8ad3f3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    if last_colon_index \u003d\u003d -1:"},{"line_number":68,"context_line":"        return ip_address"},{"line_number":69,"context_line":"    # check if right side from index is a digit, in positive case remove it"},{"line_number":70,"context_line":"    if ip_address[last_colon_index + 1:].isdigit():"},{"line_number":71,"context_line":"        return ip_address[:last_colon_index]"},{"line_number":72,"context_line":"    return ip_address"}],"source_content_type":"text/x-python","patch_set":8,"id":"87de89f0_b285a525","line":70,"range":{"start_line":70,"start_character":0,"end_line":70,"end_character":2},"in_reply_to":"cb29247d_c3443984","updated":"2024-03-01 09:43:47.000000000","message":"Done","commit_id":"f0017fc6fc8da331266a907d8c1a340871c0ee55"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"539e2a1402c5d39a3adc927d68188778e2a87b7e","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    # check if right side from index is a digit, in positive case remove it"},{"line_number":70,"context_line":"    if ip_address[last_colon_index + 1:].isdigit():"},{"line_number":71,"context_line":"        return ip_address[:last_colon_index]"},{"line_number":72,"context_line":"    return ip_address"}],"source_content_type":"text/x-python","patch_set":8,"id":"1356a0bd_d37f6506","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":21},"updated":"2024-03-01 09:27:52.000000000","message":"this is to cover the case it is an ipv6 without port, right?","commit_id":"f0017fc6fc8da331266a907d8c1a340871c0ee55"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ce42cf6eb31027961282488f9da97f166d8ad3f3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    # check if right side from index is a digit, in positive case remove it"},{"line_number":70,"context_line":"    if ip_address[last_colon_index + 1:].isdigit():"},{"line_number":71,"context_line":"        return ip_address[:last_colon_index]"},{"line_number":72,"context_line":"    return ip_address"}],"source_content_type":"text/x-python","patch_set":8,"id":"2d885315_75507317","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":21},"in_reply_to":"1356a0bd_d37f6506","updated":"2024-03-01 09:43:47.000000000","message":"right! IPv4 without port is covered by L67","commit_id":"f0017fc6fc8da331266a907d8c1a340871c0ee55"}],"ovn_bgp_agent/drivers/openstack/watchers/base_watcher.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5cfafcea9f1f5abc6787220bd0de0844bef4e020","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            vip_fip \u003d row.external_ids.get(constants.OVN_LB_VIP_FIP_EXT_ID_KEY)"},{"line_number":63,"context_line":"            if vip_fip:"},{"line_number":64,"context_line":"                # NOTE(froyo): ensure that FIP is already include in vips, to"},{"line_number":65,"context_line":"                # be aware of those events updating vips field but FIP still"},{"line_number":66,"context_line":"                # present in external_ids"},{"line_number":67,"context_line":"                return next((vip_fip for key in row.vips.keys()"}],"source_content_type":"text/x-python","patch_set":1,"id":"088d094e_6ee70be1","line":64,"range":{"start_line":64,"start_character":58,"end_line":64,"end_character":65},"updated":"2024-01-17 09:04:40.000000000","message":"included","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a7b9b4069116d2190585c517f625bbef766e94df","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            vip_fip \u003d row.external_ids.get(constants.OVN_LB_VIP_FIP_EXT_ID_KEY)"},{"line_number":63,"context_line":"            if vip_fip:"},{"line_number":64,"context_line":"                # NOTE(froyo): ensure that FIP is already include in vips, to"},{"line_number":65,"context_line":"                # be aware of those events updating vips field but FIP still"},{"line_number":66,"context_line":"                # present in external_ids"},{"line_number":67,"context_line":"                return next((vip_fip for key in row.vips.keys()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9e9bda34_d5ae3eb5","line":64,"range":{"start_line":64,"start_character":58,"end_line":64,"end_character":65},"in_reply_to":"088d094e_6ee70be1","updated":"2024-01-17 11:36:34.000000000","message":"Done","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5cfafcea9f1f5abc6787220bd0de0844bef4e020","unresolved":true,"context_lines":[{"line_number":66,"context_line":"                # present in external_ids"},{"line_number":67,"context_line":"                return next((vip_fip for key in row.vips.keys()"},{"line_number":68,"context_line":"                             if key.startswith(vip_fip)), None)"},{"line_number":69,"context_line":"            return None"},{"line_number":70,"context_line":"        except (AttributeError, KeyError):"},{"line_number":71,"context_line":"            pass"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3e922383_17b970fd","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":23},"updated":"2024-01-17 09:04:40.000000000","message":"nit: by default, \"return\" returns None","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a7b9b4069116d2190585c517f625bbef766e94df","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                # present in external_ids"},{"line_number":67,"context_line":"                return next((vip_fip for key in row.vips.keys()"},{"line_number":68,"context_line":"                             if key.startswith(vip_fip)), None)"},{"line_number":69,"context_line":"            return None"},{"line_number":70,"context_line":"        except (AttributeError, KeyError):"},{"line_number":71,"context_line":"            pass"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cceded74_e8851b83","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":23},"in_reply_to":"3e922383_17b970fd","updated":"2024-01-17 11:36:34.000000000","message":"Done","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5cfafcea9f1f5abc6787220bd0de0844bef4e020","unresolved":true,"context_lines":[{"line_number":67,"context_line":"                return next((vip_fip for key in row.vips.keys()"},{"line_number":68,"context_line":"                             if key.startswith(vip_fip)), None)"},{"line_number":69,"context_line":"            return None"},{"line_number":70,"context_line":"        except (AttributeError, KeyError):"},{"line_number":71,"context_line":"            pass"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"eca4027e_ef730820","line":70,"range":{"start_line":70,"start_character":32,"end_line":70,"end_character":40},"updated":"2024-01-17 09:04:40.000000000","message":"When is this happening now?","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a7b9b4069116d2190585c517f625bbef766e94df","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                return next((vip_fip for key in row.vips.keys()"},{"line_number":68,"context_line":"                             if key.startswith(vip_fip)), None)"},{"line_number":69,"context_line":"            return None"},{"line_number":70,"context_line":"        except (AttributeError, KeyError):"},{"line_number":71,"context_line":"            pass"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"43a8dce2_064c41f3","line":70,"range":{"start_line":70,"start_character":32,"end_line":70,"end_character":40},"in_reply_to":"eca4027e_ef730820","updated":"2024-01-17 11:36:34.000000000","message":"Done","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"600df868ffee646f48eecbb845d1752d2f3ddaa8","unresolved":true,"context_lines":[{"line_number":60,"context_line":"    def _get_vip_fip(self, row):"},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            vip_fip \u003d row.external_ids.get(constants.OVN_LB_VIP_FIP_EXT_ID_KEY,"},{"line_number":63,"context_line":"                                           None)"},{"line_number":64,"context_line":"            if vip_fip:"},{"line_number":65,"context_line":"                # NOTE(froyo): ensure that FIP is already included in vips, to"},{"line_number":66,"context_line":"                # be aware of those events updating vips field but FIP still"}],"source_content_type":"text/x-python","patch_set":3,"id":"4d0b762c_e10db272","line":63,"range":{"start_line":63,"start_character":43,"end_line":63,"end_character":48},"updated":"2024-01-17 12:15:51.000000000","message":"nit: not needed","commit_id":"9d70114d9470a964bca2bfeceadcb126749573ca"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"3aac427e5aff9f5d48a504b808a44bfe2b4eb3ee","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def _get_vip_fip(self, row):"},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            vip_fip \u003d row.external_ids.get(constants.OVN_LB_VIP_FIP_EXT_ID_KEY,"},{"line_number":63,"context_line":"                                           None)"},{"line_number":64,"context_line":"            if vip_fip:"},{"line_number":65,"context_line":"                # NOTE(froyo): ensure that FIP is already included in vips, to"},{"line_number":66,"context_line":"                # be aware of those events updating vips field but FIP still"}],"source_content_type":"text/x-python","patch_set":3,"id":"8a7b37e0_2a2a9f2f","line":63,"range":{"start_line":63,"start_character":43,"end_line":63,"end_character":48},"in_reply_to":"4d0b762c_e10db272","updated":"2024-01-19 10:25:49.000000000","message":"Done","commit_id":"9d70114d9470a964bca2bfeceadcb126749573ca"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"600df868ffee646f48eecbb845d1752d2f3ddaa8","unresolved":true,"context_lines":[{"line_number":68,"context_line":"                return next((vip_fip for key in row.vips.keys()"},{"line_number":69,"context_line":"                             if key.startswith(vip_fip)), None)"},{"line_number":70,"context_line":"            return"},{"line_number":71,"context_line":"        except (AttributeError):"},{"line_number":72,"context_line":"            pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"6592a402_6cb4d425","line":71,"range":{"start_line":71,"start_character":15,"end_line":71,"end_character":31},"updated":"2024-01-17 12:15:51.000000000","message":"pep8 will probably fail","commit_id":"9d70114d9470a964bca2bfeceadcb126749573ca"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                return next((vip_fip for key in row.vips.keys()"},{"line_number":69,"context_line":"                             if key.startswith(vip_fip)), None)"},{"line_number":70,"context_line":"            return"},{"line_number":71,"context_line":"        except (AttributeError):"},{"line_number":72,"context_line":"            pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"45f60dea_7b158a05","line":71,"range":{"start_line":71,"start_character":15,"end_line":71,"end_character":31},"in_reply_to":"6592a402_6cb4d425","updated":"2024-02-28 13:16:00.000000000","message":"Acknowledged","commit_id":"9d70114d9470a964bca2bfeceadcb126749573ca"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8abb202616977ba986da06eacca8a1a692f7a735","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        except (AttributeError, KeyError):"},{"line_number":57,"context_line":"            return"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get_diff_ip_from_vips(self, old, new, reverse\u003dFalse):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        def remove_port_from_ip(ip_address):"},{"line_number":62,"context_line":"            parts \u003d ip_address.rsplit(\u0027:\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8741be03_66b471df","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":62},"updated":"2024-02-27 14:33:33.000000000","message":"perhaps worth adding a docstring explain the method. Also... do you need reverse? or just call with old, new swapped?","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        except (AttributeError, KeyError):"},{"line_number":57,"context_line":"            return"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get_diff_ip_from_vips(self, old, new, reverse\u003dFalse):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        def remove_port_from_ip(ip_address):"},{"line_number":62,"context_line":"            parts \u003d ip_address.rsplit(\u0027:\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d632def0_67812b1c","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":62},"in_reply_to":"8741be03_66b471df","updated":"2024-02-28 13:16:00.000000000","message":"+1 to the docstring explaining the method. Added \u0027reverse\u0027 to make it clear how to call the method when you want to detect the \"addition\" or \"removal\" of vips, without worrying about the order of the parameters. I would propose a patch below extracting all these methods to the driver utilities.","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"04fb727cb87f0043aaf4ed56dc26bdbb5ae412cf","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        return [driver_utils.remove_port_from_ip(ipport)"},{"line_number":62,"context_line":"                for ipport in getattr(row, \u0027vips\u0027, {}).keys()]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _get_diff_ip_from_vips(self, old, new):"},{"line_number":65,"context_line":"        \"\"\"Returns a list of IPs that are present in \u0027new\u0027 but not in \u0027old\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        Note: As LB VIP contains a port (e.g., \u0027192.168.1.1:80\u0027), the port part"}],"source_content_type":"text/x-python","patch_set":7,"id":"dbd1558e_dc6b5ee2","line":64,"range":{"start_line":64,"start_character":37,"end_line":64,"end_character":47},"updated":"2024-02-29 07:12:54.000000000","message":"nit: a bit weird that old goes before new, I would do the opposite (self, new, old)","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ae2e8ea38450d91de2a598d6641b4f3ee7ead277","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return [driver_utils.remove_port_from_ip(ipport)"},{"line_number":62,"context_line":"                for ipport in getattr(row, \u0027vips\u0027, {}).keys()]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _get_diff_ip_from_vips(self, old, new):"},{"line_number":65,"context_line":"        \"\"\"Returns a list of IPs that are present in \u0027new\u0027 but not in \u0027old\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        Note: As LB VIP contains a port (e.g., \u0027192.168.1.1:80\u0027), the port part"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f114ab0_8f71df55","line":64,"range":{"start_line":64,"start_character":37,"end_line":64,"end_character":47},"in_reply_to":"dbd1558e_dc6b5ee2","updated":"2024-03-01 08:43:14.000000000","message":"Done","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"}],"ovn_bgp_agent/drivers/openstack/watchers/nb_bgp_watcher.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5cfafcea9f1f5abc6787220bd0de0844bef4e020","unresolved":true,"context_lines":[{"line_number":703,"context_line":"                    # should remove the loadbalancer"},{"line_number":704,"context_line":"                    return True"},{"line_number":705,"context_line":"                # Whatever the change if the vips field differs, we manage it"},{"line_number":706,"context_line":"                if old.vips !\u003d row.vips:"},{"line_number":707,"context_line":"                    return True"},{"line_number":708,"context_line":"        except (IndexError, AttributeError):"},{"line_number":709,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"19c4361c_c4afe081","line":706,"range":{"start_line":706,"start_character":19,"end_line":706,"end_character":27},"updated":"2024-01-17 09:04:40.000000000","message":"Shouldn\u0027t you check that \"old\" has \"vips\"?","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6a075aaa339bcfa5aacef8b818e1434d4597c51d","unresolved":true,"context_lines":[{"line_number":703,"context_line":"                    # should remove the loadbalancer"},{"line_number":704,"context_line":"                    return True"},{"line_number":705,"context_line":"                # Whatever the change if the vips field differs, we manage it"},{"line_number":706,"context_line":"                if old.vips !\u003d row.vips:"},{"line_number":707,"context_line":"                    return True"},{"line_number":708,"context_line":"        except (IndexError, AttributeError):"},{"line_number":709,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af182b4_80e58bef","line":706,"range":{"start_line":706,"start_character":19,"end_line":706,"end_character":27},"in_reply_to":"19c4361c_c4afe081","updated":"2024-01-17 09:25:53.000000000","message":"yes, otherwise this could be a \"creation event\" rather than deletion type. Also... at like 695 you checked old has external_ids field... it may happen the update is just on external_id, not vips related, meaning this will raise an AttributeError","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a7b9b4069116d2190585c517f625bbef766e94df","unresolved":false,"context_lines":[{"line_number":703,"context_line":"                    # should remove the loadbalancer"},{"line_number":704,"context_line":"                    return True"},{"line_number":705,"context_line":"                # Whatever the change if the vips field differs, we manage it"},{"line_number":706,"context_line":"                if old.vips !\u003d row.vips:"},{"line_number":707,"context_line":"                    return True"},{"line_number":708,"context_line":"        except (IndexError, AttributeError):"},{"line_number":709,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"0bff56e3_06910414","line":706,"range":{"start_line":706,"start_character":19,"end_line":706,"end_character":27},"in_reply_to":"7af182b4_80e58bef","updated":"2024-01-17 11:36:34.000000000","message":"yeah, you\u0027re right, in my tests (CRUD + FIP over OVN LB) didn\u0027t see nothing weird on exposing over bgp-nic, but after debugging on events, as OVNLBDeleteEvent is also suscribed to UPDATE ones is receiving some extra events (most of them discarded for not having lr_ref yet)","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6a075aaa339bcfa5aacef8b818e1434d4597c51d","unresolved":true,"context_lines":[{"line_number":715,"context_line":"        with _SYNC_STATE_LOCK.read_lock():"},{"line_number":716,"context_line":"            if event \u003d\u003d self.ROW_DELETE:"},{"line_number":717,"context_line":"                self.agent.withdraw_ovn_lb_vip(row)"},{"line_number":718,"context_line":"                if old_vip_fip and not vip_fip:"},{"line_number":719,"context_line":"                    self.agent.withdraw_ovn_lb_fip(row)"},{"line_number":720,"context_line":"            else:"},{"line_number":721,"context_line":"                if not vip_fip and old_vip_fip:"},{"line_number":722,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e59e0_2a7102dc","line":719,"range":{"start_line":718,"start_character":0,"end_line":719,"end_character":55},"updated":"2024-01-17 09:25:53.000000000","message":"why do you care about the old_vip_fip here? if the event is delete you have nothing on old, and you only care about fip being there or not","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a7b9b4069116d2190585c517f625bbef766e94df","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        with _SYNC_STATE_LOCK.read_lock():"},{"line_number":716,"context_line":"            if event \u003d\u003d self.ROW_DELETE:"},{"line_number":717,"context_line":"                self.agent.withdraw_ovn_lb_vip(row)"},{"line_number":718,"context_line":"                if old_vip_fip and not vip_fip:"},{"line_number":719,"context_line":"                    self.agent.withdraw_ovn_lb_fip(row)"},{"line_number":720,"context_line":"            else:"},{"line_number":721,"context_line":"                if not vip_fip and old_vip_fip:"},{"line_number":722,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0eab81fe_5a560466","line":719,"range":{"start_line":718,"start_character":0,"end_line":719,"end_character":55},"in_reply_to":"5f4e59e0_2a7102dc","updated":"2024-01-17 11:36:34.000000000","message":"right! I was worry about the initial update received on OVN LB delete command, but after checking old for those event (DELETE) is None","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6a075aaa339bcfa5aacef8b818e1434d4597c51d","unresolved":true,"context_lines":[{"line_number":720,"context_line":"            else:"},{"line_number":721,"context_line":"                if not vip_fip and old_vip_fip:"},{"line_number":722,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"},{"line_number":723,"context_line":"                if old.vips and not row.vips:"},{"line_number":724,"context_line":"                    self.agent.withdraw_ovn_lb_vip(old)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ea00d7e_e7b467af","line":723,"range":{"start_line":723,"start_character":1,"end_line":723,"end_character":45},"updated":"2024-01-17 09:25:53.000000000","message":"the same... it may happen that old has not VIPs information abd this will break unless the match ensures we won\u0027t execute _run in case old vips has not been modified. I\u0027m not sure if some updates will not be at the same time (external_ids + vips) or this may happen on 2 steps, first vips then external_ids or viceversa","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"3aac427e5aff9f5d48a504b808a44bfe2b4eb3ee","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            else:"},{"line_number":721,"context_line":"                if not vip_fip and old_vip_fip:"},{"line_number":722,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"},{"line_number":723,"context_line":"                if old.vips and not row.vips:"},{"line_number":724,"context_line":"                    self.agent.withdraw_ovn_lb_vip(old)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a9c7af8f_6907af4f","line":723,"range":{"start_line":723,"start_character":1,"end_line":723,"end_character":45},"in_reply_to":"05af7334_58d6779a","updated":"2024-01-19 10:25:49.000000000","message":"Finally that logic is refactored to rely on the vips field by checking if items are added/removed in it and then get information about whether it is a vip or fip to react accordingly.","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a7b9b4069116d2190585c517f625bbef766e94df","unresolved":true,"context_lines":[{"line_number":720,"context_line":"            else:"},{"line_number":721,"context_line":"                if not vip_fip and old_vip_fip:"},{"line_number":722,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"},{"line_number":723,"context_line":"                if old.vips and not row.vips:"},{"line_number":724,"context_line":"                    self.agent.withdraw_ovn_lb_vip(old)"}],"source_content_type":"text/x-python","patch_set":1,"id":"05af7334_58d6779a","line":723,"range":{"start_line":723,"start_character":1,"end_line":723,"end_character":45},"in_reply_to":"7ea00d7e_e7b467af","updated":"2024-01-17 11:36:34.000000000","message":"yeah, the important one is the first one when old has vips filled and row has vips empty, but it is true that following updates after debugging is coming but adding the check on L706 ensuring the old has attr \u0027vips\u0027 we don\u0027t need to double check here.","commit_id":"d8fe2dc17a8cc8c0ceb5fc98b21090da447e631e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"12e47d7e60116d1dd27b20fdb21e2587e0f43719","unresolved":true,"context_lines":[{"line_number":702,"context_line":"                    # Router should not be removed, but if that is the case we"},{"line_number":703,"context_line":"                    # should remove the loadbalancer"},{"line_number":704,"context_line":"                    return True"},{"line_number":705,"context_line":"                # Whatever the change if the vips field differs, we manage it"},{"line_number":706,"context_line":"                if hasattr(old, \u0027vips\u0027):"},{"line_number":707,"context_line":"                    if old.vips !\u003d row.vips:"},{"line_number":708,"context_line":"                        return True"},{"line_number":709,"context_line":"        except (IndexError, AttributeError):"},{"line_number":710,"context_line":"            return False"},{"line_number":711,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"5e9002d3_5e7f6c8c","line":708,"range":{"start_line":705,"start_character":0,"end_line":708,"end_character":35},"updated":"2024-01-17 13:36:56.000000000","message":"this is wrong. This is about withdraw, so we only care if there was old vips, and now there are not. If there still are, we have nothing to do, and if it is being added instead of deleted, we don\u0027t want to process the event either","commit_id":"9d70114d9470a964bca2bfeceadcb126749573ca"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"3aac427e5aff9f5d48a504b808a44bfe2b4eb3ee","unresolved":false,"context_lines":[{"line_number":702,"context_line":"                    # Router should not be removed, but if that is the case we"},{"line_number":703,"context_line":"                    # should remove the loadbalancer"},{"line_number":704,"context_line":"                    return True"},{"line_number":705,"context_line":"                # Whatever the change if the vips field differs, we manage it"},{"line_number":706,"context_line":"                if hasattr(old, \u0027vips\u0027):"},{"line_number":707,"context_line":"                    if old.vips !\u003d row.vips:"},{"line_number":708,"context_line":"                        return True"},{"line_number":709,"context_line":"        except (IndexError, AttributeError):"},{"line_number":710,"context_line":"            return False"},{"line_number":711,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"ad80f7f8_d05906b0","line":708,"range":{"start_line":705,"start_character":0,"end_line":708,"end_character":35},"in_reply_to":"5e9002d3_5e7f6c8c","updated":"2024-01-19 10:25:49.000000000","message":"Finally that logic is refactored to rely on the vips field by checking if items are added/removed in it and then get information about whether it is a vip or fip to react accordingly.","commit_id":"9d70114d9470a964bca2bfeceadcb126749573ca"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8b949959aa4bc12073e9746fbb95964e6335582e","unresolved":true,"context_lines":[{"line_number":638,"context_line":"                        (old.vips !\u003d row.vips and"},{"line_number":639,"context_line":"                         set(old.vips.keys()).issubset(set(row.vips.keys())))):"},{"line_number":640,"context_line":"                    return True"},{"line_number":641,"context_line":"            else:"},{"line_number":642,"context_line":"                # case when old doesn\u0027t have vips but row.vips is not empty"},{"line_number":643,"context_line":"                return True"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"            if hasattr(old, \u0027external_ids\u0027):"},{"line_number":646,"context_line":"                # Check if the lb_router was added"}],"source_content_type":"text/x-python","patch_set":5,"id":"aaca175a_e8003298","line":643,"range":{"start_line":641,"start_character":0,"end_line":643,"end_character":27},"updated":"2024-02-22 12:18:02.000000000","message":"this is wrong. This would make process any changes in LB entry if there are VIPS and they have not been modified","commit_id":"ea88052b16077375bbd20965803da4a945ff1e7e"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"682e83975d3da77b2d49a56c38f1c1e534d6403c","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                        (old.vips !\u003d row.vips and"},{"line_number":639,"context_line":"                         set(old.vips.keys()).issubset(set(row.vips.keys())))):"},{"line_number":640,"context_line":"                    return True"},{"line_number":641,"context_line":"            else:"},{"line_number":642,"context_line":"                # case when old doesn\u0027t have vips but row.vips is not empty"},{"line_number":643,"context_line":"                return True"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"            if hasattr(old, \u0027external_ids\u0027):"},{"line_number":646,"context_line":"                # Check if the lb_router was added"}],"source_content_type":"text/x-python","patch_set":5,"id":"42729502_93688684","line":643,"range":{"start_line":641,"start_character":0,"end_line":643,"end_character":27},"in_reply_to":"aaca175a_e8003298","updated":"2024-02-26 15:33:05.000000000","message":"yeah, good catch, if old doesn\u0027t have vips it means it is the same value that row","commit_id":"ea88052b16077375bbd20965803da4a945ff1e7e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8abb202616977ba986da06eacca8a1a692f7a735","unresolved":true,"context_lines":[{"line_number":655,"context_line":"            with _SYNC_STATE_LOCK.read_lock():"},{"line_number":656,"context_line":"                if self._is_vip_or_fip(row, ip):"},{"line_number":657,"context_line":"                    self.agent.expose_ovn_lb_vip(row)"},{"line_number":658,"context_line":"                if self._is_vip_or_fip("},{"line_number":659,"context_line":"                        row,"},{"line_number":660,"context_line":"                        ip,"},{"line_number":661,"context_line":"                        type_prefix\u003dconstants.OVN_LB_VIP_FIP_EXT_ID_KEY):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1964fb10_4b9306a7","line":658,"range":{"start_line":658,"start_character":16,"end_line":658,"end_character":18},"updated":"2024-02-27 14:33:33.000000000","message":"elif","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":655,"context_line":"            with _SYNC_STATE_LOCK.read_lock():"},{"line_number":656,"context_line":"                if self._is_vip_or_fip(row, ip):"},{"line_number":657,"context_line":"                    self.agent.expose_ovn_lb_vip(row)"},{"line_number":658,"context_line":"                if self._is_vip_or_fip("},{"line_number":659,"context_line":"                        row,"},{"line_number":660,"context_line":"                        ip,"},{"line_number":661,"context_line":"                        type_prefix\u003dconstants.OVN_LB_VIP_FIP_EXT_ID_KEY):"}],"source_content_type":"text/x-python","patch_set":6,"id":"24fffa36_c1a7f8ad","line":658,"range":{"start_line":658,"start_character":16,"end_line":658,"end_character":18},"in_reply_to":"1964fb10_4b9306a7","updated":"2024-02-28 13:16:00.000000000","message":"Done","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8abb202616977ba986da06eacca8a1a692f7a735","unresolved":true,"context_lines":[{"line_number":716,"context_line":"            with _SYNC_STATE_LOCK.read_lock():"},{"line_number":717,"context_line":"                if self._is_vip_or_fip(old, ip):"},{"line_number":718,"context_line":"                    self.agent.withdraw_ovn_lb_vip(old)"},{"line_number":719,"context_line":"                if self._is_vip_or_fip("},{"line_number":720,"context_line":"                        old,"},{"line_number":721,"context_line":"                        ip,"},{"line_number":722,"context_line":"                        type_prefix\u003dconstants.OVN_LB_VIP_FIP_EXT_ID_KEY):"}],"source_content_type":"text/x-python","patch_set":6,"id":"716861a2_265905c3","line":719,"range":{"start_line":719,"start_character":16,"end_line":719,"end_character":19},"updated":"2024-02-27 14:33:33.000000000","message":"same as line 732, elif","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":716,"context_line":"            with _SYNC_STATE_LOCK.read_lock():"},{"line_number":717,"context_line":"                if self._is_vip_or_fip(old, ip):"},{"line_number":718,"context_line":"                    self.agent.withdraw_ovn_lb_vip(old)"},{"line_number":719,"context_line":"                if self._is_vip_or_fip("},{"line_number":720,"context_line":"                        old,"},{"line_number":721,"context_line":"                        ip,"},{"line_number":722,"context_line":"                        type_prefix\u003dconstants.OVN_LB_VIP_FIP_EXT_ID_KEY):"}],"source_content_type":"text/x-python","patch_set":6,"id":"0653e10c_5d3b0df2","line":719,"range":{"start_line":719,"start_character":16,"end_line":719,"end_character":19},"in_reply_to":"716861a2_265905c3","updated":"2024-02-28 13:16:00.000000000","message":"Done","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8abb202616977ba986da06eacca8a1a692f7a735","unresolved":true,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        # DELETE event need drop all"},{"line_number":726,"context_line":"        if event \u003d\u003d self.ROW_DELETE:"},{"line_number":727,"context_line":"            diff \u003d self._get_diff_ip_from_vips(None, row)"},{"line_number":728,"context_line":"            for ip in diff:"},{"line_number":729,"context_line":"                with _SYNC_STATE_LOCK.read_lock():"},{"line_number":730,"context_line":"                    if self._is_vip_or_fip(row, ip):"},{"line_number":731,"context_line":"                        self.agent.withdraw_ovn_lb_vip(row)"}],"source_content_type":"text/x-python","patch_set":6,"id":"e5808d40_71dee0dd","line":728,"range":{"start_line":727,"start_character":1,"end_line":728,"end_character":27},"updated":"2024-02-27 14:33:33.000000000","message":"this is not needed. if the event is DELETE, there is nothing on the old, we just need to remove all the VIPs on the row.vips.keys, right?","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        # DELETE event need drop all"},{"line_number":726,"context_line":"        if event \u003d\u003d self.ROW_DELETE:"},{"line_number":727,"context_line":"            diff \u003d self._get_diff_ip_from_vips(None, row)"},{"line_number":728,"context_line":"            for ip in diff:"},{"line_number":729,"context_line":"                with _SYNC_STATE_LOCK.read_lock():"},{"line_number":730,"context_line":"                    if self._is_vip_or_fip(row, ip):"},{"line_number":731,"context_line":"                        self.agent.withdraw_ovn_lb_vip(row)"}],"source_content_type":"text/x-python","patch_set":6,"id":"253ce7d2_475109da","line":728,"range":{"start_line":727,"start_character":1,"end_line":728,"end_character":27},"in_reply_to":"e5808d40_71dee0dd","updated":"2024-02-28 13:16:00.000000000","message":"ok, doing the same using a new method to get just only the IPs from the vips of the row object.","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8abb202616977ba986da06eacca8a1a692f7a735","unresolved":true,"context_lines":[{"line_number":729,"context_line":"                with _SYNC_STATE_LOCK.read_lock():"},{"line_number":730,"context_line":"                    if self._is_vip_or_fip(row, ip):"},{"line_number":731,"context_line":"                        self.agent.withdraw_ovn_lb_vip(row)"},{"line_number":732,"context_line":"                    if self._is_vip_or_fip("},{"line_number":733,"context_line":"                            row,"},{"line_number":734,"context_line":"                            ip,"},{"line_number":735,"context_line":"                            type_prefix\u003dconstants.OVN_LB_VIP_FIP_EXT_ID_KEY):"}],"source_content_type":"text/x-python","patch_set":6,"id":"15042211_ecfa054e","line":732,"range":{"start_line":732,"start_character":20,"end_line":732,"end_character":22},"updated":"2024-02-27 14:33:33.000000000","message":"elif? the same IP cannot be both VIP and FIP, so no need to execute this if the previous one was true","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                with _SYNC_STATE_LOCK.read_lock():"},{"line_number":730,"context_line":"                    if self._is_vip_or_fip(row, ip):"},{"line_number":731,"context_line":"                        self.agent.withdraw_ovn_lb_vip(row)"},{"line_number":732,"context_line":"                    if self._is_vip_or_fip("},{"line_number":733,"context_line":"                            row,"},{"line_number":734,"context_line":"                            ip,"},{"line_number":735,"context_line":"                            type_prefix\u003dconstants.OVN_LB_VIP_FIP_EXT_ID_KEY):"}],"source_content_type":"text/x-python","patch_set":6,"id":"865bc9fb_aa0d9e0e","line":732,"range":{"start_line":732,"start_character":20,"end_line":732,"end_character":22},"in_reply_to":"15042211_ecfa054e","updated":"2024-02-28 13:16:00.000000000","message":"Done","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"04fb727cb87f0043aaf4ed56dc26bdbb5ae412cf","unresolved":true,"context_lines":[{"line_number":661,"context_line":"                elif self._is_fip(row, ip):"},{"line_number":662,"context_line":"                    self.agent.expose_ovn_lb_fip(row)"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        # router set ext-gw"},{"line_number":665,"context_line":"        if hasattr(old, \u0027external_ids\u0027):"},{"line_number":666,"context_line":"            if self._get_router(old) !\u003d self._get_router(row):"},{"line_number":667,"context_line":"                self.agent.expose_ovn_lb_vip(row)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"class OVNLBDeleteEvent(base_watcher.OVNLBEvent):"}],"source_content_type":"text/x-python","patch_set":7,"id":"d9b298ae_e327fb4c","line":667,"range":{"start_line":664,"start_character":1,"end_line":667,"end_character":49},"updated":"2024-02-29 07:12:54.000000000","message":"perhaps we need to add here the \"with _SYNC_STATE_LOCK\" too?\n\nAlso, perhaps add a note that there is no need to call expose_ovn_lb_fip here as if there was no router, there could not be any FIP","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ae2e8ea38450d91de2a598d6641b4f3ee7ead277","unresolved":false,"context_lines":[{"line_number":661,"context_line":"                elif self._is_fip(row, ip):"},{"line_number":662,"context_line":"                    self.agent.expose_ovn_lb_fip(row)"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        # router set ext-gw"},{"line_number":665,"context_line":"        if hasattr(old, \u0027external_ids\u0027):"},{"line_number":666,"context_line":"            if self._get_router(old) !\u003d self._get_router(row):"},{"line_number":667,"context_line":"                self.agent.expose_ovn_lb_vip(row)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"class OVNLBDeleteEvent(base_watcher.OVNLBEvent):"}],"source_content_type":"text/x-python","patch_set":7,"id":"c52277a7_ba33a88f","line":667,"range":{"start_line":664,"start_character":1,"end_line":667,"end_character":49},"in_reply_to":"d9b298ae_e327fb4c","updated":"2024-03-01 08:43:14.000000000","message":"Done","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"04fb727cb87f0043aaf4ed56dc26bdbb5ae412cf","unresolved":true,"context_lines":[{"line_number":719,"context_line":"                elif self._is_fip(old, ip):"},{"line_number":720,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        # DELETE event need drop all"},{"line_number":723,"context_line":"        if event \u003d\u003d self.ROW_DELETE:"},{"line_number":724,"context_line":"            diff \u003d self._get_ip_from_vips(row)"},{"line_number":725,"context_line":"            for ip in diff:"},{"line_number":726,"context_line":"                with _SYNC_STATE_LOCK.read_lock():"}],"source_content_type":"text/x-python","patch_set":7,"id":"beb01ede_cb2852f1","line":723,"range":{"start_line":722,"start_character":0,"end_line":723,"end_character":36},"updated":"2024-02-29 07:12:54.000000000","message":"perhaps this should go before the other block and have a return to not process the rest if the event is a deletet","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ae2e8ea38450d91de2a598d6641b4f3ee7ead277","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                elif self._is_fip(old, ip):"},{"line_number":720,"context_line":"                    self.agent.withdraw_ovn_lb_fip(old)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        # DELETE event need drop all"},{"line_number":723,"context_line":"        if event \u003d\u003d self.ROW_DELETE:"},{"line_number":724,"context_line":"            diff \u003d self._get_ip_from_vips(row)"},{"line_number":725,"context_line":"            for ip in diff:"},{"line_number":726,"context_line":"                with _SYNC_STATE_LOCK.read_lock():"}],"source_content_type":"text/x-python","patch_set":7,"id":"05123bc9_d1f302cd","line":723,"range":{"start_line":722,"start_character":0,"end_line":723,"end_character":36},"in_reply_to":"beb01ede_cb2852f1","updated":"2024-03-01 08:43:14.000000000","message":"Done","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"04fb727cb87f0043aaf4ed56dc26bdbb5ae412cf","unresolved":true,"context_lines":[{"line_number":730,"context_line":"                        self.agent.withdraw_ovn_lb_fip(row)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        # router unset ext-gw"},{"line_number":733,"context_line":"        if hasattr(old, \u0027external_ids\u0027):"},{"line_number":734,"context_line":"            if self._get_router(old) !\u003d self._get_router(row):"},{"line_number":735,"context_line":"                self.agent.withdraw_ovn_lb_vip(old)"},{"line_number":736,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"2a73bdf6_a49df356","line":733,"range":{"start_line":733,"start_character":0,"end_line":733,"end_character":40},"updated":"2024-02-29 07:12:54.000000000","message":"with _SYNC_STATE_LOCK too?","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"ae2e8ea38450d91de2a598d6641b4f3ee7ead277","unresolved":false,"context_lines":[{"line_number":730,"context_line":"                        self.agent.withdraw_ovn_lb_fip(row)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        # router unset ext-gw"},{"line_number":733,"context_line":"        if hasattr(old, \u0027external_ids\u0027):"},{"line_number":734,"context_line":"            if self._get_router(old) !\u003d self._get_router(row):"},{"line_number":735,"context_line":"                self.agent.withdraw_ovn_lb_vip(old)"},{"line_number":736,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ae2d637f_676a1f61","line":733,"range":{"start_line":733,"start_character":0,"end_line":733,"end_character":40},"in_reply_to":"2a73bdf6_a49df356","updated":"2024-03-01 08:43:14.000000000","message":"Done","commit_id":"54ff023f666170f11b801eac165ecf20741d2c44"}],"ovn_bgp_agent/tests/unit/drivers/openstack/watchers/test_nb_bgp_watcher.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8abb202616977ba986da06eacca8a1a692f7a735","unresolved":true,"context_lines":[{"line_number":1165,"context_line":"        old \u003d utils.create_row("},{"line_number":1166,"context_line":"            external_ids\u003d{"},{"line_number":1167,"context_line":"                constants.OVN_LB_LR_REF_EXT_ID_KEY: \u0027neutron-router1\u0027},"},{"line_number":1168,"context_line":"            vips\u003d{\u0027192.168.1.50:80\u0027: \u0027192.168.1.100:80\u0027})"},{"line_number":1169,"context_line":"        self.assertTrue(self.event.match_fn(mock.Mock(), row, old))"},{"line_number":1170,"context_line":""},{"line_number":1171,"context_line":"    def test_match_fn_no_vips(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"0ef1f581_86456113","line":1168,"range":{"start_line":1168,"start_character":1,"end_line":1168,"end_character":57},"updated":"2024-02-27 14:33:33.000000000","message":"perhaps worth to cover the case where there is no vips modification, to ensure the logic does not match","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"fddc963b153cc83d9971e5d096d1425048d857f5","unresolved":false,"context_lines":[{"line_number":1165,"context_line":"        old \u003d utils.create_row("},{"line_number":1166,"context_line":"            external_ids\u003d{"},{"line_number":1167,"context_line":"                constants.OVN_LB_LR_REF_EXT_ID_KEY: \u0027neutron-router1\u0027},"},{"line_number":1168,"context_line":"            vips\u003d{\u0027192.168.1.50:80\u0027: \u0027192.168.1.100:80\u0027})"},{"line_number":1169,"context_line":"        self.assertTrue(self.event.match_fn(mock.Mock(), row, old))"},{"line_number":1170,"context_line":""},{"line_number":1171,"context_line":"    def test_match_fn_no_vips(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5eae520f_86536190","line":1168,"range":{"start_line":1168,"start_character":1,"end_line":1168,"end_character":57},"in_reply_to":"0ef1f581_86456113","updated":"2024-02-28 13:16:00.000000000","message":"Done","commit_id":"25d9eb03ca6879fdcda23a56b2d307c9d33290a6"}]}
