)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"5459ab5cb500c9d197f1bbcb50c9da61dec61b59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2eb92d4b_882e282c","updated":"2024-11-14 14:55:44.000000000","message":"I will be able to test out this in our hardware up-to-scale sandbox during the next 7 days - need to restore it\u0027s state first:)","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"509495fe1cc44b453b053fecf42f227ec1c9cce2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"30028da3_e0cf40d3","in_reply_to":"2b1b6799_539fb547","updated":"2024-11-20 18:27:28.000000000","message":"To add here.\n\nFIP moves to the destination with time. So likely with periodics.\n\nBut there\u0027s also a timeframe where FIP is announced from both nodes (or from none), as periodic are async in time. So it appens that it\u0027s added to the new destination before being withdrawn from origin.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a9f1f25a6058e5e2211fa401a6865005dffa75fa","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5a722017_cce32de1","in_reply_to":"2e4e0e76_29a85813","updated":"2024-11-20 17:11:48.000000000","message":"Do you have this Neutron change: https://review.opendev.org/c/openstack/neutron/+/931067 ?\n\nI should add Depends-On to the commit message ... sorry about that.\n\nThanks for looking at it!","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"daa84b2cff595292846d6001d88cfb9be6cf0af3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c7ba49c6_032f78e4","in_reply_to":"2eb92d4b_882e282c","updated":"2024-11-14 14:56:59.000000000","message":"Thanks a lot, that would be super helpful in case I missed something!","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"15f146087a7ea7df530e8acd53257d7632b20c36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"43d66e6d_ec66c461","in_reply_to":"30028da3_e0cf40d3","updated":"2024-11-27 14:01:10.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"c572e5de3d14cf537217dba361763148dbf0c732","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2b1b6799_539fb547","in_reply_to":"5a722017_cce32de1","updated":"2024-11-20 18:04:36.000000000","message":"Ok, yes, once I\u0027ve applied the Neutron patch things got way better.\n\nI can confirm that I get FIP announced from the net node where external port for the router is binded.\n\nAdding/removing FIP to the port gets propagated as well.\n\nBut I found a bug when failovering net node.\n\nWhen I stop ovn-controller (to trigger OVN moving router to a different node) FIP is being left on old location and is not moved together with router to the new destination.\n\nBut hosting-chassis is changed in OVN NB DB for the router port and router gateway is being moved properly.\n\nhttps://paste.openstack.org/show/bD8FdJ2Uq9A8ZHkZYtwO/\n\nSo my reason for -1 here...","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"87282735a594aa1669191487fbad7b944d689348","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2e4e0e76_29a85813","in_reply_to":"c7ba49c6_032f78e4","updated":"2024-11-20 17:09:10.000000000","message":"Sorry, I got slightly distracted by another thing before testing this patch (by https://review.opendev.org/c/openstack/ovn-bgp-agent/+/935801 to be specific).\n\nSo I\u0027m running 2024.1 right now in a test env. So I\u0027ve installed master ovn-bgp-agent with Neutron from 2024.1. I\u0027m not sure if that can contribute to what I see or not.\n\nBut I do NOT see FIPs being catched up on \"network\" nodes where FIP router reside by the agent, they are not added to bgp-nic and as a result - VM looses connectivity as soon as FIP is assigned to it\u0027s port.\n\nI didn\u0027t look deeper into why this is happening still so far.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"bd5a4ec90544be84ab1e80385dd9ce7873d839bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"2b3a3562_2f574eaf","updated":"2024-11-27 14:39:15.000000000","message":"I found a comment that was wrongly copy\u0026pasted, but that can be fixed in a follow up patch","commit_id":"89421f84beb9cbd11fef1d3d73445b79966688c9"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"15f146087a7ea7df530e8acd53257d7632b20c36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"92b0daaa_6fc6b5ad","updated":"2024-11-27 14:01:10.000000000","message":"sorry for the delay - wasn\u0027t able to test before.\n\nI\u0027ve tested the latest version of the patch, and issue with router failover seems to be fixed now.\n\nSo based on functionality at least, I don\u0027t see anything obvious so far. Code looks also good and reasonable to me.","commit_id":"89421f84beb9cbd11fef1d3d73445b79966688c9"}],"ovn_bgp_agent/constants.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":42,"context_line":"OVN_LB_VIP_FIP_EXT_ID_KEY \u003d \u0027neutron:vip_fip\u0027"},{"line_number":43,"context_line":"OVN_LB_VIP_PORT_EXT_ID_KEY \u003d \u0027neutron:vip_port_id\u0027"},{"line_number":44,"context_line":"OVN_LB_LR_REF_EXT_ID_KEY \u003d \u0027lr_ref\u0027"},{"line_number":45,"context_line":"OVN_FIP_DISTRIBUTED \u003d \u0027neutron:fip-distributed\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"OVN_LB_EXT_ID_ROUTER_KEY \u003d ["},{"line_number":48,"context_line":"    OVN_LB_LR_REF_EXT_ID_KEY,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fb57f349_8d19ca63","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":19},"updated":"2024-11-20 11:28:24.000000000","message":"Should this match with neutron.common.ovn.constants.OVN_FIP_DISTRIBUTED_KEY? In that case, I think we should start moving the Neutron OVN constants to n-lib","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d21e4734efa6c1145bdabcd7546a42ab988aeae","unresolved":false,"context_lines":[{"line_number":42,"context_line":"OVN_LB_VIP_FIP_EXT_ID_KEY \u003d \u0027neutron:vip_fip\u0027"},{"line_number":43,"context_line":"OVN_LB_VIP_PORT_EXT_ID_KEY \u003d \u0027neutron:vip_port_id\u0027"},{"line_number":44,"context_line":"OVN_LB_LR_REF_EXT_ID_KEY \u003d \u0027lr_ref\u0027"},{"line_number":45,"context_line":"OVN_FIP_DISTRIBUTED \u003d \u0027neutron:fip-distributed\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"OVN_LB_EXT_ID_ROUTER_KEY \u003d ["},{"line_number":48,"context_line":"    OVN_LB_LR_REF_EXT_ID_KEY,"}],"source_content_type":"text/x-python","patch_set":8,"id":"891c2de2_08721bdc","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":19},"in_reply_to":"297db288_e0f072a2","updated":"2024-11-20 22:50:07.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":42,"context_line":"OVN_LB_VIP_FIP_EXT_ID_KEY \u003d \u0027neutron:vip_fip\u0027"},{"line_number":43,"context_line":"OVN_LB_VIP_PORT_EXT_ID_KEY \u003d \u0027neutron:vip_port_id\u0027"},{"line_number":44,"context_line":"OVN_LB_LR_REF_EXT_ID_KEY \u003d \u0027lr_ref\u0027"},{"line_number":45,"context_line":"OVN_FIP_DISTRIBUTED \u003d \u0027neutron:fip-distributed\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"OVN_LB_EXT_ID_ROUTER_KEY \u003d ["},{"line_number":48,"context_line":"    OVN_LB_LR_REF_EXT_ID_KEY,"}],"source_content_type":"text/x-python","patch_set":8,"id":"297db288_e0f072a2","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":19},"in_reply_to":"fb57f349_8d19ca63","updated":"2024-11-20 13:53:57.000000000","message":"It is the same, isn\u0027t it? I agree with the consolidation, so far most of these constants are copy\u0026pasted. Perhaps we need to make some effort to refactor and move all the constants at once?\n\nHowever, I think that is out of the scope of this patch.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"}],"ovn_bgp_agent/drivers/openstack/nb_ovn_bgp_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self._post_start_event \u003d threading.Event()"},{"line_number":117,"context_line":"        self.nat_exposer \u003d NATExposer(self)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.__d_events \u003d {"},{"line_number":120,"context_line":"            True: ["},{"line_number":121,"context_line":"                watcher.NATMACAddedEvent(self),"},{"line_number":122,"context_line":"                watcher.LogicalSwitchPortFIPCreateEvent(self),"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba70adfc_5543b007","line":119,"range":{"start_line":119,"start_character":13,"end_line":119,"end_character":23},"updated":"2024-11-20 11:28:24.000000000","message":"Why are you using name mangling here?","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d21e4734efa6c1145bdabcd7546a42ab988aeae","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self._post_start_event \u003d threading.Event()"},{"line_number":117,"context_line":"        self.nat_exposer \u003d NATExposer(self)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.__d_events \u003d {"},{"line_number":120,"context_line":"            True: ["},{"line_number":121,"context_line":"                watcher.NATMACAddedEvent(self),"},{"line_number":122,"context_line":"                watcher.LogicalSwitchPortFIPCreateEvent(self),"}],"source_content_type":"text/x-python","patch_set":8,"id":"94d24a64_bbd5142e","line":119,"range":{"start_line":119,"start_character":13,"end_line":119,"end_character":23},"in_reply_to":"041f1196_178f748a","updated":"2024-11-20 22:50:07.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self._post_start_event \u003d threading.Event()"},{"line_number":117,"context_line":"        self.nat_exposer \u003d NATExposer(self)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.__d_events \u003d {"},{"line_number":120,"context_line":"            True: ["},{"line_number":121,"context_line":"                watcher.NATMACAddedEvent(self),"},{"line_number":122,"context_line":"                watcher.LogicalSwitchPortFIPCreateEvent(self),"}],"source_content_type":"text/x-python","patch_set":8,"id":"041f1196_178f748a","line":119,"range":{"start_line":119,"start_character":13,"end_line":119,"end_character":23},"in_reply_to":"ba70adfc_5543b007","updated":"2024-11-20 13:53:57.000000000","message":"It is encapsulation of a constant - it should not be accessed other than through the private `_get_additional_events` method. Is there a downside to having it?","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7c432465f372945e977d9073ae9d79bf891ba699","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                            \u0027Static_MAC_Binding\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def _validate_ovn_version(distributed, idl):"},{"line_number":54,"context_line":"    if not distributed and \u0027gateway_port\u0027 not in idl.tables[\u0027NAT\u0027].columns:"},{"line_number":55,"context_line":"        raise RuntimeError("},{"line_number":56,"context_line":"            \"Centralized routing requires gateway_port column in the \""}],"source_content_type":"text/x-python","patch_set":9,"id":"9324e7cc_80446b84","line":53,"range":{"start_line":53,"start_character":4,"end_line":53,"end_character":25},"updated":"2024-11-22 12:22:59.000000000","message":"+1","commit_id":"b27e6a66a485a3963c5e1679d71850ddb5d4935a"}],"ovn_bgp_agent/drivers/openstack/utils/nat.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":19,"context_line":"def get_gateway_lrp(nat):"},{"line_number":20,"context_line":"    try:"},{"line_number":21,"context_line":"        return nat.gateway_port[0]"},{"line_number":22,"context_line":"    except IndexError:"},{"line_number":23,"context_line":"        raise nb_exceptions.NATNotFound(\"Port %s has no NAT entry\" % nat.uuid)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"c6493da6_a894d29b","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":22},"updated":"2024-11-20 11:28:24.000000000","message":"The support for nat.gateway_port was added in [1]. You should also consider that this field doesn\u0027t exist, as we are doing in Neutron [2].\n\n[1]https://github.com/ovn-org/ovn/commit/2d942be7db1799f2778492331513ae2b5a556b92\n[2]https://github.com/openstack/neutron/blob/bed98cb701f70b5dd4fdbd1ab28b0ddf097e7e98/neutron/common/ovn/utils.py#L1357","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8ef6e453c08d025438d6a0ddf5ff21bcdff48414","unresolved":false,"context_lines":[{"line_number":19,"context_line":"def get_gateway_lrp(nat):"},{"line_number":20,"context_line":"    try:"},{"line_number":21,"context_line":"        return nat.gateway_port[0]"},{"line_number":22,"context_line":"    except IndexError:"},{"line_number":23,"context_line":"        raise nb_exceptions.NATNotFound(\"Port %s has no NAT entry\" % nat.uuid)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1d9f0745_af80facd","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":22},"in_reply_to":"61afd298_9ceee02a","updated":"2024-11-20 23:51:50.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":19,"context_line":"def get_gateway_lrp(nat):"},{"line_number":20,"context_line":"    try:"},{"line_number":21,"context_line":"        return nat.gateway_port[0]"},{"line_number":22,"context_line":"    except IndexError:"},{"line_number":23,"context_line":"        raise nb_exceptions.NATNotFound(\"Port %s has no NAT entry\" % nat.uuid)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"61afd298_9ceee02a","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":22},"in_reply_to":"c6493da6_a894d29b","updated":"2024-11-20 13:53:57.000000000","message":"Hmm, the `gateway_port` column is also used when we search for NATs by the LRP ports - https://review.opendev.org/c/openstack/ovn-bgp-agent/+/933930/8/ovn_bgp_agent/drivers/openstack/utils/ovn.py@589\n\nBasically this code won\u0027t work without the schema support. I\u0027m thinking if I should put a check when the agent initializes and if the column is missing and the distributed is set to False, then it would just bail out, and we should document the limitation.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"}],"ovn_bgp_agent/drivers/openstack/utils/ovn.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        nb_global_ext_ids \u003d self.db_get("},{"line_number":581,"context_line":"            \u0027NB_Global\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute(check_error\u003dTrue)"},{"line_number":582,"context_line":"        distributed \u003d nb_global_ext_ids.get("},{"line_number":583,"context_line":"            constants.OVN_FIP_DISTRIBUTED, \"True\")"},{"line_number":584,"context_line":"        return True if distributed \u003d\u003d \"True\" else False"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"b4275466_a7a59cf6","line":583,"range":{"start_line":583,"start_character":42,"end_line":583,"end_character":49},"updated":"2024-11-20 11:28:24.000000000","message":"Why True? The default value of \"enable_distributed_floating_ip\" is False","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"c572e5de3d14cf537217dba361763148dbf0c732","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        nb_global_ext_ids \u003d self.db_get("},{"line_number":581,"context_line":"            \u0027NB_Global\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute(check_error\u003dTrue)"},{"line_number":582,"context_line":"        distributed \u003d nb_global_ext_ids.get("},{"line_number":583,"context_line":"            constants.OVN_FIP_DISTRIBUTED, \"True\")"},{"line_number":584,"context_line":"        return True if distributed \u003d\u003d \"True\" else False"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa8f481_d8007143","line":583,"range":{"start_line":583,"start_character":42,"end_line":583,"end_character":49},"in_reply_to":"11be3148_bf015929","updated":"2024-11-20 18:04:36.000000000","message":"Ok, I\u0027ve applied 931067 in my env and I got the distributed flag in nbdb:\n\n```\n# ovn-nbctl --no-leader-only get NB_Global . external_ids\n{\"neutron:fip-distributed\"\u003dFalse, \"neutron:liveness_check_at\"\u003d\"2024-11-20 17:00:11.928011+00:00\"}\n#\n```\n\nSo I think this default doesn\u0027t matter much given that flag is always set.\n\nBut I agree with Rodolfo, that it\u0027s more logical to align defaults, not to raise confusion on plain ground.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"3213755ec8a2189be45d737b034c0da2a3eaecc2","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        nb_global_ext_ids \u003d self.db_get("},{"line_number":581,"context_line":"            \u0027NB_Global\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute(check_error\u003dTrue)"},{"line_number":582,"context_line":"        distributed \u003d nb_global_ext_ids.get("},{"line_number":583,"context_line":"            constants.OVN_FIP_DISTRIBUTED, \"True\")"},{"line_number":584,"context_line":"        return True if distributed \u003d\u003d \"True\" else False"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"474c3367_6e837448","line":583,"range":{"start_line":583,"start_character":42,"end_line":583,"end_character":49},"in_reply_to":"11be3148_bf015929","updated":"2024-11-20 17:26:22.000000000","message":"ah, right. you don\u0027t need to patch all Neutrons, you can just configure that option manually with nbctl command :)","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e9203097389cd7fa33c13a61e603eb418b3d5dbd","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        nb_global_ext_ids \u003d self.db_get("},{"line_number":581,"context_line":"            \u0027NB_Global\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute(check_error\u003dTrue)"},{"line_number":582,"context_line":"        distributed \u003d nb_global_ext_ids.get("},{"line_number":583,"context_line":"            constants.OVN_FIP_DISTRIBUTED, \"True\")"},{"line_number":584,"context_line":"        return True if distributed \u003d\u003d \"True\" else False"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"b19158b8_c4f387f0","line":583,"range":{"start_line":583,"start_character":42,"end_line":583,"end_character":49},"in_reply_to":"1aa8f481_d8007143","updated":"2024-11-22 13:17:39.000000000","message":"The problem I have with setting it to \"False\" is that if someone updates ovn-bgp-agent to this version and does not have the flag in OVN database then it would switch from distributed to centralized. It would be better to keep the behavior the same after the update.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"5713a8fe0c97bd5d37496e9a918bb8c2279e197a","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        nb_global_ext_ids \u003d self.db_get("},{"line_number":581,"context_line":"            \u0027NB_Global\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute(check_error\u003dTrue)"},{"line_number":582,"context_line":"        distributed \u003d nb_global_ext_ids.get("},{"line_number":583,"context_line":"            constants.OVN_FIP_DISTRIBUTED, \"True\")"},{"line_number":584,"context_line":"        return True if distributed \u003d\u003d \"True\" else False"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"11be3148_bf015929","line":583,"range":{"start_line":583,"start_character":42,"end_line":583,"end_character":49},"in_reply_to":"8a628956_e9b212fd","updated":"2024-11-20 17:24:57.000000000","message":"Aha, so that\u0027s why my usecase does not work. As I don\u0027t have https://review.opendev.org/c/openstack/neutron/+/931067 and thus - no distributed option.\n\nAs the reply is very minimalistic for me right now:\n```\n# ovn-nbctl --no-leader-only get NB_Global . external_ids\n{\"neutron:liveness_check_at\"\u003d\"2024-11-20 17:00:11.928011+00:00\"}\n#\n```\n\nand self.distributed end up being false.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        nb_global_ext_ids \u003d self.db_get("},{"line_number":581,"context_line":"            \u0027NB_Global\u0027, \u0027.\u0027, \u0027external_ids\u0027).execute(check_error\u003dTrue)"},{"line_number":582,"context_line":"        distributed \u003d nb_global_ext_ids.get("},{"line_number":583,"context_line":"            constants.OVN_FIP_DISTRIBUTED, \"True\")"},{"line_number":584,"context_line":"        return True if distributed \u003d\u003d \"True\" else False"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"8a628956_e9b212fd","line":583,"range":{"start_line":583,"start_character":42,"end_line":583,"end_character":49},"in_reply_to":"b4275466_a7a59cf6","updated":"2024-11-20 13:53:57.000000000","message":"This is for a case the agent is running with Neutron without https://review.opendev.org/c/openstack/neutron/+/931067 - the idea was that distributed routing worked before this patch that adds support the non-dvr case, so the distributed one should be assumed if the Neutron patch is missing.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"c195afb33f1edb728251f42f315752bc9ed2d2c0","unresolved":true,"context_lines":[{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"},{"line_number":587,"context_line":"        return self.db_find_rows("},{"line_number":588,"context_line":"            \u0027NAT\u0027,"},{"line_number":589,"context_line":"            (\u0027gateway_port\u0027, \u0027\u003d\u0027, lrp.uuid),"},{"line_number":590,"context_line":"            (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_DNAT_AND_SNAT)"},{"line_number":591,"context_line":"        ).execute(check_error\u003dTrue)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"0085bb5b_d22b5a1d","line":589,"range":{"start_line":589,"start_character":12,"end_line":589,"end_character":43},"updated":"2024-11-15 08:46:03.000000000","message":"so nat rules does not always have a gateway_port set. I\u0027m not really sure how/if it affects the bgp plugin, as these are cases when nothing should be actually announced through frr. But could be valid for `expose_tenant_networks` - not sure.\nAs that\u0027s the usecase is where the router is attached with external network to another geneve, so nothing to expose kinda.\n\nAs it can also kinda influence `_get_chassis` logic as such usecase won\u0027t have LRP binded to chassis - but LR will be instead: https://review.opendev.org/c/openstack/neutron/+/909194/36\n\n\nThat\u0027s the patch addressing neutron bug regarding that topic: https://review.opendev.org/c/openstack/neutron/+/931495","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ac149227b07e5c54a9d00c8375e7beee41cef3f5","unresolved":true,"context_lines":[{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"},{"line_number":587,"context_line":"        return self.db_find_rows("},{"line_number":588,"context_line":"            \u0027NAT\u0027,"},{"line_number":589,"context_line":"            (\u0027gateway_port\u0027, \u0027\u003d\u0027, lrp.uuid),"},{"line_number":590,"context_line":"            (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_DNAT_AND_SNAT)"},{"line_number":591,"context_line":"        ).execute(check_error\u003dTrue)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"4f34355b_984834dd","line":589,"range":{"start_line":589,"start_character":12,"end_line":589,"end_character":43},"in_reply_to":"0085bb5b_d22b5a1d","updated":"2024-11-19 16:14:32.000000000","message":"I think that would still fit, no? My understanding is that you\u0027re talking about geneve as an external network. In such case, we do not expose as the traffic needs to be tunneled. The NAT entry is not found and nothing is exposed. That seems correct.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"e279fd5b6c237b80c9444c6575b284695b4d1b1d","unresolved":false,"context_lines":[{"line_number":586,"context_line":"    def get_nats_by_lrp(self, lrp):"},{"line_number":587,"context_line":"        return self.db_find_rows("},{"line_number":588,"context_line":"            \u0027NAT\u0027,"},{"line_number":589,"context_line":"            (\u0027gateway_port\u0027, \u0027\u003d\u0027, lrp.uuid),"},{"line_number":590,"context_line":"            (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_DNAT_AND_SNAT)"},{"line_number":591,"context_line":"        ).execute(check_error\u003dTrue)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"418e69d3_6417faf2","line":589,"range":{"start_line":589,"start_character":12,"end_line":589,"end_character":43},"in_reply_to":"4f34355b_984834dd","updated":"2024-11-20 16:39:32.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"}],"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":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":28,"context_line":"        self.agent \u003d agent"},{"line_number":29,"context_line":"        super().__init__(events, table, condition)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_chassis(self, row, default_type\u003dconstants.OVN_VM_VIF_PORT_TYPE):"},{"line_number":32,"context_line":"        return driver_utils.get_port_chassis(row, self.agent.chassis,"},{"line_number":33,"context_line":"                                             default_port_type\u003ddefault_type)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"8d330ed1_f8ad18e0","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":20},"updated":"2024-11-20 11:28:24.000000000","message":"Isn\u0027t this method too specific for the base class ``Event``?","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":28,"context_line":"        self.agent \u003d agent"},{"line_number":29,"context_line":"        super().__init__(events, table, condition)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_chassis(self, row, default_type\u003dconstants.OVN_VM_VIF_PORT_TYPE):"},{"line_number":32,"context_line":"        return driver_utils.get_port_chassis(row, self.agent.chassis,"},{"line_number":33,"context_line":"                                             default_port_type\u003ddefault_type)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"b19aeb92_1a4a43b1","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":20},"in_reply_to":"8d330ed1_f8ad18e0","updated":"2024-11-20 13:53:57.000000000","message":"yes, I\u0027m pretty sure I moved it back to LSPChassisEvent at some point, maybe I forgot to push a latest patcheset? :-/","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d21e4734efa6c1145bdabcd7546a42ab988aeae","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.agent \u003d agent"},{"line_number":29,"context_line":"        super().__init__(events, table, condition)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_chassis(self, row, default_type\u003dconstants.OVN_VM_VIF_PORT_TYPE):"},{"line_number":32,"context_line":"        return driver_utils.get_port_chassis(row, self.agent.chassis,"},{"line_number":33,"context_line":"                                             default_port_type\u003ddefault_type)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"73d1621e_da907fea","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":20},"in_reply_to":"b19aeb92_1a4a43b1","updated":"2024-11-20 22:50:07.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"}],"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":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":938,"context_line":"                row.external_ip, row.external_mac[0], ls_name, lsp)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"class ExposeFIPOnCRLRP(base_watcher.FipOnCRLRPBaseEvent):"},{"line_number":942,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_CREATE,)"},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"    def run(self, event, row, old):"}],"source_content_type":"text/x-python","patch_set":8,"id":"959fbc53_6cf0fecb","line":941,"range":{"start_line":941,"start_character":6,"end_line":941,"end_character":22},"updated":"2024-11-20 11:28:24.000000000","message":"Same for the other events: can you add a description of what are they doing?","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d21e4734efa6c1145bdabcd7546a42ab988aeae","unresolved":false,"context_lines":[{"line_number":938,"context_line":"                row.external_ip, row.external_mac[0], ls_name, lsp)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"class ExposeFIPOnCRLRP(base_watcher.FipOnCRLRPBaseEvent):"},{"line_number":942,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_CREATE,)"},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"    def run(self, event, row, old):"}],"source_content_type":"text/x-python","patch_set":8,"id":"4b366825_5aa32ca6","line":941,"range":{"start_line":941,"start_character":6,"end_line":941,"end_character":22},"in_reply_to":"784eba94_9579fb15","updated":"2024-11-20 22:50:07.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":938,"context_line":"                row.external_ip, row.external_mac[0], ls_name, lsp)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"class ExposeFIPOnCRLRP(base_watcher.FipOnCRLRPBaseEvent):"},{"line_number":942,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_CREATE,)"},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"    def run(self, event, row, old):"}],"source_content_type":"text/x-python","patch_set":8,"id":"784eba94_9579fb15","line":941,"range":{"start_line":941,"start_character":6,"end_line":941,"end_character":22},"in_reply_to":"959fbc53_6cf0fecb","updated":"2024-11-20 13:53:57.000000000","message":"Will do.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":950,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_DELETE,)"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def run(self, event, row, old):"},{"line_number":953,"context_line":"        self.agent.nat_exposer.withdraw_fip_from_nat(row)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"class CrLrpChassisChangeBaseEvent(base_watcher.LRPChassisEvent):"}],"source_content_type":"text/x-python","patch_set":8,"id":"050e2db0_b76c0c38","line":953,"range":{"start_line":953,"start_character":31,"end_line":953,"end_character":52},"updated":"2024-11-20 11:28:24.000000000","message":"Where is withdraw_fip_from_nat\u003d_withdraw_nat_distributed implemented?","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"92d49158376b08fe43c3e1fa9c3520efad7a4b2d","unresolved":true,"context_lines":[{"line_number":950,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_DELETE,)"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def run(self, event, row, old):"},{"line_number":953,"context_line":"        self.agent.nat_exposer.withdraw_fip_from_nat(row)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"class CrLrpChassisChangeBaseEvent(base_watcher.LRPChassisEvent):"}],"source_content_type":"text/x-python","patch_set":8,"id":"2297bb88_127b8d22","line":953,"range":{"start_line":953,"start_character":31,"end_line":953,"end_character":52},"in_reply_to":"050e2db0_b76c0c38","updated":"2024-11-20 11:32:03.000000000","message":"Ok, right now NATExposer (and these events) should only be called when FIP is centralized.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":950,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_DELETE,)"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def run(self, event, row, old):"},{"line_number":953,"context_line":"        self.agent.nat_exposer.withdraw_fip_from_nat(row)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"class CrLrpChassisChangeBaseEvent(base_watcher.LRPChassisEvent):"}],"source_content_type":"text/x-python","patch_set":8,"id":"2d61f9a8_889cf4f0","line":953,"range":{"start_line":953,"start_character":31,"end_line":953,"end_character":52},"in_reply_to":"2297bb88_127b8d22","updated":"2024-11-20 13:53:57.000000000","message":"Yes, I have a lot of ideas on code refactoring. We need to break the agent driver down into small manageable pieces. Basically right now we have just one huge class that does all the logic. The DVR part doesn\u0027t call the `nat_exposer` at all right now and this event is registered into the event handler only if DVR is set to False.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d21e4734efa6c1145bdabcd7546a42ab988aeae","unresolved":false,"context_lines":[{"line_number":950,"context_line":"    events \u003d (base_watcher.DnatSnatBaseEvent.ROW_DELETE,)"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def run(self, event, row, old):"},{"line_number":953,"context_line":"        self.agent.nat_exposer.withdraw_fip_from_nat(row)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"class CrLrpChassisChangeBaseEvent(base_watcher.LRPChassisEvent):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5dd79c40_3a1141c9","line":953,"range":{"start_line":953,"start_character":31,"end_line":953,"end_character":52},"in_reply_to":"2d61f9a8_889cf4f0","updated":"2024-11-20 22:50:07.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8bf47c37de1aa78038a7e1fe48613362a9dc8757","unresolved":true,"context_lines":[{"line_number":1024,"context_line":"        elif row.external_ids.get(constants.OVN_FIP_DISTRIBUTED) \u003d\u003d \"False\":"},{"line_number":1025,"context_line":"            self.agent.distributed \u003d False"},{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            # Default to True"},{"line_number":1028,"context_line":"            self.agent.distributed \u003d True"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        self.agent.sync()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3804a2fb_f732f518","line":1027,"range":{"start_line":1027,"start_character":12,"end_line":1027,"end_character":29},"updated":"2024-11-20 11:28:24.000000000","message":"Why? The default value for \"enable_distributed_floating_ip\" is False.","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d21e4734efa6c1145bdabcd7546a42ab988aeae","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        elif row.external_ids.get(constants.OVN_FIP_DISTRIBUTED) \u003d\u003d \"False\":"},{"line_number":1025,"context_line":"            self.agent.distributed \u003d False"},{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            # Default to True"},{"line_number":1028,"context_line":"            self.agent.distributed \u003d True"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        self.agent.sync()"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a4bb874_879b33c6","line":1027,"range":{"start_line":1027,"start_character":12,"end_line":1027,"end_character":29},"in_reply_to":"1f856796_4328fe26","updated":"2024-11-20 22:50:07.000000000","message":"Done","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4281a0e85a4497566ff5fe833348ee0fc2f48f36","unresolved":true,"context_lines":[{"line_number":1024,"context_line":"        elif row.external_ids.get(constants.OVN_FIP_DISTRIBUTED) \u003d\u003d \"False\":"},{"line_number":1025,"context_line":"            self.agent.distributed \u003d False"},{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            # Default to True"},{"line_number":1028,"context_line":"            self.agent.distributed \u003d True"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        self.agent.sync()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f856796_4328fe26","line":1027,"range":{"start_line":1027,"start_character":12,"end_line":1027,"end_character":29},"in_reply_to":"3804a2fb_f732f518","updated":"2024-11-20 13:53:57.000000000","message":"Replied at https://review.opendev.org/c/openstack/ovn-bgp-agent/+/933930/8/ovn_bgp_agent/drivers/openstack/utils/ovn.py#583","commit_id":"c29af46d52b439127d8586301e895dc942212f56"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7c432465f372945e977d9073ae9d79bf891ba699","unresolved":false,"context_lines":[{"line_number":939,"context_line":""},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"class ExposeFIPOnCRLRP(base_watcher.FipOnCRLRPBaseEvent):"},{"line_number":942,"context_line":"    \"\"\"Expose floating IP on the gateway chassis hosting the gateway port."},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"    This event happens when NAT entry is created. It exposes the floating IP on"},{"line_number":945,"context_line":"    the gateway chassis hosting the gateway router."}],"source_content_type":"text/x-python","patch_set":9,"id":"e834db3e_1b5d2f0d","line":942,"range":{"start_line":942,"start_character":4,"end_line":942,"end_character":74},"updated":"2024-11-22 12:22:59.000000000","message":"+1 for all the class docstrings","commit_id":"b27e6a66a485a3963c5e1679d71850ddb5d4935a"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"bd5a4ec90544be84ab1e80385dd9ce7873d839bc","unresolved":true,"context_lines":[{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"class CrLrpChassisChangeWithdrawEvent(CrLrpChassisChangeBaseEvent):"},{"line_number":1013,"context_line":"    \"\"\"A LRP event to expose floating IPs on centralized node."},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    Expose all floating IPs hosted by a router with this gateway port hosted on"},{"line_number":1016,"context_line":"    this chassis. It matches in case of gateway port changes its hosting"}],"source_content_type":"text/x-python","patch_set":10,"id":"ae1e203d_273d9a69","line":1013,"range":{"start_line":1013,"start_character":22,"end_line":1013,"end_character":28},"updated":"2024-11-27 14:39:15.000000000","message":"s/expose/withdraw","commit_id":"89421f84beb9cbd11fef1d3d73445b79966688c9"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"bd5a4ec90544be84ab1e80385dd9ce7873d839bc","unresolved":true,"context_lines":[{"line_number":1012,"context_line":"class CrLrpChassisChangeWithdrawEvent(CrLrpChassisChangeBaseEvent):"},{"line_number":1013,"context_line":"    \"\"\"A LRP event to expose floating IPs on centralized node."},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    Expose all floating IPs hosted by a router with this gateway port hosted on"},{"line_number":1016,"context_line":"    this chassis. It matches in case of gateway port changes its hosting"},{"line_number":1017,"context_line":"    chassis to this chassis."},{"line_number":1018,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"389f9687_fba5774f","line":1015,"range":{"start_line":1015,"start_character":4,"end_line":1015,"end_character":10},"updated":"2024-11-27 14:39:15.000000000","message":"ditto","commit_id":"89421f84beb9cbd11fef1d3d73445b79966688c9"}]}
