)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e9d813fe3b0441f1e19e0605e8e7c4b65693f003","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f0923630_f3bcb247","updated":"2026-08-18 19:13:32.000000000","message":"The patch looks good to me - putting just -1 to move the driver unittests to functional instead.","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"32a99a05890dc00ac8e9eea887e47c144a5faa35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"153c30e9_fa3c1788","updated":"2026-08-24 13:59:27.000000000","message":"LGTM, just one comment","commit_id":"f3b854df0f50c0dd62d5cf7b14b94accb8ee42b4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"8ae4d7a8f78c8896980660c88e3903a204265591","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"231c8c0a_5f9b9e59","updated":"2026-08-24 14:36:58.000000000","message":"[This](https://opendev.org/openstack/neutron/src/branch/master/neutron/tests/functional/agent/linux/evpn_router/frr/test_frr_driver.py#L346) the class I had in mind for the functional test. You can add another test where you purposely, set a different password in one namespace and then assert that routes are not advertised.","commit_id":"f3b854df0f50c0dd62d5cf7b14b94accb8ee42b4"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"bbeba022b6d0004ca31dd3697af61e362f9ee980","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"31e3a13e_3132398e","in_reply_to":"231c8c0a_5f9b9e59","updated":"2026-08-25 10:49:09.000000000","message":"Done","commit_id":"f3b854df0f50c0dd62d5cf7b14b94accb8ee42b4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"793a516b056c51e5f5da603379cce84b02fa0dab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"48ef4070_d88b00a9","updated":"2026-08-26 13:14:22.000000000","message":"LGTM. Thanks for working on it Edu","commit_id":"3fae1eec544d2ab25e604301b0342ed210fff9c2"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"bc4f0b19b122bd2777afab99b0151003e31722d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"305fea53_a1fd4f0b","updated":"2026-09-11 17:19:13.000000000","message":"recheck neutron-tempest-plugin-ovn","commit_id":"3fae1eec544d2ab25e604301b0342ed210fff9c2"}],"neutron/agent/ovn/extensions/evpn/fsm_frr_driver.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e9d813fe3b0441f1e19e0605e8e7c4b65693f003","unresolved":true,"context_lines":[{"line_number":61,"context_line":"            bgp_password\u003dcfg.CONF.ovn_evpn.bgp_password,"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_router(self, vrf_name, vni) -\u003e None:"},{"line_number":65,"context_line":"        return super().create_evpn_router(self._router_config(vrf_name, vni))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def delete_router(self, vrf_name, vni) -\u003e None:"},{"line_number":68,"context_line":"        return super().delete_evpn_router(self._router_config(vrf_name, vni))"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c9bb4d7_7b2f1c85","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":77},"updated":"2026-08-18 19:13:32.000000000","message":"Just a random comment: I find it weird for a super class to accept completely different parameters than its child.","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"c5e9db552f34a24aacf8e158b5a3f1d528a8a9fa","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            bgp_password\u003dcfg.CONF.ovn_evpn.bgp_password,"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_router(self, vrf_name, vni) -\u003e None:"},{"line_number":65,"context_line":"        return super().create_evpn_router(self._router_config(vrf_name, vni))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def delete_router(self, vrf_name, vni) -\u003e None:"},{"line_number":68,"context_line":"        return super().delete_evpn_router(self._router_config(vrf_name, vni))"}],"source_content_type":"text/x-python","patch_set":1,"id":"01960408_81afd01e","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":77},"in_reply_to":"6c9bb4d7_7b2f1c85","updated":"2026-08-19 10:56:05.000000000","message":"It was not overriding the same method, but calling a different one. I have replaced `super()` with `self`, which I think looks cleaner.","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"32a99a05890dc00ac8e9eea887e47c144a5faa35","unresolved":true,"context_lines":[{"line_number":58,"context_line":"            bgp_router_id\u003dself._bgp_router_id,"},{"line_number":59,"context_line":"            vrf_name\u003dvrf_name,"},{"line_number":60,"context_line":"            vni\u003dvni,"},{"line_number":61,"context_line":"            bgp_password\u003dcfg.CONF.ovn_evpn.bgp_password,"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_router(self, vrf_name, vni) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"8b0a7784_be1fb487","line":61,"updated":"2026-08-24 13:59:27.000000000","message":"To stay consistent, the `bgp_password` should be set it the `__init__` and then referenced here with `self._bgp_password`. Similar to `_asn`","commit_id":"f3b854df0f50c0dd62d5cf7b14b94accb8ee42b4"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"bbeba022b6d0004ca31dd3697af61e362f9ee980","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            bgp_router_id\u003dself._bgp_router_id,"},{"line_number":59,"context_line":"            vrf_name\u003dvrf_name,"},{"line_number":60,"context_line":"            vni\u003dvni,"},{"line_number":61,"context_line":"            bgp_password\u003dcfg.CONF.ovn_evpn.bgp_password,"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_router(self, vrf_name, vni) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"d73305ca_71990805","line":61,"in_reply_to":"8b0a7784_be1fb487","updated":"2026-08-25 10:49:09.000000000","message":"Done","commit_id":"f3b854df0f50c0dd62d5cf7b14b94accb8ee42b4"}],"neutron/conf/agent/ovn/evpn/config.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e9d813fe3b0441f1e19e0605e8e7c4b65693f003","unresolved":true,"context_lines":[{"line_number":30,"context_line":"               \u0027BGP peer session\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027bgp_password\u0027,"},{"line_number":33,"context_line":"        secret\u003dTrue,"},{"line_number":34,"context_line":"        help\u003d_(\u0027BGP neighbor password used when the EVPN agent creates the \u0027"},{"line_number":35,"context_line":"               \u0027fallback FRR BGP router. If unset, no password is \u0027"},{"line_number":36,"context_line":"               \u0027configured.\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"76f47cfd_ad340254","line":33,"updated":"2026-08-18 19:13:32.000000000","message":"Shall we put `default\u003dNone` here as the code seems to be conditional and sets the password only if defined.","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"c5e9db552f34a24aacf8e158b5a3f1d528a8a9fa","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               \u0027BGP peer session\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt("},{"line_number":32,"context_line":"        \u0027bgp_password\u0027,"},{"line_number":33,"context_line":"        secret\u003dTrue,"},{"line_number":34,"context_line":"        help\u003d_(\u0027BGP neighbor password used when the EVPN agent creates the \u0027"},{"line_number":35,"context_line":"               \u0027fallback FRR BGP router. If unset, no password is \u0027"},{"line_number":36,"context_line":"               \u0027configured.\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"8e7689d6_90261957","line":33,"in_reply_to":"76f47cfd_ad340254","updated":"2026-08-19 10:56:05.000000000","message":"Done","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"}],"neutron/tests/functional/agent/linux/evpn_router/frr/test_frr_driver.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"586a6c19925ec1967b05092d145cd802be5a6804","unresolved":true,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        # Wait the normal advertisement window; mismatched passwords must"},{"line_number":465,"context_line":"        # prevent the BGP session from exchanging routes."},{"line_number":466,"context_line":"        self.assertRaises("},{"line_number":467,"context_line":"            RuntimeError,"},{"line_number":468,"context_line":"            assert_routes, self.ns_b, table_id\u003dvni,"},{"line_number":469,"context_line":"            present\u003dadvertised_routes)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def test_multiple_routers_then_delete_one(self):"},{"line_number":472,"context_line":"        vni_1 \u003d 10"}],"source_content_type":"text/x-python","patch_set":5,"id":"407cb142_adc72c79","line":469,"range":{"start_line":466,"start_character":0,"end_line":469,"end_character":38},"updated":"2026-08-25 17:32:09.000000000","message":"why not just call\n`assert_routes(self.ns_b, table_id\u003dvni, absent\u003dadvertised_routes)`\nThis will make sure that routes were not advertised within implicit timeout of 5s. \n\nOr if you want this test more robust. \nFirst create two evpn_routers with matching password. Assert that routes are advertised, then delete one, recreate it with the same parameters except the password and assert that routes are now not advertised.","commit_id":"bee40db7bd95a4c9899edb9f2013c58bea1cab92"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"7dbce08f4705397c2826817c6e2e408f1b7cc673","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        # Wait the normal advertisement window; mismatched passwords must"},{"line_number":465,"context_line":"        # prevent the BGP session from exchanging routes."},{"line_number":466,"context_line":"        self.assertRaises("},{"line_number":467,"context_line":"            RuntimeError,"},{"line_number":468,"context_line":"            assert_routes, self.ns_b, table_id\u003dvni,"},{"line_number":469,"context_line":"            present\u003dadvertised_routes)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def test_multiple_routers_then_delete_one(self):"},{"line_number":472,"context_line":"        vni_1 \u003d 10"}],"source_content_type":"text/x-python","patch_set":5,"id":"90da7623_730acfda","line":469,"range":{"start_line":466,"start_character":0,"end_line":469,"end_character":38},"in_reply_to":"407cb142_adc72c79","updated":"2026-08-26 08:19:41.000000000","message":"Done","commit_id":"bee40db7bd95a4c9899edb9f2013c58bea1cab92"}],"neutron/tests/unit/agent/ovn/extensions/evpn/test_fsm_frr_driver.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e9d813fe3b0441f1e19e0605e8e7c4b65693f003","unresolved":true,"context_lines":[{"line_number":23,"context_line":"from neutron.tests import base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestFsmFrrVtyshDriver(base.BaseTestCase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"09d857fa_1020bb3a","line":26,"updated":"2026-08-18 19:13:32.000000000","message":"These tests would fit better to https://review.opendev.org/c/openstack/neutron/+/1001375/1/neutron/tests/functional/agent/linux/evpn_router/frr/test_frr_driver.py#246","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"c5e9db552f34a24aacf8e158b5a3f1d528a8a9fa","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.tests import base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestFsmFrrVtyshDriver(base.BaseTestCase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"a0ec6557_09b82fa9","line":26,"in_reply_to":"09d857fa_1020bb3a","updated":"2026-08-19 10:56:05.000000000","message":"Done","commit_id":"af127d10a691238ebc2061c49e4eeabf70610e69"}]}
