)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"5b629dc70937c7e69b7e5f23293cdd5f4ad35477","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"eaa8e385_5ed8e829","updated":"2024-02-12 18:54:15.000000000","message":"recheck failure in neutron.tests.functional.plugins.ml2.drivers.ovn.mech_driver.test_mech_driver.TestNATRuleGatewayPort.test_create_floatingip doesn\u0027t seem related to patch","commit_id":"6deedc4dbbf4a7d2cbf89e6abd61b7f32dec0bfe"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"397b1d4b9164768407d46f6cce7a7d9c7710cc7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"c0054a8a_cfb8e6cd","updated":"2024-02-14 00:43:39.000000000","message":"Thanks for the review!","commit_id":"a955a5de9b3176426776cb90de0db3ebf514a034"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"14bbdc2dbe4c1b66798ed881a02b0618a74b5454","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"414bfe96_0c77ab19","updated":"2024-02-28 03:16:59.000000000","message":"Thanks for the review!","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"ceb16662_29319119","updated":"2024-02-29 19:58:58.000000000","message":"Mostly just nits. Only +1 for now to make sure Rodolfo\u0027s happy with updates.\n\npep8 being fixed by: https://review.opendev.org/c/openstack/neutron/+/910583","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4ffb7e29a3289a8e5cbedc3a796df492106e7c12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"06d0f149_19bfc11e","updated":"2024-02-29 18:52:39.000000000","message":"recheck pep8 failure doesn\u0027t seem valid","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e70d2737190240cc52911103183585fded242ca1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"5d1ef781_76ce63c9","updated":"2024-03-04 10:44:02.000000000","message":"-1 only for visibility\n\n--\u003e My proposal (as commented last Friday in IRC): https://review.opendev.org/c/openstack/neutron/+/910889. Tests are pending in this patch, I\u0027ve pushed it to review first.","commit_id":"23e25d728443a78bc4421004769d7f10f8367c17"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aa7ccf42ef10e7c0f1d4b420c3d072509a41a23d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"dfcae329_9ad8bbfd","in_reply_to":"5d1ef781_76ce63c9","updated":"2024-03-06 07:41:41.000000000","message":"And the related n-t-p patch: https://review.opendev.org/c/openstack/neutron-tempest-plugin/+/911081","commit_id":"23e25d728443a78bc4421004769d7f10f8367c17"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6f80e0d0fe9f5b922b65afafa0f1d270a2a3e979","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"61885f3f_66304542","in_reply_to":"dfcae329_9ad8bbfd","updated":"2024-03-12 00:12:43.000000000","message":"Thanks!","commit_id":"23e25d728443a78bc4421004769d7f10f8367c17"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d2b68a68ba6f939dbbe203cc49f801512c12a2cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"b37b0732_0a15bdf5","updated":"2024-03-25 23:59:40.000000000","message":"Thanks for the review!","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e0cd068fc16e08e3c2cfa298b5a837fc243b2f44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"fd775b68_8cd3b701","updated":"2024-03-26 15:00:53.000000000","message":"-1 for the question related to the addition of a new class when using ha_support\u003dbase.OPTIONAL.\n\nTo be honest, I would prefer to use OPTIONAL and have one class. But if we are creating two different classes, then one should be HA\u003dUNSUPPORTED and the other one HA\u003dMANDATORY (same as in ML2/OVS L3 agent).","commit_id":"5490f48d5e9f4bdfdf670513569db30479bcc552"}],"doc/source/admin/config-router-flavor-ovn.rst":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ca211c1b9c6e3c54524661d8383162f76e3f5f19","unresolved":true,"context_lines":[{"line_number":209,"context_line":"      +--------------------------------------+----------------------------------+--------+-------+----------------------------------+-------+"},{"line_number":210,"context_line":"      | 21889ed3-b8df-4b0e-9a64-92ba9fab655d | ovn-flavor-router                | ACTIVE | UP    | b807321af03f44dc808ff06bbc845804 | False |"},{"line_number":211,"context_line":"      | 9f5fec56-1829-4bad-abe5-7b4221649c8e | router-of-user-defined-flavor    | ACTIVE | UP    | b807321af03f44dc808ff06bbc845804 | False |"},{"line_number":212,"context_line":"      | 742e17a1-cfd7-444c-8061-cdc4e7ae42a2 | router-of-user-defined-flavor-ha | ACTIVE | UP    | 066d3a07590c4f409e760465f2360ea9 | True  |"},{"line_number":213,"context_line":"      +--------------------------------------+----------------------------------+--------+-------+----------------------------------+-------+"}],"source_content_type":"text/x-rst","patch_set":12,"id":"a28fa934_37a8bb6b","line":212,"updated":"2024-02-12 22:08:00.000000000","message":"I think the only thing wrong in this file is the ID of the HA router. From above it seems to be:\n\ne577295a-5496-412e-a444-9f21a3c8bd7f","commit_id":"6deedc4dbbf4a7d2cbf89e6abd61b7f32dec0bfe"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"397b1d4b9164768407d46f6cce7a7d9c7710cc7a","unresolved":false,"context_lines":[{"line_number":209,"context_line":"      +--------------------------------------+----------------------------------+--------+-------+----------------------------------+-------+"},{"line_number":210,"context_line":"      | 21889ed3-b8df-4b0e-9a64-92ba9fab655d | ovn-flavor-router                | ACTIVE | UP    | b807321af03f44dc808ff06bbc845804 | False |"},{"line_number":211,"context_line":"      | 9f5fec56-1829-4bad-abe5-7b4221649c8e | router-of-user-defined-flavor    | ACTIVE | UP    | b807321af03f44dc808ff06bbc845804 | False |"},{"line_number":212,"context_line":"      | 742e17a1-cfd7-444c-8061-cdc4e7ae42a2 | router-of-user-defined-flavor-ha | ACTIVE | UP    | 066d3a07590c4f409e760465f2360ea9 | True  |"},{"line_number":213,"context_line":"      +--------------------------------------+----------------------------------+--------+-------+----------------------------------+-------+"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1e2e2130_e4149644","line":212,"in_reply_to":"a28fa934_37a8bb6b","updated":"2024-02-14 00:43:39.000000000","message":"Done","commit_id":"6deedc4dbbf4a7d2cbf89e6abd61b7f32dec0bfe"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Router flavors with the L3 OVN service plugin"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In this chapter we give examples on how to create routers with user defined"},{"line_number":8,"context_line":"flavors."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"   .. note::"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bcc4323f_55b917f4","line":7,"range":{"start_line":7,"start_character":63,"end_line":7,"end_character":75},"updated":"2024-02-29 19:58:58.000000000","message":"nit: user-defined","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Router flavors with the L3 OVN service plugin"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In this chapter we give examples on how to create routers with user defined"},{"line_number":8,"context_line":"flavors."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"   .. note::"}],"source_content_type":"text/x-rst","patch_set":20,"id":"c1812034_59f2d238","line":7,"range":{"start_line":7,"start_character":63,"end_line":7,"end_character":75},"in_reply_to":"bcc4323f_55b917f4","updated":"2024-03-01 01:45:30.000000000","message":"Done","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"   .. code-block:: console"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"      [service_providers]"},{"line_number":20,"context_line":"      service_provider \u003d L3_ROUTER_NAT:user-defined:neutron.services.ovn_l3.service_providers.user_defined.UserDefined"},{"line_number":21,"context_line":"      service_provider \u003d L3_ROUTER_NAT:user-defined-ha:neutron.services.ovn_l3.service_providers.user_defined.UserDefinedHA"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"fdf4a999_5b4bda1c","line":19,"updated":"2024-02-29 19:58:58.000000000","message":"nit: the default example neutron.conf doesn\u0027t have this block, we could always add it in a follow-on.\n\nTo fix we need to:\n\n1) Add in import and define a list_service_provider_opts() or similar method in neutron/opts.py\n\nimport neutron.conf.services.provider_configuration\n\ndef list_service_provider_opts():\n    return [\n        (\u0027service_providers\u0027,\n         itertools.chain(\n             neutron.conf.services.provider_configuration.serviceprovider_opts\n         )\n     ]\n\n2) Add something like this to setup.cfg below neutron.extentions:\n\n  neutron.service_providers \u003d neutron.opts.list_service_provider_opts\n  \nThat way when the default neutron.conf is generated is should have this section, even if it is commented-out, assuming I didn\u0027t have a typo above.","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"   .. code-block:: console"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"      [service_providers]"},{"line_number":20,"context_line":"      service_provider \u003d L3_ROUTER_NAT:user-defined:neutron.services.ovn_l3.service_providers.user_defined.UserDefined"},{"line_number":21,"context_line":"      service_provider \u003d L3_ROUTER_NAT:user-defined-ha:neutron.services.ovn_l3.service_providers.user_defined.UserDefinedHA"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"f992b4a8_61461d49","line":19,"in_reply_to":"fdf4a999_5b4bda1c","updated":"2024-03-01 01:45:30.000000000","message":"I\u0027m going to punt this one for a follow up patch","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":59,"context_line":"      | project_id  | None                                                               |"},{"line_number":60,"context_line":"      +-------------+--------------------------------------------------------------------+"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"      $ openstack network flavor profile create --description \"User defined HA router flavor profile\" --enable --driver neutron.services.ovn_l3.service_providers.user_defined.UserDefinedHA"},{"line_number":63,"context_line":"      +-------------+----------------------------------------------------------------------+"},{"line_number":64,"context_line":"      | Field       | Value                                                                |"},{"line_number":65,"context_line":"      +-------------+----------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":20,"id":"c9de7184_2a06346d","line":62,"range":{"start_line":62,"start_character":63,"end_line":62,"end_character":75},"updated":"2024-02-29 19:58:58.000000000","message":"nit: User-defined as other example above","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"      | project_id  | None                                                               |"},{"line_number":60,"context_line":"      +-------------+--------------------------------------------------------------------+"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"      $ openstack network flavor profile create --description \"User defined HA router flavor profile\" --enable --driver neutron.services.ovn_l3.service_providers.user_defined.UserDefinedHA"},{"line_number":63,"context_line":"      +-------------+----------------------------------------------------------------------+"},{"line_number":64,"context_line":"      | Field       | Value                                                                |"},{"line_number":65,"context_line":"      +-------------+----------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":20,"id":"be7f6bd6_4faa664a","line":62,"range":{"start_line":62,"start_character":63,"end_line":62,"end_character":75},"in_reply_to":"c9de7184_2a06346d","updated":"2024-03-01 01:45:30.000000000","message":"Done","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":63,"context_line":"      +-------------+----------------------------------------------------------------------+"},{"line_number":64,"context_line":"      | Field       | Value                                                                |"},{"line_number":65,"context_line":"      +-------------+----------------------------------------------------------------------+"},{"line_number":66,"context_line":"      | description | User defined HA router flavor profile                                |"},{"line_number":67,"context_line":"      | driver      | neutron.services.ovn_l3.service_providers.user_defined.UserDefinedHA |"},{"line_number":68,"context_line":"      | enabled     | True                                                                 |"},{"line_number":69,"context_line":"      | id          | f827e9ae-50ff-480d-9c98-3f978533a341                                 |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"4f6ba455_e8c21591","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":37},"updated":"2024-02-29 19:58:58.000000000","message":"Same here","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":false,"context_lines":[{"line_number":63,"context_line":"      +-------------+----------------------------------------------------------------------+"},{"line_number":64,"context_line":"      | Field       | Value                                                                |"},{"line_number":65,"context_line":"      +-------------+----------------------------------------------------------------------+"},{"line_number":66,"context_line":"      | description | User defined HA router flavor profile                                |"},{"line_number":67,"context_line":"      | driver      | neutron.services.ovn_l3.service_providers.user_defined.UserDefinedHA |"},{"line_number":68,"context_line":"      | enabled     | True                                                                 |"},{"line_number":69,"context_line":"      | id          | f827e9ae-50ff-480d-9c98-3f978533a341                                 |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9fd1439c_610dc3b1","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":37},"in_reply_to":"4f6ba455_e8c21591","updated":"2024-03-01 01:45:30.000000000","message":"Done","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":87,"context_line":"      | service_type        | L3_ROUTER_NAT                                        |"},{"line_number":88,"context_line":"      +---------------------+------------------------------------------------------+"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"      $ openstack network flavor create --service-type L3_ROUTER_NAT --description \"User defined flavor for HA routers in the L3 OVN plugin\" user-defined-HA-router-flavor"},{"line_number":91,"context_line":"      +---------------------+---------------------------------------------------------+"},{"line_number":92,"context_line":"      | Field               | Value                                                   |"},{"line_number":93,"context_line":"      +---------------------+---------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":20,"id":"660d8063_f0a830dd","line":90,"range":{"start_line":90,"start_character":84,"end_line":90,"end_character":96},"updated":"2024-02-29 19:58:58.000000000","message":"Same here","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"      | service_type        | L3_ROUTER_NAT                                        |"},{"line_number":88,"context_line":"      +---------------------+------------------------------------------------------+"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"      $ openstack network flavor create --service-type L3_ROUTER_NAT --description \"User defined flavor for HA routers in the L3 OVN plugin\" user-defined-HA-router-flavor"},{"line_number":91,"context_line":"      +---------------------+---------------------------------------------------------+"},{"line_number":92,"context_line":"      | Field               | Value                                                   |"},{"line_number":93,"context_line":"      +---------------------+---------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":20,"id":"6c3cc1d0_4184a37e","line":90,"range":{"start_line":90,"start_character":84,"end_line":90,"end_character":96},"in_reply_to":"660d8063_f0a830dd","updated":"2024-03-01 01:45:30.000000000","message":"Done","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":91,"context_line":"      +---------------------+---------------------------------------------------------+"},{"line_number":92,"context_line":"      | Field               | Value                                                   |"},{"line_number":93,"context_line":"      +---------------------+---------------------------------------------------------+"},{"line_number":94,"context_line":"      | description         | User defined flavor for HA routers in the L3 OVN plugin |"},{"line_number":95,"context_line":"      | enabled             | True                                                    |"},{"line_number":96,"context_line":"      | id                  | 7a3f68de-6eaf-4d23-b7eb-e34168d3c026                    |"},{"line_number":97,"context_line":"      | name                | user-defined-HA-router-flavor                           |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9da600e0_af3af45f","line":94,"range":{"start_line":94,"start_character":30,"end_line":94,"end_character":42},"updated":"2024-02-29 19:58:58.000000000","message":"Same here","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":false,"context_lines":[{"line_number":91,"context_line":"      +---------------------+---------------------------------------------------------+"},{"line_number":92,"context_line":"      | Field               | Value                                                   |"},{"line_number":93,"context_line":"      +---------------------+---------------------------------------------------------+"},{"line_number":94,"context_line":"      | description         | User defined flavor for HA routers in the L3 OVN plugin |"},{"line_number":95,"context_line":"      | enabled             | True                                                    |"},{"line_number":96,"context_line":"      | id                  | 7a3f68de-6eaf-4d23-b7eb-e34168d3c026                    |"},{"line_number":97,"context_line":"      | name                | user-defined-HA-router-flavor                           |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"1592502b_ea2a4f04","line":94,"range":{"start_line":94,"start_character":30,"end_line":94,"end_character":42},"in_reply_to":"9da600e0_af3af45f","updated":"2024-03-01 01:45:30.000000000","message":"Done","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7299d333c2837395aa89fb48741fae393ea51843","unresolved":true,"context_lines":[{"line_number":201,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"   .. note::"},{"line_number":204,"context_line":"      OVN routers are natively high availability at the OVN/OVS level, through"},{"line_number":205,"context_line":"      the use of BFD monitoring. Neutron doesn\u0027t get involved in the high"},{"line_number":206,"context_line":"      availability aspect beyond router scheduling. For this reason, with the"},{"line_number":207,"context_line":"      ML2/OVN backend, the `ha` attribute is not associated to routers. This"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ca47886a_5bcf7c1a","line":204,"range":{"start_line":204,"start_character":31,"end_line":204,"end_character":48},"updated":"2024-02-29 19:58:58.000000000","message":"nit: highly available","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a153d66430809677b4f60f679a4780ddbbb061fb","unresolved":false,"context_lines":[{"line_number":201,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"   .. note::"},{"line_number":204,"context_line":"      OVN routers are natively high availability at the OVN/OVS level, through"},{"line_number":205,"context_line":"      the use of BFD monitoring. Neutron doesn\u0027t get involved in the high"},{"line_number":206,"context_line":"      availability aspect beyond router scheduling. For this reason, with the"},{"line_number":207,"context_line":"      ML2/OVN backend, the `ha` attribute is not associated to routers. This"}],"source_content_type":"text/x-rst","patch_set":20,"id":"77491f87_6e04023a","line":204,"range":{"start_line":204,"start_character":31,"end_line":204,"end_character":48},"in_reply_to":"ca47886a_5bcf7c1a","updated":"2024-03-01 01:45:30.000000000","message":"Done","commit_id":"205f4c9ca1002a297133c4f018ca1fc81ad2b18f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fa0e5905c09973def3b678520eb715b303e0a57b","unresolved":true,"context_lines":[{"line_number":30,"context_line":"      +---------------+-----------------+---------+"},{"line_number":31,"context_line":"      | L3_ROUTER_NAT | user-defined    | False   |"},{"line_number":32,"context_line":"      | L3_ROUTER_NAT | ovn             | True    |"},{"line_number":33,"context_line":"      +---------------+-----------------+---------+"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"#. Create service profiles for the router flavors:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"594e5f09_d7c1abec","line":33,"updated":"2024-03-27 19:45:15.000000000","message":"nit: above block changes not required, leftover from previous PS","commit_id":"8ff8203fd7133d9092fd70610c19c0dba9e90de2"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"82b27a3bb63c004872165d29e0fc451d386d3fed","unresolved":true,"context_lines":[{"line_number":415,"context_line":"    def supported_extension_aliases(self):"},{"line_number":416,"context_line":"        if not hasattr(self, \u0027_aliases\u0027):"},{"line_number":417,"context_line":"            self._aliases \u003d self._supported_extension_aliases[:]"},{"line_number":418,"context_line":"            self._aliases.append(l3_ext_ha_mode.ALIAS)"},{"line_number":419,"context_line":"            self._disable_qos_extensions_by_extension_drivers(self._aliases)"},{"line_number":420,"context_line":"        return self._aliases"}],"source_content_type":"text/x-python","patch_set":19,"id":"d8422453_7ff9a4ee","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":54},"updated":"2024-02-29 12:14:58.000000000","message":"Why not adding this extension to ML2_SUPPORTED_API_EXTENSIONS_OVN_L3 and remove it in OVNL3RouterPlugin? The mentioned constant should have all supported extensions by OVN L3; then each implementation can skip those not specifically supported.","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"b2d41cffe822667d96293e73bb1ec1474830641f","unresolved":false,"context_lines":[{"line_number":415,"context_line":"    def supported_extension_aliases(self):"},{"line_number":416,"context_line":"        if not hasattr(self, \u0027_aliases\u0027):"},{"line_number":417,"context_line":"            self._aliases \u003d self._supported_extension_aliases[:]"},{"line_number":418,"context_line":"            self._aliases.append(l3_ext_ha_mode.ALIAS)"},{"line_number":419,"context_line":"            self._disable_qos_extensions_by_extension_drivers(self._aliases)"},{"line_number":420,"context_line":"        return self._aliases"}],"source_content_type":"text/x-python","patch_set":19,"id":"eea6e779_853e5d00","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":54},"in_reply_to":"d8422453_7ff9a4ee","updated":"2024-02-29 16:29:51.000000000","message":"Done","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"}],"neutron/services/ovn_l3/service_providers/ovn.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"82b27a3bb63c004872165d29e0fc451d386d3fed","unresolved":true,"context_lines":[{"line_number":254,"context_line":"        self.l3plugin._ovn_client.update_floatingip_status(payload.context,"},{"line_number":255,"context_line":"                                                           payload.states[0])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_CREATE],"},{"line_number":258,"context_line":"                       priority_group.PRIORITY_ROUTER_EXTENDED_ATTRIBUTE)"},{"line_number":259,"context_line":"    def _process_precommit_router_create(self, resource, event, trigger,"},{"line_number":260,"context_line":"                                         payload):"},{"line_number":261,"context_line":"        # The underlying core OVN routers are high availability by default. So"}],"source_content_type":"text/x-python","patch_set":19,"id":"5efa2e65_04e015bd","line":258,"range":{"start_line":257,"start_character":4,"end_line":258,"end_character":73},"updated":"2024-02-29 12:14:58.000000000","message":"Why do we have this event here if we already have https://review.opendev.org/c/openstack/neutron/+/901513/19/neutron/services/ovn_l3/service_providers/user_defined.py#179?","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"b2d41cffe822667d96293e73bb1ec1474830641f","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        self.l3plugin._ovn_client.update_floatingip_status(payload.context,"},{"line_number":255,"context_line":"                                                           payload.states[0])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_CREATE],"},{"line_number":258,"context_line":"                       priority_group.PRIORITY_ROUTER_EXTENDED_ATTRIBUTE)"},{"line_number":259,"context_line":"    def _process_precommit_router_create(self, resource, event, trigger,"},{"line_number":260,"context_line":"                                         payload):"},{"line_number":261,"context_line":"        # The underlying core OVN routers are high availability by default. So"}],"source_content_type":"text/x-python","patch_set":19,"id":"7b071b1f_aead5b40","line":258,"range":{"start_line":257,"start_character":4,"end_line":258,"end_character":73},"in_reply_to":"5efa2e65_04e015bd","updated":"2024-02-29 16:29:51.000000000","message":"I was hoping that the explanation in lines 261 to 264 would shed enough light on the reason...\n\nOnce we enable the OVNL3RouterPluginHA plugin, all routers (ovn and user defined flavors) include the \u0027ha\u0027 attribute. Without this method, OVN routers have False in their \u0027ha\u0027 attribute. But OVN flavor routers are natively high availability, because they are implemented using BFD. So to reflect their true nature in the API, I decided to set the \u0027ha\u0027 attribute to True for OVN flavor routers in this method.\n\nhttps://review.opendev.org/c/openstack/neutron/+/901513/19/neutron/services/ovn_l3/service_providers/user_defined.py#179 only sets the \u0027ha\u0027 attribute to True for user defined flavor routers","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"82b27a3bb63c004872165d29e0fc451d386d3fed","unresolved":true,"context_lines":[{"line_number":267,"context_line":"                isinstance(self.l3plugin, plugin.OVNL3RouterPluginHA)):"},{"line_number":268,"context_line":"            return"},{"line_number":269,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":270,"context_line":"        router[\u0027ha\u0027] \u003d True"},{"line_number":271,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":272,"context_line":"                                                              \u0027ha\u0027, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"f2a56955_e67461e9","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":27},"updated":"2024-02-29 12:14:58.000000000","message":"nit: this is a partial solution for this specific problem. We should enable the \"ha\" and \"distributed\" extensions for OVN routers.","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"b2d41cffe822667d96293e73bb1ec1474830641f","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                isinstance(self.l3plugin, plugin.OVNL3RouterPluginHA)):"},{"line_number":268,"context_line":"            return"},{"line_number":269,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":270,"context_line":"        router[\u0027ha\u0027] \u003d True"},{"line_number":271,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":272,"context_line":"                                                              \u0027ha\u0027, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"43a6e7ba_90df931c","line":270,"range":{"start_line":270,"start_character":8,"end_line":270,"end_character":27},"in_reply_to":"f2a56955_e67461e9","updated":"2024-02-29 16:29:51.000000000","message":"I think you are right. However, as you might know, we have been testing this with a customer and they only need ha. Since all the customer testing (and our own internal) has gone well, I don\u0027t want to risk introducing some unexpected problem. I propose that we add the dvr option in a follow up. I\u0027m adding a TODO for it and I\u0027ll implement and test it early in the next cycle","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"}],"neutron/services/ovn_l3/service_providers/user_defined.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ca211c1b9c6e3c54524661d8383162f76e3f5f19","unresolved":true,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class UserDefinedHA(UserDefined):"},{"line_number":179,"context_line":"    ha_support \u003d base.MANDATORY"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _is_ha(self, router):"},{"line_number":182,"context_line":"        ha \u003d router.get(\u0027ha\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"f4c78aab_f5ef0a71","line":179,"updated":"2024-02-12 22:08:00.000000000","message":"Where is this used?","commit_id":"6deedc4dbbf4a7d2cbf89e6abd61b7f32dec0bfe"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"397b1d4b9164768407d46f6cce7a7d9c7710cc7a","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class UserDefinedHA(UserDefined):"},{"line_number":179,"context_line":"    ha_support \u003d base.MANDATORY"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _is_ha(self, router):"},{"line_number":182,"context_line":"        ha \u003d router.get(\u0027ha\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"a67c5efe_25046962","line":179,"in_reply_to":"f4c78aab_f5ef0a71","updated":"2024-02-14 00:43:39.000000000","message":"Here https://github.com/openstack/neutron/blob/master/neutron/services/l3_router/service_providers/driver_controller.py#L275 and https://github.com/openstack/neutron/blob/master/neutron/services/l3_router/service_providers/driver_controller.py#L304.","commit_id":"6deedc4dbbf4a7d2cbf89e6abd61b7f32dec0bfe"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e5bc7db3636fe3a683d20e2861bebc70db44445c","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _is_user_defined_provider(self, context, router):"},{"line_number":51,"context_line":"        flavor_id \u003d router.get(\u0027flavor_id\u0027)"},{"line_number":52,"context_line":"        if flavor_id is None or flavor_id is const.ATTR_NOT_SPECIFIED:"},{"line_number":53,"context_line":"            return False"},{"line_number":54,"context_line":"        flavor \u003d self._flavor_plugin.get_flavor(context, flavor_id)"},{"line_number":55,"context_line":"        provider \u003d self._flavor_plugin.get_flavor_next_provider("}],"source_content_type":"text/x-python","patch_set":25,"id":"15fc7f47_d045bf83","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":70},"updated":"2024-03-25 10:38:20.000000000","message":"Does this code belong to this patch? Or is this a bug fix for the currently implemented feature? In the second case, that should be presented in a separate patch and backported.","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d2b68a68ba6f939dbbe203cc49f801512c12a2cc","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _is_user_defined_provider(self, context, router):"},{"line_number":51,"context_line":"        flavor_id \u003d router.get(\u0027flavor_id\u0027)"},{"line_number":52,"context_line":"        if flavor_id is None or flavor_id is const.ATTR_NOT_SPECIFIED:"},{"line_number":53,"context_line":"            return False"},{"line_number":54,"context_line":"        flavor \u003d self._flavor_plugin.get_flavor(context, flavor_id)"},{"line_number":55,"context_line":"        provider \u003d self._flavor_plugin.get_flavor_next_provider("}],"source_content_type":"text/x-python","patch_set":25,"id":"6e43324e_9e73d37c","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":70},"in_reply_to":"15fc7f47_d045bf83","updated":"2024-03-25 23:59:40.000000000","message":"You are correct in that this change doesn\u0027t belong in this patch: https://review.opendev.org/c/openstack/neutron/+/914162","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e5bc7db3636fe3a683d20e2861bebc70db44445c","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":196,"context_line":"        is_ha \u003d self._is_ha(router)"},{"line_number":197,"context_line":"        router[\u0027ha\u0027] \u003d is_ha"},{"line_number":198,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":199,"context_line":"                                                              \u0027ha\u0027, is_ha)"}],"source_content_type":"text/x-python","patch_set":25,"id":"64da7e97_92067703","line":197,"range":{"start_line":196,"start_character":8,"end_line":197,"end_character":28},"updated":"2024-03-25 10:38:20.000000000","message":"If HA is mandatory, this should be the same as ``OVN_L3_HA_db_mixin._precommit_router_create`` because HA will be always True, regardless of the HA configuration or the value passed in the API. Actually if \"False\" is passed in the API, that will rejected before this call.\n```\n    router_db \u003d payload.metadata[\u0027router_db\u0027]\n    self.set_extra_attr_value(router_db, \u0027ha\u0027, True)\n```","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"04cb09d09e7296bc67ecba643cb3debcc3e6b678","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":196,"context_line":"        is_ha \u003d self._is_ha(router)"},{"line_number":197,"context_line":"        router[\u0027ha\u0027] \u003d is_ha"},{"line_number":198,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":199,"context_line":"                                                              \u0027ha\u0027, is_ha)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7da0461f_2c65c13f","line":197,"range":{"start_line":196,"start_character":8,"end_line":197,"end_character":28},"in_reply_to":"199db5fe_c6e45a09","updated":"2024-03-26 15:53:01.000000000","message":"And of course I\u0027ll adjust the documentation accordingly","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d2b68a68ba6f939dbbe203cc49f801512c12a2cc","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":196,"context_line":"        is_ha \u003d self._is_ha(router)"},{"line_number":197,"context_line":"        router[\u0027ha\u0027] \u003d is_ha"},{"line_number":198,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":199,"context_line":"                                                              \u0027ha\u0027, is_ha)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9003bc29_e938a573","line":197,"range":{"start_line":196,"start_character":8,"end_line":197,"end_character":28},"in_reply_to":"64da7e97_92067703","updated":"2024-03-25 23:59:40.000000000","message":"The way this code is in this revision allows the users to create ha and non ha routers with this driver: https://paste.openstack.org/show/bUFJj8tw4dcBXWkWBPfQ/. You are correct in the sense that the user cannot specify explicitly --no-ha. \n\nTo preserve the ability to create both ha and non ha routers with this drivers and even be explicit in the non ha case at the command / API level, I propose to set ha_support \u003d base.OPTIONAL. Please see the code change in the next revision (PS26) and the way it behaves here: https://paste.openstack.org/show/bkn2maS1OU14bGIJw5IX/","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"5251e5d7fb1af7d23d181cb1cec8c560c08b6bc5","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":196,"context_line":"        is_ha \u003d self._is_ha(router)"},{"line_number":197,"context_line":"        router[\u0027ha\u0027] \u003d is_ha"},{"line_number":198,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":199,"context_line":"                                                              \u0027ha\u0027, is_ha)"}],"source_content_type":"text/x-python","patch_set":25,"id":"e839c1af_1f598616","line":197,"range":{"start_line":196,"start_character":8,"end_line":197,"end_character":28},"in_reply_to":"7da0461f_2c65c13f","updated":"2024-03-27 01:06:52.000000000","message":"Done","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e0cd068fc16e08e3c2cfa298b5a837fc243b2f44","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":196,"context_line":"        is_ha \u003d self._is_ha(router)"},{"line_number":197,"context_line":"        router[\u0027ha\u0027] \u003d is_ha"},{"line_number":198,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":199,"context_line":"                                                              \u0027ha\u0027, is_ha)"}],"source_content_type":"text/x-python","patch_set":25,"id":"c36e2444_7dd8b7e5","line":197,"range":{"start_line":196,"start_character":8,"end_line":197,"end_character":28},"in_reply_to":"9003bc29_e938a573","updated":"2024-03-26 15:00:53.000000000","message":"If you are using base.OPTIONAL, why do we need ``HAUserDefined`` and ``UserDefined``? If we use OPTIONAL, then we can have one single class and the implementation of the HA feature will depend on the driver itself.","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"01d4814a3edee8095ca68b995dae9d11b49a390c","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"        router_db \u003d payload.metadata[\u0027router_db\u0027]"},{"line_number":196,"context_line":"        is_ha \u003d self._is_ha(router)"},{"line_number":197,"context_line":"        router[\u0027ha\u0027] \u003d is_ha"},{"line_number":198,"context_line":"        l3_attrs_db.ExtraAttributesMixin.set_extra_attr_value(router_db,"},{"line_number":199,"context_line":"                                                              \u0027ha\u0027, is_ha)"}],"source_content_type":"text/x-python","patch_set":25,"id":"199db5fe_c6e45a09","line":197,"range":{"start_line":196,"start_character":8,"end_line":197,"end_character":28},"in_reply_to":"c36e2444_7dd8b7e5","updated":"2024-03-26 15:46:07.000000000","message":"I think your proposal is sensible. Let\u0027s unify the classes under one with ha_support \u003d base.OPTIONAL. I\u0027ll also move the code to handle the ha flag under that unified class","commit_id":"f9f7760e2b8321ab5a7aed9863d0f9d3b3cd7171"}],"neutron/services/portforwarding/pf_plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"82b27a3bb63c004872165d29e0fc451d386d3fed","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        SvcPlugin(\u0027ovn-router\u0027, False),"},{"line_number":65,"context_line":"        SvcPlugin(\u0027neutron.services.ovn_l3.plugin.OVNL3RouterPlugin\u0027, False),"},{"line_number":66,"context_line":"        SvcPlugin(\u0027ovn-router-ha\u0027, False),"},{"line_number":67,"context_line":"        SvcPlugin(\u0027neutron.services.ovn_l3.plugin.OVNL3RouterPluginHA\u0027, False)]"},{"line_number":68,"context_line":"    plugins \u003d []"},{"line_number":69,"context_line":"    rpc_required \u003d False"},{"line_number":70,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"42d82add_93ccb124","line":67,"range":{"start_line":67,"start_character":78,"end_line":67,"end_character":79},"updated":"2024-02-29 12:14:58.000000000","message":"nit: if we probably are we going to add new elements, please add a comma here and push the closing bracket to the next line","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"b2d41cffe822667d96293e73bb1ec1474830641f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        SvcPlugin(\u0027ovn-router\u0027, False),"},{"line_number":65,"context_line":"        SvcPlugin(\u0027neutron.services.ovn_l3.plugin.OVNL3RouterPlugin\u0027, False),"},{"line_number":66,"context_line":"        SvcPlugin(\u0027ovn-router-ha\u0027, False),"},{"line_number":67,"context_line":"        SvcPlugin(\u0027neutron.services.ovn_l3.plugin.OVNL3RouterPluginHA\u0027, False)]"},{"line_number":68,"context_line":"    plugins \u003d []"},{"line_number":69,"context_line":"    rpc_required \u003d False"},{"line_number":70,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"08240b87_4e3f2440","line":67,"range":{"start_line":67,"start_character":78,"end_line":67,"end_character":79},"in_reply_to":"42d82add_93ccb124","updated":"2024-02-29 16:29:51.000000000","message":"Done","commit_id":"04cbd54ad404404117d1ba8d981d3e8ddcfb9b33"}],"neutron/tests/unit/services/ovn_l3/service_providers/test_user_defined.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"89d9a956b7748edb2b2bdaf3e193128cc6131253","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"1e03497b_d806fdac","line":125,"updated":"2024-02-26 12:13:58.000000000","message":"Could you please add some tests to cover UserDefinedHA, and perhaps for _process_precommit_router_create also in service_providers/ovn.py?","commit_id":"60b970630a9845c3a2754da49e90327472765100"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"14bbdc2dbe4c1b66798ed881a02b0618a74b5454","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"448ca975_407e4f3c","line":125,"in_reply_to":"1e03497b_d806fdac","updated":"2024-02-28 03:16:59.000000000","message":"Done","commit_id":"60b970630a9845c3a2754da49e90327472765100"}]}
