)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"af3fb9b3e3dcd3a76361ecc081c4fba7e150ca84","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for configuring a local (in-node) OVN cluster"},{"line_number":10,"context_line":"to do the actions that were being done by the kernel networking."},{"line_number":11,"context_line":"This way, things like ovn-dpdk or HWOL could be supported."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ieff19d88a22d7267bd58f8d1d4ecbcdc668c6bfb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ea344ff5_453de447","line":11,"range":{"start_line":11,"start_character":22,"end_line":11,"end_character":25},"updated":"2023-05-08 14:40:44.000000000","message":"ovs","commit_id":"631a6ff47a5a3483466de799d2a033c71ca6d118"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"fa82b39b9df5744d56ac6d3e1fcc1c2ac68358c0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for configuring a local (in-node) OVN cluster"},{"line_number":10,"context_line":"to do the actions that were being done by the kernel networking."},{"line_number":11,"context_line":"This way, things like ovn-dpdk or HWOL could be supported."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ieff19d88a22d7267bd58f8d1d4ecbcdc668c6bfb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5d195545_a21804e5","line":11,"range":{"start_line":11,"start_character":22,"end_line":11,"end_character":25},"in_reply_to":"ea344ff5_453de447","updated":"2023-08-29 10:23:05.000000000","message":"Done","commit_id":"631a6ff47a5a3483466de799d2a033c71ca6d118"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"1a24f359fba8f7ad9a322e59df82e03b05871430","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"452b9500_6439b761","updated":"2023-05-03 08:04:42.000000000","message":"This is just some work in progress effort, very WIP","commit_id":"599b8f0b7dff10625e465e74e3ea5ff782cc8fe4"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"71016716_067e4f41","updated":"2023-10-13 14:16:36.000000000","message":"Sorry for the time it took, I still wrapping my head around this change but here is a first review.\n\nThanks very much for working on this Luis! Overall this is a great patch","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"3533beb8_fbefaa5e","in_reply_to":"71016716_067e4f41","updated":"2023-10-17 07:28:36.000000000","message":"thanks for taking a look. This is a complex one.","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"72f71b055ba43a0e7f055729769449e3ce311356","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"24240046_1a61d2df","updated":"2023-10-23 08:11:19.000000000","message":"Investigating one issue","commit_id":"c3ef7e53d2d61d5e67748ce5188327cb49d5f1df"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"a6e9430f46fbc5d132e75e638128f6ffaa151334","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"59336eb9_b1fc88be","updated":"2023-11-13 15:12:30.000000000","message":"Perhaps listing the current limitations in the commit message is good enough for now until you address them","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"a63e6edcaf21eeafb39c739ff215ef865185c1cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"2a213dc2_934fd93d","updated":"2023-11-10 12:22:10.000000000","message":"Tested it and it works fine!\nWe\u0027ll need follow up patches to address the limitations that you mention but it looks great! Thanks Luis","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"2b9f10e0_d434ae7e","updated":"2023-11-14 14:20:26.000000000","message":"Thanks Luis, it LGTM!\n\nNot pushing +A just in case we want to discuss the name of the configuration option, because these are hard to change later. IMHO, I\u0027m OK with \"ovn\" since I do not have a better name in mind but, if u think something else is better I recommend we change it before merging this.\n\nOther than that, feel free to +A this patch","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"3a9dccd67ec41a107799856653ad5bf82e13a504","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"8f534422_42434a1b","updated":"2023-11-08 14:43:39.000000000","message":"one thing I noticed while testing this is that we\u0027d lose the fault tolerance now as we\u0027re not enabling BFD from the OVN router to the nexthops.\n\nThis is supported in OVN: https://bugzilla.redhat.com/show_bug.cgi?id\u003d1847570\n\nAnd I believe we should create the ECMP routes like:\novn-nbctl --policy\u003dsrc-ip --ecmp lr-route-add bgp_router 10.0.0.6/32 1.1.1.3 bfd","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"13ba016175bb9c6a0e2661e3493b7b0176431c70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"16074b29_7de69479","in_reply_to":"4da02a8f_234240c5","updated":"2023-11-08 15:10:01.000000000","message":"this is kind of independent of this patch. I see it as a follow up as you can deploy with the extra ovn-cluster without ECMP support and then this is not needed. To keep this from getting even bigger, I would like to add the BFD support in a follow up (same as IPv6 support)","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"cb949b69edb1cdd5c3c99203fa9897c0ebd5271f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"4da02a8f_234240c5","in_reply_to":"8f534422_42434a1b","updated":"2023-11-08 14:55:16.000000000","message":"ah the \u0027bfd\u0027 part is actually a BFD uuid:\n\n\t\tuuid\u003d$(ovn-nbctl create bfd logical_port\u003drouter1-public dst_ip\u003d172.16.1.50 min_tx\u003d250 min_rx\u003d250 detect_mult\u003d10)\n\t\tuuid1\u003d$(ovn-nbctl create bfd logical_port\u003drouter1-public dst_ip\u003d\"2002\\:\\:50\" min_tx\u003d250 min_rx\u003d250 detect_mult\u003d10)\n\t\tuuid2\u003d$(ovn-nbctl create bfd logical_port\u003drouter1-public dst_ip\u003d\"2002\\:\\:51\" min_tx\u003d250 min_rx\u003d250 detect_mult\u003d10)\n\t\tuuid3\u003d$(ovn-nbctl create bfd logical_port\u003drouter1-public dst_ip\u003d172.16.1.51 min_tx\u003d250 min_rx\u003d250 detect_mult\u003d10)\n\n                ovn-nbctl  --ecmp lr-route-add router1 192.168.100.0/24 172.16.1.50\n                ovn-nbctl --bfd\u003d$uuid3 --ecmp lr-route-add router1 192.168.100.0/24 172.16.1.51\n                ovn-nbctl  --ecmp lr-route-add router1 2003::/24 2002::50\n                ovn-nbctl --bfd\u003d$uuid2 --ecmp lr-route-add router1 2003::/24 2002::51\n                uid\u003d$(ovn-nbctl --bare --columns _uuid find logical_router_static_route nexthop\u003d172.16.1.50)\n                uid1\u003d$(ovn-nbctl --bare --columns _uuid find logical_router_static_route nexthop\u003d\"2002\\:\\:50\")\n                ovn-nbctl set logical_router_static_route $route_uuid bfd\u003d$uuid\n                ovn-nbctl set logical_router_static_route $route_uuid1 bfd\u003d$uuid1","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"}],"ovn_bgp_agent/config.py":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0da3b83ae9fdc46979d78909ed125c316081d07d","unresolved":true,"context_lines":[{"line_number":183,"context_line":"\"\"\")),"},{"line_number":184,"context_line":"]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"ovn_opts \u003d ["},{"line_number":187,"context_line":"    cfg.StrOpt(\u0027ovn_nb_connection\u0027,"},{"line_number":188,"context_line":"               default\u003d\u0027unix:/var/run/ovn/ovnnb_db.sock\u0027,"},{"line_number":189,"context_line":"               help\u003d\u0027The connection string for the OVN_Northbound OVSDB.\\n\u0027"},{"line_number":190,"context_line":"                    \u0027Use tcp:IP:PORT for TCP connection.\\n\u0027"},{"line_number":191,"context_line":"                    \u0027Use unix:FILE for unix domain socket connection.\u0027),"},{"line_number":192,"context_line":"    cfg.ListOpt(\u0027external_nics\u0027,"},{"line_number":193,"context_line":"                default\u003d[],"},{"line_number":194,"context_line":"                help\u003d\u0027List of NICS that the local OVN cluster needs to be \u0027"},{"line_number":195,"context_line":"                     \u0027connected to for the external connectivity.\u0027),"},{"line_number":196,"context_line":"    cfg.ListOpt(\u0027peer_ips\u0027,"},{"line_number":197,"context_line":"                default\u003d[],"},{"line_number":198,"context_line":"                help\u003d\u0027List of peer IPs used for redirecting the outgoing \u0027"},{"line_number":199,"context_line":"                     \u0027traffic (ECMP supported).\u0027),"},{"line_number":200,"context_line":"    cfg.ListOpt(\u0027provider_networks_pool_prefixes\u0027,"},{"line_number":201,"context_line":"                default\u003d[\u0027192.168.0.0/16\u0027],"},{"line_number":202,"context_line":"                help\u003d\u0027List of prefixes for provider networks\u0027),"},{"line_number":203,"context_line":"]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"CONF \u003d cfg.CONF"},{"line_number":206,"context_line":"EXTRA_LOG_LEVEL_DEFAULTS \u003d ["},{"line_number":207,"context_line":"    \u0027oslo.privsep.daemon\u003dINFO\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"420f926a_b5011f61","line":204,"range":{"start_line":186,"start_character":0,"end_line":204,"end_character":0},"updated":"2023-11-13 15:20:27.000000000","message":"These options are for the local OVN cluster. It\u0027s a bit confusing to me... perhaps even the section \u0027ovn\u0027 is not really clear that it means a separate OVN cluster","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":true,"context_lines":[{"line_number":183,"context_line":"\"\"\")),"},{"line_number":184,"context_line":"]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"ovn_opts \u003d ["},{"line_number":187,"context_line":"    cfg.StrOpt(\u0027ovn_nb_connection\u0027,"},{"line_number":188,"context_line":"               default\u003d\u0027unix:/var/run/ovn/ovnnb_db.sock\u0027,"},{"line_number":189,"context_line":"               help\u003d\u0027The connection string for the OVN_Northbound OVSDB.\\n\u0027"},{"line_number":190,"context_line":"                    \u0027Use tcp:IP:PORT for TCP connection.\\n\u0027"},{"line_number":191,"context_line":"                    \u0027Use unix:FILE for unix domain socket connection.\u0027),"},{"line_number":192,"context_line":"    cfg.ListOpt(\u0027external_nics\u0027,"},{"line_number":193,"context_line":"                default\u003d[],"},{"line_number":194,"context_line":"                help\u003d\u0027List of NICS that the local OVN cluster needs to be \u0027"},{"line_number":195,"context_line":"                     \u0027connected to for the external connectivity.\u0027),"},{"line_number":196,"context_line":"    cfg.ListOpt(\u0027peer_ips\u0027,"},{"line_number":197,"context_line":"                default\u003d[],"},{"line_number":198,"context_line":"                help\u003d\u0027List of peer IPs used for redirecting the outgoing \u0027"},{"line_number":199,"context_line":"                     \u0027traffic (ECMP supported).\u0027),"},{"line_number":200,"context_line":"    cfg.ListOpt(\u0027provider_networks_pool_prefixes\u0027,"},{"line_number":201,"context_line":"                default\u003d[\u0027192.168.0.0/16\u0027],"},{"line_number":202,"context_line":"                help\u003d\u0027List of prefixes for provider networks\u0027),"},{"line_number":203,"context_line":"]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"CONF \u003d cfg.CONF"},{"line_number":206,"context_line":"EXTRA_LOG_LEVEL_DEFAULTS \u003d ["},{"line_number":207,"context_line":"    \u0027oslo.privsep.daemon\u003dINFO\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"90d78ff0_09fa6335","line":204,"range":{"start_line":186,"start_character":0,"end_line":204,"end_character":0},"in_reply_to":"420f926a_b5011f61","updated":"2023-11-14 14:20:26.000000000","message":"I tend to agree but names are hard. \"OVN\" is not very clear that this is for a separated cluster but what else we can call it ? Maybe \"local-ovn\" ?\n\nI hope documentation will clarify things better.","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0f4965d76fab990b9540c80a58c9be78acaa151e","unresolved":false,"context_lines":[{"line_number":183,"context_line":"\"\"\")),"},{"line_number":184,"context_line":"]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"ovn_opts \u003d ["},{"line_number":187,"context_line":"    cfg.StrOpt(\u0027ovn_nb_connection\u0027,"},{"line_number":188,"context_line":"               default\u003d\u0027unix:/var/run/ovn/ovnnb_db.sock\u0027,"},{"line_number":189,"context_line":"               help\u003d\u0027The connection string for the OVN_Northbound OVSDB.\\n\u0027"},{"line_number":190,"context_line":"                    \u0027Use tcp:IP:PORT for TCP connection.\\n\u0027"},{"line_number":191,"context_line":"                    \u0027Use unix:FILE for unix domain socket connection.\u0027),"},{"line_number":192,"context_line":"    cfg.ListOpt(\u0027external_nics\u0027,"},{"line_number":193,"context_line":"                default\u003d[],"},{"line_number":194,"context_line":"                help\u003d\u0027List of NICS that the local OVN cluster needs to be \u0027"},{"line_number":195,"context_line":"                     \u0027connected to for the external connectivity.\u0027),"},{"line_number":196,"context_line":"    cfg.ListOpt(\u0027peer_ips\u0027,"},{"line_number":197,"context_line":"                default\u003d[],"},{"line_number":198,"context_line":"                help\u003d\u0027List of peer IPs used for redirecting the outgoing \u0027"},{"line_number":199,"context_line":"                     \u0027traffic (ECMP supported).\u0027),"},{"line_number":200,"context_line":"    cfg.ListOpt(\u0027provider_networks_pool_prefixes\u0027,"},{"line_number":201,"context_line":"                default\u003d[\u0027192.168.0.0/16\u0027],"},{"line_number":202,"context_line":"                help\u003d\u0027List of prefixes for provider networks\u0027),"},{"line_number":203,"context_line":"]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"CONF \u003d cfg.CONF"},{"line_number":206,"context_line":"EXTRA_LOG_LEVEL_DEFAULTS \u003d ["},{"line_number":207,"context_line":"    \u0027oslo.privsep.daemon\u003dINFO\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"d546f624_71313084","line":204,"range":{"start_line":186,"start_character":0,"end_line":204,"end_character":0},"in_reply_to":"90d78ff0_09fa6335","updated":"2023-11-14 14:47:17.000000000","message":"Done","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"}],"ovn_bgp_agent/drivers/openstack/utils/ovn.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":254,"context_line":"            lrp.addvalue(\u0027networks\u0027, network)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"# FIXME(ltomasbo): This can be removed once ovsdbapp version is \u003e\u003d1.13.0"},{"line_number":258,"context_line":"class LrPolicyAddCommand(command.AddCommand):"},{"line_number":259,"context_line":"    table_name \u003d \u0027Logical_Router_Policy\u0027"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"d8be2964_9a3695da","line":257,"updated":"2023-10-13 14:16:36.000000000","message":"Should we bump the ovsdbapp version for this ? 1.13.0 was released ~2 years ago.\n\n\nhttps://pypi.org/project/ovsdbapp/1.13.0/","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            lrp.addvalue(\u0027networks\u0027, network)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"# FIXME(ltomasbo): This can be removed once ovsdbapp version is \u003e\u003d1.13.0"},{"line_number":258,"context_line":"class LrPolicyAddCommand(command.AddCommand):"},{"line_number":259,"context_line":"    table_name \u003d \u0027Logical_Router_Policy\u0027"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"de10a7c3_257aaebe","line":257,"in_reply_to":"d8be2964_9a3695da","updated":"2023-10-17 07:28:36.000000000","message":"Right, I also removed the ones with 1.14.0","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":301,"context_line":"        self.result \u003d policy.uuid"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"class LrRouteAddCommand(command.BaseCommand):"},{"line_number":305,"context_line":"    def __init__(self, api, router, prefix, nexthop, port\u003dNone,"},{"line_number":306,"context_line":"                 policy\u003d\u0027dst-ip\u0027, ecmp\u003dFalse, may_exist\u003dFalse):"},{"line_number":307,"context_line":"        prefix \u003d str(netaddr.IPNetwork(prefix))"}],"source_content_type":"text/x-python","patch_set":28,"id":"2e2a8973_3290c57d","line":304,"updated":"2023-10-13 14:16:36.000000000","message":"Should we make a note to remove it when it\u0027s added to ovsdbapp ?\n\nIdeally, all these commands should eventually go to ovsdbapp if they are not there already or if they need to be enhanced to support new stuff.","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":true,"context_lines":[{"line_number":301,"context_line":"        self.result \u003d policy.uuid"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"class LrRouteAddCommand(command.BaseCommand):"},{"line_number":305,"context_line":"    def __init__(self, api, router, prefix, nexthop, port\u003dNone,"},{"line_number":306,"context_line":"                 policy\u003d\u0027dst-ip\u0027, ecmp\u003dFalse, may_exist\u003dFalse):"},{"line_number":307,"context_line":"        prefix \u003d str(netaddr.IPNetwork(prefix))"}],"source_content_type":"text/x-python","patch_set":28,"id":"ec9497a0_b7cf51bc","line":304,"in_reply_to":"2e2a8973_3290c57d","updated":"2023-10-17 07:28:36.000000000","message":"I agree... I\u0027ll send PRs for ovsdbapp to add them once this is in its final form","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        self.result \u003d policy.uuid"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"class LrRouteAddCommand(command.BaseCommand):"},{"line_number":305,"context_line":"    def __init__(self, api, router, prefix, nexthop, port\u003dNone,"},{"line_number":306,"context_line":"                 policy\u003d\u0027dst-ip\u0027, ecmp\u003dFalse, may_exist\u003dFalse):"},{"line_number":307,"context_line":"        prefix \u003d str(netaddr.IPNetwork(prefix))"}],"source_content_type":"text/x-python","patch_set":28,"id":"fd8c572c_a9836868","line":304,"in_reply_to":"ec9497a0_b7cf51bc","updated":"2023-11-14 14:20:26.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":342,"context_line":"        self.result \u003d route.uuid"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"class LrRouteDelCommand(command.BaseCommand):"},{"line_number":346,"context_line":"    def __init__(self, api, router,"},{"line_number":347,"context_line":"                 prefix\u003dNone, nexthop\u003dNone, if_exists\u003dFalse):"},{"line_number":348,"context_line":"        if prefix is not None:"}],"source_content_type":"text/x-python","patch_set":28,"id":"60affc95_1c9fc401","line":345,"updated":"2023-10-13 14:16:36.000000000","message":"Ditto any plans to have this in ovsdbapp eventually ? Perhaps a note to remove it in the future","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        self.result \u003d route.uuid"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"class LrRouteDelCommand(command.BaseCommand):"},{"line_number":346,"context_line":"    def __init__(self, api, router,"},{"line_number":347,"context_line":"                 prefix\u003dNone, nexthop\u003dNone, if_exists\u003dFalse):"},{"line_number":348,"context_line":"        if prefix is not None:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a1d29af_97ab37de","line":345,"in_reply_to":"60affc95_1c9fc401","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":383,"context_line":"        )"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"class StaticMACBindingAddCommand(command.AddCommand):"},{"line_number":387,"context_line":"    table_name \u003d \u0027Static_MAC_Binding\u0027"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def __init__(self, api, port, ip, mac, override_dynamic_mac\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":28,"id":"45c7750e_f5c636a5","line":386,"updated":"2023-10-13 14:16:36.000000000","message":"Ditto any plans to have this in ovsdbapp eventually ? Perhaps a note to remove it in the future","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        )"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"class StaticMACBindingAddCommand(command.AddCommand):"},{"line_number":387,"context_line":"    table_name \u003d \u0027Static_MAC_Binding\u0027"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def __init__(self, api, port, ip, mac, override_dynamic_mac\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":28,"id":"b35f8575_6628de85","line":386,"in_reply_to":"45c7750e_f5c636a5","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":433,"context_line":"        self.result \u003d binding.uuid"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"class StaticMACBindingDelCommand(command.BaseCommand):"},{"line_number":437,"context_line":"    table_name \u003d \u0027Static_MAC_Binding\u0027"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def __init__(self, api, port, ip, if_exists\u003dFalse, **columns):"}],"source_content_type":"text/x-python","patch_set":28,"id":"da3451a0_83be8d85","line":436,"updated":"2023-10-13 14:16:36.000000000","message":"Ditto any plans to have this in ovsdbapp eventually ? Perhaps a note to remove it in the future","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":433,"context_line":"        self.result \u003d binding.uuid"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"class StaticMACBindingDelCommand(command.BaseCommand):"},{"line_number":437,"context_line":"    table_name \u003d \u0027Static_MAC_Binding\u0027"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def __init__(self, api, port, ip, if_exists\u003dFalse, **columns):"}],"source_content_type":"text/x-python","patch_set":28,"id":"46b7adb1_2c97f085","line":436,"in_reply_to":"da3451a0_83be8d85","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"}],"ovn_bgp_agent/drivers/openstack/utils/wire.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":68,"context_line":"    return ovn_bridge_mappings, flows_info"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _ensure_base_wiring_config_ovn(ovs_idl, ovn_idl):"},{"line_number":72,"context_line":"    # OpenStack Egress part"},{"line_number":73,"context_line":"    # Get bridge mappings: xxxx:br-ex,yyyy:br-ex2"},{"line_number":74,"context_line":"    bridge_mappings \u003d ovs_idl.get_ovn_bridge_mappings()"}],"source_content_type":"text/x-python","patch_set":28,"id":"72cd8afa_e58c0f62","line":71,"updated":"2023-10-13 14:16:36.000000000","message":"Some docstring explaining the gist of what it does would be good here since it\u0027s a long function","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    return ovn_bridge_mappings, flows_info"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _ensure_base_wiring_config_ovn(ovs_idl, ovn_idl):"},{"line_number":72,"context_line":"    # OpenStack Egress part"},{"line_number":73,"context_line":"    # Get bridge mappings: xxxx:br-ex,yyyy:br-ex2"},{"line_number":74,"context_line":"    bridge_mappings \u003d ovs_idl.get_ovn_bridge_mappings()"}],"source_content_type":"text/x-python","patch_set":28,"id":"1c2d0dbd_cb070c8c","line":71,"in_reply_to":"72cd8afa_e58c0f62","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":93,"context_line":"    # LR"},{"line_number":94,"context_line":"    _ensure_ovn_router(ovn_idl)"},{"line_number":95,"context_line":"    _ensure_ovn_policies(ovn_idl, CONF.ovn.peer_ips)"},{"line_number":96,"context_line":"    _ensure_ovn_routes(ovn_idl, CONF.ovn.peer_ips)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # LS"},{"line_number":99,"context_line":"    bgp_bridge_mappings \u003d ovs_idl.get_ovn_bridge_mappings("}],"source_content_type":"text/x-python","patch_set":28,"id":"443d460f_03d9948e","line":96,"updated":"2023-10-13 14:16:36.000000000","message":"These are all being executed in different ovsdb transactions, should we try to consolidate them all to avoid leaving leftovers if something one command fails for whatever reason ?","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    # LR"},{"line_number":94,"context_line":"    _ensure_ovn_router(ovn_idl)"},{"line_number":95,"context_line":"    _ensure_ovn_policies(ovn_idl, CONF.ovn.peer_ips)"},{"line_number":96,"context_line":"    _ensure_ovn_routes(ovn_idl, CONF.ovn.peer_ips)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # LS"},{"line_number":99,"context_line":"    bgp_bridge_mappings \u003d ovs_idl.get_ovn_bridge_mappings("}],"source_content_type":"text/x-python","patch_set":28,"id":"d4e78420_4f2f1719","line":96,"in_reply_to":"443d460f_03d9948e","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":98,"context_line":"    # LS"},{"line_number":99,"context_line":"    bgp_bridge_mappings \u003d ovs_idl.get_ovn_bridge_mappings("},{"line_number":100,"context_line":"        bridge\u003dconstants.OVN_CLUSTER_BRIDGE)"},{"line_number":101,"context_line":"    for bridge_index, bridge_mapping in enumerate(bgp_bridge_mappings, 1):"},{"line_number":102,"context_line":"        network, bridge \u003d helpers.parse_bridge_mapping(bridge_mapping)"},{"line_number":103,"context_line":"        if not network:"},{"line_number":104,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":28,"id":"c8144f50_c367c849","line":101,"updated":"2023-10-13 14:16:36.000000000","message":"bridge_index not used ?","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    # LS"},{"line_number":99,"context_line":"    bgp_bridge_mappings \u003d ovs_idl.get_ovn_bridge_mappings("},{"line_number":100,"context_line":"        bridge\u003dconstants.OVN_CLUSTER_BRIDGE)"},{"line_number":101,"context_line":"    for bridge_index, bridge_mapping in enumerate(bgp_bridge_mappings, 1):"},{"line_number":102,"context_line":"        network, bridge \u003d helpers.parse_bridge_mapping(bridge_mapping)"},{"line_number":103,"context_line":"        if not network:"},{"line_number":104,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":28,"id":"79e28565_0a210b4f","line":101,"in_reply_to":"c8144f50_c367c849","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":137,"context_line":"    _execute_commands(ovn_idl, cmds)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _execute_commands(idl, cmds):"},{"line_number":141,"context_line":"    with idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":142,"context_line":"        for command in cmds:"},{"line_number":143,"context_line":"            txn.add(command)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"def _ensure_ovn_network_link(ovn_idl, switch_name, direction,"}],"source_content_type":"text/x-python","patch_set":28,"id":"d6509943_93fc9b5b","line":143,"range":{"start_line":140,"start_character":0,"end_line":143,"end_character":28},"updated":"2023-10-13 14:16:36.000000000","message":"Should be a utils.py function  ?","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":true,"context_lines":[{"line_number":137,"context_line":"    _execute_commands(ovn_idl, cmds)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _execute_commands(idl, cmds):"},{"line_number":141,"context_line":"    with idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":142,"context_line":"        for command in cmds:"},{"line_number":143,"context_line":"            txn.add(command)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"def _ensure_ovn_network_link(ovn_idl, switch_name, direction,"}],"source_content_type":"text/x-python","patch_set":28,"id":"fbb86721_1df4e1c0","line":143,"range":{"start_line":140,"start_character":0,"end_line":143,"end_character":28},"in_reply_to":"d6509943_93fc9b5b","updated":"2023-10-17 07:28:36.000000000","message":"this is already a utils module, and for now it is not used anywhere else. If we use it in a different module, then I\u0027ll move it to the driver_utils.py, what do you think?","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    _execute_commands(ovn_idl, cmds)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _execute_commands(idl, cmds):"},{"line_number":141,"context_line":"    with idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":142,"context_line":"        for command in cmds:"},{"line_number":143,"context_line":"            txn.add(command)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"def _ensure_ovn_network_link(ovn_idl, switch_name, direction,"}],"source_content_type":"text/x-python","patch_set":28,"id":"a3c34f44_53bea6eb","line":143,"range":{"start_line":140,"start_character":0,"end_line":143,"end_character":28},"in_reply_to":"fbb86721_1df4e1c0","updated":"2023-11-14 14:20:26.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"def _ensure_ovn_network_link(ovn_idl, switch_name, direction,"},{"line_number":147,"context_line":"                             provider_cidrs\u003dNone, ip\u003dNone, mac\u003dNone):"},{"line_number":148,"context_line":"    # It accepts 2 values for direction: internal or external"},{"line_number":149,"context_line":"    cmds \u003d []"},{"line_number":150,"context_line":"    if direction \u003d\u003d \u0027internal\u0027:"}],"source_content_type":"text/x-python","patch_set":28,"id":"7bf84f81_7d677048","line":147,"updated":"2023-10-13 14:16:36.000000000","message":"Some docstring explaining the gist of what it does would be good here since it\u0027s a long function","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"def _ensure_ovn_network_link(ovn_idl, switch_name, direction,"},{"line_number":147,"context_line":"                             provider_cidrs\u003dNone, ip\u003dNone, mac\u003dNone):"},{"line_number":148,"context_line":"    # It accepts 2 values for direction: internal or external"},{"line_number":149,"context_line":"    cmds \u003d []"},{"line_number":150,"context_line":"    if direction \u003d\u003d \u0027internal\u0027:"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aa0ee31_c02e9d10","line":147,"in_reply_to":"7bf84f81_7d677048","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":156,"context_line":"                            provider_cidrs, peer\u003d[], may_exist\u003dTrue).execute("},{"line_number":157,"context_line":"                check_error\u003dTrue)"},{"line_number":158,"context_line":"        except RuntimeError as rte:"},{"line_number":159,"context_line":"            networks_message \u003d \u0027with different networks\u0027"},{"line_number":160,"context_line":"            if networks_message not in str(rte):"},{"line_number":161,"context_line":"                raise"},{"line_number":162,"context_line":"            # Trying to sync the networks by adding them"},{"line_number":163,"context_line":"            cmds.append(ovn_idl.lrp_add_networks(r_port_name, provider_cidrs,"},{"line_number":164,"context_line":"                                                 may_exist\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5b6f2ee3_12cfc02e","line":161,"range":{"start_line":159,"start_character":0,"end_line":161,"end_character":21},"updated":"2023-10-13 14:16:36.000000000","message":"Maybe a TODO to change ovsdbapp to return a different error for this ? Comparing the strings like this can be really flaky we may change it at some point and it would break this code.\n\nReturning a different exception or having a code for each possible error that returns RuntimeError for us to identify would be the right way to go for it. I know we will need to wait a new release of ovsdbapp but, we can leave a comment for now and change ovsdbapp as part of this effort.","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                            provider_cidrs, peer\u003d[], may_exist\u003dTrue).execute("},{"line_number":157,"context_line":"                check_error\u003dTrue)"},{"line_number":158,"context_line":"        except RuntimeError as rte:"},{"line_number":159,"context_line":"            networks_message \u003d \u0027with different networks\u0027"},{"line_number":160,"context_line":"            if networks_message not in str(rte):"},{"line_number":161,"context_line":"                raise"},{"line_number":162,"context_line":"            # Trying to sync the networks by adding them"},{"line_number":163,"context_line":"            cmds.append(ovn_idl.lrp_add_networks(r_port_name, provider_cidrs,"},{"line_number":164,"context_line":"                                                 may_exist\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":28,"id":"c10b5a2f_0779f1a2","line":161,"range":{"start_line":159,"start_character":0,"end_line":161,"end_character":21},"in_reply_to":"5b6f2ee3_12cfc02e","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                            mac, [ip], peer\u003d[], may_exist\u003dTrue).execute("},{"line_number":185,"context_line":"                check_error\u003dTrue)"},{"line_number":186,"context_line":"        except RuntimeError as rte:"},{"line_number":187,"context_line":"            networks_message \u003d \u0027with different networks\u0027"},{"line_number":188,"context_line":"            if networks_message not in str(rte):"},{"line_number":189,"context_line":"                raise"},{"line_number":190,"context_line":"            # Trying to sync the networks by adding them"},{"line_number":191,"context_line":"            cmds.append(ovn_idl.lrp_add_networks(r_port_name,"},{"line_number":192,"context_line":"                                                 [ip],"}],"source_content_type":"text/x-python","patch_set":28,"id":"e1810af8_b358ae06","line":189,"range":{"start_line":187,"start_character":1,"end_line":189,"end_character":21},"updated":"2023-10-13 14:16:36.000000000","message":"ditto same as L161","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                            mac, [ip], peer\u003d[], may_exist\u003dTrue).execute("},{"line_number":185,"context_line":"                check_error\u003dTrue)"},{"line_number":186,"context_line":"        except RuntimeError as rte:"},{"line_number":187,"context_line":"            networks_message \u003d \u0027with different networks\u0027"},{"line_number":188,"context_line":"            if networks_message not in str(rte):"},{"line_number":189,"context_line":"                raise"},{"line_number":190,"context_line":"            # Trying to sync the networks by adding them"},{"line_number":191,"context_line":"            cmds.append(ovn_idl.lrp_add_networks(r_port_name,"},{"line_number":192,"context_line":"                                                 [ip],"}],"source_content_type":"text/x-python","patch_set":28,"id":"6c9f44c7_47c07d28","line":189,"range":{"start_line":187,"start_character":1,"end_line":189,"end_character":21},"in_reply_to":"e1810af8_b358ae06","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":261,"context_line":"        set(CONF.ovn.external_nics)))"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    if not external_nic:"},{"line_number":264,"context_line":"        LOG.warning(\"NIC ports not found for bridge %s. Not possible to \""},{"line_number":265,"context_line":"                    \"create the ingress flows. It will be retried if \""},{"line_number":266,"context_line":"                    \"reconcile cycle is not disabled\", bridge)"},{"line_number":267,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":28,"id":"e37b7bbe_e41f84cf","line":264,"range":{"start_line":264,"start_character":21,"end_line":264,"end_character":30},"updated":"2023-10-13 14:16:36.000000000","message":"nit: log the external_nics config value as part of this warning","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        set(CONF.ovn.external_nics)))"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    if not external_nic:"},{"line_number":264,"context_line":"        LOG.warning(\"NIC ports not found for bridge %s. Not possible to \""},{"line_number":265,"context_line":"                    \"create the ingress flows. It will be retried if \""},{"line_number":266,"context_line":"                    \"reconcile cycle is not disabled\", bridge)"},{"line_number":267,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":28,"id":"b70911a9_0da82d51","line":264,"range":{"start_line":264,"start_character":21,"end_line":264,"end_character":30},"in_reply_to":"e37b7bbe_e41f84cf","updated":"2023-10-17 07:28:36.000000000","message":"Done","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":452,"context_line":"            port, port_ip, mac, override_dynamic_mac\u003dTrue, may_exist\u003dTrue))"},{"line_number":453,"context_line":"    if cmds:"},{"line_number":454,"context_line":"        _execute_commands(ovn_idl, cmds)"},{"line_number":455,"context_line":"    return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"def _unwire_provider_port_underlay(routing_tables_routes, port_ips,"}],"source_content_type":"text/x-python","patch_set":28,"id":"6ccad322_9fb58fe4","line":455,"range":{"start_line":455,"start_character":4,"end_line":455,"end_character":15},"updated":"2023-10-13 14:16:36.000000000","message":"Nit-ish: Just seems odd to return True here as the function itself will never return anything else other than that (i.e will never return False)","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":true,"context_lines":[{"line_number":452,"context_line":"            port, port_ip, mac, override_dynamic_mac\u003dTrue, may_exist\u003dTrue))"},{"line_number":453,"context_line":"    if cmds:"},{"line_number":454,"context_line":"        _execute_commands(ovn_idl, cmds)"},{"line_number":455,"context_line":"    return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"def _unwire_provider_port_underlay(routing_tables_routes, port_ips,"}],"source_content_type":"text/x-python","patch_set":28,"id":"93db0996_c18c4bf8","line":455,"range":{"start_line":455,"start_character":4,"end_line":455,"end_character":15},"in_reply_to":"6ccad322_9fb58fe4","updated":"2023-10-17 07:28:36.000000000","message":"yep, but the wire_provider_port_underlay can return false and true... and this is used from the driver (at the _expose_provider_port indenpendently of being ovn or underlay, so we need to return true to keep it consistent)","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            port, port_ip, mac, override_dynamic_mac\u003dTrue, may_exist\u003dTrue))"},{"line_number":453,"context_line":"    if cmds:"},{"line_number":454,"context_line":"        _execute_commands(ovn_idl, cmds)"},{"line_number":455,"context_line":"    return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"def _unwire_provider_port_underlay(routing_tables_routes, port_ips,"}],"source_content_type":"text/x-python","patch_set":28,"id":"aadb5691_e136a263","line":455,"range":{"start_line":455,"start_character":4,"end_line":455,"end_character":15},"in_reply_to":"93db0996_c18c4bf8","updated":"2023-11-14 14:20:26.000000000","message":"Fair enough","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":501,"context_line":"            port, port_ip, if_exists\u003dTrue))"},{"line_number":502,"context_line":"    if cmds:"},{"line_number":503,"context_line":"        _execute_commands(ovn_idl, cmds)"},{"line_number":504,"context_line":"    return True"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"def wire_lrp_port(routing_tables_routes, ip, bridge_device, bridge_vlan,"}],"source_content_type":"text/x-python","patch_set":28,"id":"68e6cd2e_ee8fd2d9","line":504,"range":{"start_line":504,"start_character":4,"end_line":504,"end_character":15},"updated":"2023-10-13 14:16:36.000000000","message":"ditto\n\nNit-ish: Just seems odd to return True here as the function itself will never return anything else other than that (i.e will never return False)","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            port, port_ip, if_exists\u003dTrue))"},{"line_number":502,"context_line":"    if cmds:"},{"line_number":503,"context_line":"        _execute_commands(ovn_idl, cmds)"},{"line_number":504,"context_line":"    return True"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"def wire_lrp_port(routing_tables_routes, ip, bridge_device, bridge_vlan,"}],"source_content_type":"text/x-python","patch_set":28,"id":"b853c0f9_d723f0d7","line":504,"range":{"start_line":504,"start_character":4,"end_line":504,"end_character":15},"in_reply_to":"68e6cd2e_ee8fd2d9","updated":"2023-10-17 07:28:36.000000000","message":"same as for the wire method","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"0da3b83ae9fdc46979d78909ed125c316081d07d","unresolved":true,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def ensure_base_wiring_config(idl, ovs_idl, ovn_idl\u003dNone, routing_tables\u003d{}):"},{"line_number":30,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY:"},{"line_number":31,"context_line":"        return _ensure_base_wiring_config_underlay(idl, ovs_idl,"},{"line_number":32,"context_line":"                                                   routing_tables)"},{"line_number":33,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"}],"source_content_type":"text/x-python","patch_set":35,"id":"758c5bc8_7fc0840d","line":30,"range":{"start_line":30,"start_character":12,"end_line":30,"end_character":27},"updated":"2023-11-13 15:20:27.000000000","message":"nit: the exposing is actually the same\n\nI got a bit confused because the config option does not change the way the endpoints are exposed via BGP. What changes is the wiring. I believe it would be more clear to change the settings names","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":true,"context_lines":[{"line_number":121,"context_line":"    # FIXME(ltomasbo): we need to firsts create the router and then the"},{"line_number":122,"context_line":"    # policies and routes in a different transaction until ovsdbapp"},{"line_number":123,"context_line":"    # allows it to do it in one transaction. Once that happen the next"},{"line_number":124,"context_line":"    # 2 lines can be removed"},{"line_number":125,"context_line":"    _execute_commands(ovn_idl, cmds)"},{"line_number":126,"context_line":"    cmds \u003d []"},{"line_number":127,"context_line":"    cmds.extend(_ensure_ovn_policies(ovn_idl, CONF.ovn.peer_ips))"}],"source_content_type":"text/x-python","patch_set":35,"id":"d2485407_0ea180f5","line":124,"updated":"2023-11-14 14:20:26.000000000","message":":-(","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"089ea60d69f76a0a68c3fa46ccccfc1748afc6cb","unresolved":true,"context_lines":[{"line_number":303,"context_line":"    prefix \u003d \u00270.0.0.0/0\u0027"},{"line_number":304,"context_line":"    cmds \u003d []"},{"line_number":305,"context_line":"    for ip in peer_ips:"},{"line_number":306,"context_line":"        cmds.append(ovn_idl.lr_route_add(constants.OVN_CLUSTER_ROUTER, prefix,"},{"line_number":307,"context_line":"                                         ip, ecmp\u003dTrue, may_exist\u003dTrue))"},{"line_number":308,"context_line":"    return cmds"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"ef78375a_680b5af5","line":306,"range":{"start_line":306,"start_character":28,"end_line":306,"end_character":40},"updated":"2023-11-08 14:46:00.000000000","message":"I think we need to extend this method to add the \u0027bfd\u0027 parameter in ovsdbapp; otherwise we would be losing the fault tolerance. Am I right?","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":true,"context_lines":[{"line_number":303,"context_line":"    prefix \u003d \u00270.0.0.0/0\u0027"},{"line_number":304,"context_line":"    cmds \u003d []"},{"line_number":305,"context_line":"    for ip in peer_ips:"},{"line_number":306,"context_line":"        cmds.append(ovn_idl.lr_route_add(constants.OVN_CLUSTER_ROUTER, prefix,"},{"line_number":307,"context_line":"                                         ip, ecmp\u003dTrue, may_exist\u003dTrue))"},{"line_number":308,"context_line":"    return cmds"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"46afb1d5_faf580a3","line":306,"range":{"start_line":306,"start_character":28,"end_line":306,"end_character":40},"in_reply_to":"ef78375a_680b5af5","updated":"2023-11-14 14:20:26.000000000","message":"++\n\nThis patch introduces a lot of things we should move/enhance in ovsdbapp, hope we do it soon so we can consume it from ovsdbapp in the future","commit_id":"3cd8ff8235e5954b1fff0891a95a53873989c913"}],"ovn_bgp_agent/tests/unit/drivers/openstack/utils/test_wire.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # FIXME(ltomasbo): The standard assert called ones is not working"},{"line_number":442,"context_line":"        # with the object"},{"line_number":443,"context_line":"        # m_cmds.assert_called_once_with(self.nb_idl, cmds)"},{"line_number":444,"context_line":"        # so we are checking this by comparing the object dict instead"},{"line_number":445,"context_line":"        self.assertEqual("},{"line_number":446,"context_line":"            m_cmds.call_args_list[0][0][1][0].__dict__,"}],"source_content_type":"text/x-python","patch_set":28,"id":"897ee5e1_3433f369","line":443,"updated":"2023-10-13 14:16:36.000000000","message":"I think we should use assert_has_calls here, no ?\n\n\nRandom example from Neutron:\n\n```\nexpected_calls \u003d [mock.call(lport_name\u003d\u0027port1\u0027, if_exists\u003dTrue,                                                                                                                       \n                            external_ids\u003dexternal_ids),                                                                                                                               \n                  mock.call(lport_name\u003d\u0027port2\u0027, if_exists\u003dTrue,                                                                                                                       \n                            external_ids\u003dexternal_ids)]                                                                                                                               \nnb_idl.set_lswitch_port.assert_has_calls(expected_calls) \n```","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6586fcf11b4f6503741efae1f2babb83c802b0ee","unresolved":true,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # FIXME(ltomasbo): The standard assert called ones is not working"},{"line_number":442,"context_line":"        # with the object"},{"line_number":443,"context_line":"        # m_cmds.assert_called_once_with(self.nb_idl, cmds)"},{"line_number":444,"context_line":"        # so we are checking this by comparing the object dict instead"},{"line_number":445,"context_line":"        self.assertEqual("},{"line_number":446,"context_line":"            m_cmds.call_args_list[0][0][1][0].__dict__,"}],"source_content_type":"text/x-python","patch_set":28,"id":"56246cff_0aa92df1","line":443,"in_reply_to":"4b40f0bf_14502155","updated":"2023-11-14 14:20:26.000000000","message":"Ah I seem yeah it\u0027s tricky cause each instance of StaticMACBindingDelCommand() will be different and therefore we can\u0027t compare it directly.","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":true,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # FIXME(ltomasbo): The standard assert called ones is not working"},{"line_number":442,"context_line":"        # with the object"},{"line_number":443,"context_line":"        # m_cmds.assert_called_once_with(self.nb_idl, cmds)"},{"line_number":444,"context_line":"        # so we are checking this by comparing the object dict instead"},{"line_number":445,"context_line":"        self.assertEqual("},{"line_number":446,"context_line":"            m_cmds.call_args_list[0][0][1][0].__dict__,"}],"source_content_type":"text/x-python","patch_set":28,"id":"4b40f0bf_14502155","line":443,"in_reply_to":"897ee5e1_3433f369","updated":"2023-10-17 07:28:36.000000000","message":"not sure I get it... it was not working for me as the \"ovn_idl.static_mac_binding_del\" is returning a class object that is different (somehow) from the in cmds and it was failing. So this was the way I found to comparte the actuall call parameters where the same","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"}],"tox.ini":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ca600438e2b9a4f6b0fafd657939428b332120ac","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    coverage combine"},{"line_number":45,"context_line":"    coverage html -d cover --omit\u003d\u0027ovn_bgp_agent/tests/*\u0027"},{"line_number":46,"context_line":"    coverage xml -o cover/coverage.xml --omit\u003d\u0027ovn_bgp_agent/tests/*\u0027"},{"line_number":47,"context_line":"    coverage report --fail-under\u003d80 --skip-covered --omit\u003d\u0027ovn_bgp_agent/tests/*,ovn_bgp_agent/privileged/linux_net.py,ovn_bgp_agent/utils/linux_net.py\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[testenv:docs]"},{"line_number":50,"context_line":"deps \u003d -r{toxinidir}/doc/requirements.txt"}],"source_content_type":"text/x-properties","patch_set":28,"id":"d5c0350a_e5dca0a0","line":47,"range":{"start_line":47,"start_character":20,"end_line":47,"end_character":35},"updated":"2023-10-13 14:16:36.000000000","message":"This is a 5% down from where we were before. 80% still very acceptable but, we may consider keep it at 85% before merging this.","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"82305c85fa39ecb701c0a2d662105137f982fbed","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    coverage combine"},{"line_number":45,"context_line":"    coverage html -d cover --omit\u003d\u0027ovn_bgp_agent/tests/*\u0027"},{"line_number":46,"context_line":"    coverage xml -o cover/coverage.xml --omit\u003d\u0027ovn_bgp_agent/tests/*\u0027"},{"line_number":47,"context_line":"    coverage report --fail-under\u003d80 --skip-covered --omit\u003d\u0027ovn_bgp_agent/tests/*,ovn_bgp_agent/privileged/linux_net.py,ovn_bgp_agent/utils/linux_net.py\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[testenv:docs]"},{"line_number":50,"context_line":"deps \u003d -r{toxinidir}/doc/requirements.txt"}],"source_content_type":"text/x-properties","patch_set":28,"id":"8075b6b2_9dfd1e81","line":47,"range":{"start_line":47,"start_character":20,"end_line":47,"end_character":35},"in_reply_to":"a35e5846_027264de","updated":"2023-10-17 07:31:57.000000000","message":"actually, checking again after removing the extra ovsdbapp stuff the coverage is back to 83%","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6327702588f927a09cc86b6840807e2eb1e1f510","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    coverage combine"},{"line_number":45,"context_line":"    coverage html -d cover --omit\u003d\u0027ovn_bgp_agent/tests/*\u0027"},{"line_number":46,"context_line":"    coverage xml -o cover/coverage.xml --omit\u003d\u0027ovn_bgp_agent/tests/*\u0027"},{"line_number":47,"context_line":"    coverage report --fail-under\u003d80 --skip-covered --omit\u003d\u0027ovn_bgp_agent/tests/*,ovn_bgp_agent/privileged/linux_net.py,ovn_bgp_agent/utils/linux_net.py\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[testenv:docs]"},{"line_number":50,"context_line":"deps \u003d -r{toxinidir}/doc/requirements.txt"}],"source_content_type":"text/x-properties","patch_set":28,"id":"a35e5846_027264de","line":47,"range":{"start_line":47,"start_character":20,"end_line":47,"end_character":35},"in_reply_to":"d5c0350a_e5dca0a0","updated":"2023-10-17 07:28:36.000000000","message":"this is because the tests files were not being omitted before and we were artificially bumping the score, I think without the changes but skipping those the coverage was 82%, so this is lowering it 2% only (actually I think the percentage is 81, so perhaps I can raise it to 81","commit_id":"b5b2ec8cda7e724ef29068b7d02617a04e010005"}]}
