)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d033a8c819eeaa13aef4d33933e2d2774f8a019e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"a7f61650_1760440f","updated":"2023-06-30 17:52:46.000000000","message":"recheck neutron-tempest-plugin-ovn didn\u0027t complete building","commit_id":"e14f9d6141aeb3420d5880d885cce5de5d44d5bc"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"0266e37afdabd931386c6513dd3dda7418829d77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"77c6b7c9_6da31e7d","updated":"2023-07-05 17:34:27.000000000","message":"recheck zuul didn\u0027t seem to execute","commit_id":"399a63ad86a531421c413b6db5c5a3e23009ebd4"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"bee4c06da3eacafa2464371fee6905830ab59838","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"af3c7524_92ef7ae5","updated":"2023-11-05 14:48:32.000000000","message":"recheck\n\nFailure of neutron.tests.functional.plugins.ml2.drivers.ovn.mech_driver.test_mech_driver.TestExternalPorts.test_add_external_port_avoid_flapping unrelated to patch. Didn\u0027t reproduce locally","commit_id":"6ccdc2562f888abed3a74b4ff74316c311904ebc"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"286f45dabfbdc2a747d1a6328923b7c9a4bff801","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":69,"id":"34bf5889_099ef6ab","updated":"2023-11-30 01:33:47.000000000","message":"recheck failure not related to change","commit_id":"e35411e44a0d2a1fc5463a02cd9f18b2596951df"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"311bf12a71650e3f4470b056d261ea4b6fd977a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":70,"id":"23a0e88f_3ab41db7","updated":"2023-12-05 12:57:49.000000000","message":"I tested and it works with the sample Userdefined provider","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":76,"id":"f99efd6c_41870147","updated":"2023-12-15 17:04:36.000000000","message":"@Brian Haley, thanks for the review. I\u0027ve addressed all your concerns","commit_id":"eee08f9245a9ecfbf393da13c7964fe60dd78cce"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":80,"id":"124afa11_1992134b","updated":"2023-12-21 15:20:12.000000000","message":"-1 just for the questions.","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b69838d0e2d6049f357cb84035e9adb6f4ed7c70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":82,"id":"3c7b49ee_ff0864d9","updated":"2024-01-15 08:37:19.000000000","message":"As I see this is ready to be merged or am I missing something?","commit_id":"275a2c436ba7596a1c4d82e34f4a52cf9b038dcd"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ed4410498c0721ccbe68873aa13621b24a53a83","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":82,"id":"8aa1bac6_04db8419","in_reply_to":"3c7b49ee_ff0864d9","updated":"2024-01-15 18:27:20.000000000","message":"IMO ready to merge. Thanks!","commit_id":"275a2c436ba7596a1c4d82e34f4a52cf9b038dcd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"772efc81c40a7c606cad91ff9aed01c004a6f250","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":82,"id":"670da015_7c809035","in_reply_to":"8aa1bac6_04db8419","updated":"2024-01-17 09:08:05.000000000","message":"Agree, I think it is ready to merge.","commit_id":"275a2c436ba7596a1c4d82e34f4a52cf9b038dcd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7a873bde16bce66f53617fe3dce9cc3d91a6ae16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":83,"id":"e9c76b98_73331aa9","updated":"2024-01-17 16:10:55.000000000","message":"lgtm, thanks Miguel!","commit_id":"49366ecada529a929712ded7681d797c75b386cb"}],"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":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":1,"context_line":".. _config-router-flavor-ovn:"},{"line_number":2,"context_line":""},{"line_number":3,"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\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Creating a L3 OVN router with a user defined flavor"},{"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\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In this section we describe the steps necessary to create a router with a user"}],"source_content_type":"text/x-rst","patch_set":70,"id":"47f6518f_854fe7fd","line":4,"range":{"start_line":4,"start_character":32,"end_line":4,"end_character":44},"updated":"2023-12-01 15:33:37.000000000","message":"nit s/user-defined\n\nother places throughout","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":false,"context_lines":[{"line_number":1,"context_line":".. _config-router-flavor-ovn:"},{"line_number":2,"context_line":""},{"line_number":3,"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\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Creating a L3 OVN router with a user defined flavor"},{"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\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"In this section we describe the steps necessary to create a router with a user"}],"source_content_type":"text/x-rst","patch_set":70,"id":"96b9f218_9969d323","line":4,"range":{"start_line":4,"start_character":32,"end_line":4,"end_character":44},"in_reply_to":"47f6518f_854fe7fd","updated":"2023-12-15 17:04:36.000000000","message":"Done","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":16,"context_line":"   .. code-block:: console"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"      [service_providers]"},{"line_number":19,"context_line":"      service_provider \u003d L3_ROUTER_NAT:user-defined:neutron.services.ovn_l3.service_providers.user_defined.UserDefined"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#. Re-start the neutron server and verify the user defined provider has been"},{"line_number":22,"context_line":"   loaded:"}],"source_content_type":"text/x-rst","patch_set":70,"id":"1b7cd16b_7c1cb647","line":19,"range":{"start_line":19,"start_character":52,"end_line":19,"end_character":118},"updated":"2023-12-01 15:33:37.000000000","message":"Is there a stevedore (?) shortcut for this via a setup.cfg entry? Might be easier especially if it works in OSC commands below.","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":16,"context_line":"   .. code-block:: console"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"      [service_providers]"},{"line_number":19,"context_line":"      service_provider \u003d L3_ROUTER_NAT:user-defined:neutron.services.ovn_l3.service_providers.user_defined.UserDefined"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#. Re-start the neutron server and verify the user defined provider has been"},{"line_number":22,"context_line":"   loaded:"}],"source_content_type":"text/x-rst","patch_set":70,"id":"8d23e6de_c97e92b2","line":19,"range":{"start_line":19,"start_character":52,"end_line":19,"end_character":118},"in_reply_to":"1b7cd16b_7c1cb647","updated":"2023-12-15 17:04:36.000000000","message":"After reading this comment, I created a test environment where I tried defining a stevedore shortcut. After configuring and restarting the neutron server, I got a trace-back, of which this is an excerpt:\n\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron   File \"/opt/stack/neutron/neutron/services/l3_router/service_providers/driver_controller.py\", line 56, in _load_drivers\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron     service_base.load_drivers(plugin_constants.L3, self.l3_plugin))\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron   File \"/opt/stack/neutron/neutron/services/service_base.py\", line 46, in load_drivers\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron     drivers[provider[\u0027name\u0027]] \u003d importutils.import_object(\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_utils/importutils.py\", line 44, in import_object\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron     return import_class(import_str)(*args, **kwargs)\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_utils/importutils.py\", line 30, in import_class\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron     __import__(mod_str)\nDec 13 23:12:31 central neutron-server[156513]: ERROR neutron ValueError: Empty module name\n\nThis is a symptom of the fact that the community has not used much the Neutron Service Type / Flavors Framework, which underlies this patch. There are still some kinks that need to be ironed out, but that\u0027s beyond the scope of this patch. As a consequence, I have filed a bug, so this issue can be addressed in a follow up patch: https://bugs.launchpad.net/neutron/+bug/2046392","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"   .. code-block:: console"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"      $ openstack network flavor profile create --description \"User defined router flavor profile\" --enable --driver neutron.services.ovn_l3.service_providers.user_defined.UserDefined"},{"line_number":39,"context_line":"      +-------------+--------------------------------------------------------------------+"},{"line_number":40,"context_line":"      | Field       | Value                                                              |"},{"line_number":41,"context_line":"      +-------------+--------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"d5d42040_e9406e06","line":38,"updated":"2023-12-01 15:33:37.000000000","message":"So there is no \u0027name\u0027 field here just ID. I guess that\u0027s based on the original implementation of the DB code for router flavors.","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"   .. code-block:: console"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"      $ openstack network flavor profile create --description \"User defined router flavor profile\" --enable --driver neutron.services.ovn_l3.service_providers.user_defined.UserDefined"},{"line_number":39,"context_line":"      +-------------+--------------------------------------------------------------------+"},{"line_number":40,"context_line":"      | Field       | Value                                                              |"},{"line_number":41,"context_line":"      +-------------+--------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"6cec4200_0694cf95","line":38,"in_reply_to":"d5d42040_e9406e06","updated":"2023-12-15 17:04:36.000000000","message":"The service profile data model doesn\u0027t include a name attribute:\n\nhttps://github.com/openstack/neutron/blob/dcccd7cabe9fa959c88b477e55ad47b815d52518/neutron/db/models/flavor.py#L28\n\nA name attribute is not in the API definition either:\n\nhttps://docs.openstack.org/api-ref/network/v2/index.html#create-service-profile","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":44,"context_line":"      | enabled     | True                                                               |"},{"line_number":45,"context_line":"      | id          | a717c92c-63f7-47e8-9efb-6ad0d61c4875                               |"},{"line_number":46,"context_line":"      | meta_info   |                                                                    |"},{"line_number":47,"context_line":"      | project_id  | None                                                               |"},{"line_number":48,"context_line":"      +-------------+--------------------------------------------------------------------+"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"#. Create the router flavor:"}],"source_content_type":"text/x-rst","patch_set":70,"id":"57c9b648_47c23759","line":47,"range":{"start_line":47,"start_character":22,"end_line":47,"end_character":26},"updated":"2023-12-01 15:33:37.000000000","message":"Should this be set?","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":44,"context_line":"      | enabled     | True                                                               |"},{"line_number":45,"context_line":"      | id          | a717c92c-63f7-47e8-9efb-6ad0d61c4875                               |"},{"line_number":46,"context_line":"      | meta_info   |                                                                    |"},{"line_number":47,"context_line":"      | project_id  | None                                                               |"},{"line_number":48,"context_line":"      +-------------+--------------------------------------------------------------------+"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"#. Create the router flavor:"}],"source_content_type":"text/x-rst","patch_set":70,"id":"3370ba4e_a13a68ac","line":47,"range":{"start_line":47,"start_character":22,"end_line":47,"end_character":26},"in_reply_to":"57c9b648_47c23759","updated":"2023-12-15 17:04:36.000000000","message":"The service profile data model doesn\u0027t include project-id or tenant-id: \n\nhttps://github.com/openstack/neutron/blob/dcccd7cabe9fa959c88b477e55ad47b815d52518/neutron/db/models/flavor.py#L28\n\nproject-id or tenant-id are not in the API definition either:\n\nhttps://docs.openstack.org/api-ref/network/v2/index.html#create-service-profile\n\nI filed a bug for the client: https://bugs.launchpad.net/python-openstackclient/+bug/2046496","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":61,"context_line":"      | name                | user-defined-router-flavor                           |"},{"line_number":62,"context_line":"      | service_profile_ids | []                                                   |"},{"line_number":63,"context_line":"      | service_type        | L3_ROUTER_NAT                                        |"},{"line_number":64,"context_line":"      +---------------------+------------------------------------------------------+"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"#. Add service profile to router flavor:"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":70,"id":"9dde98bf_45045fe1","line":64,"updated":"2023-12-01 15:33:37.000000000","message":"And there is no project_id here?","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":61,"context_line":"      | name                | user-defined-router-flavor                           |"},{"line_number":62,"context_line":"      | service_profile_ids | []                                                   |"},{"line_number":63,"context_line":"      | service_type        | L3_ROUTER_NAT                                        |"},{"line_number":64,"context_line":"      +---------------------+------------------------------------------------------+"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"#. Add service profile to router flavor:"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":70,"id":"2f21912a_58ca5497","line":64,"in_reply_to":"9dde98bf_45045fe1","updated":"2023-12-15 17:04:36.000000000","message":"The service profile data model doesn\u0027t include project-id or tenant-id:\n\nhttps://github.com/openstack/neutron/blob/dcccd7cabe9fa959c88b477e55ad47b815d52518/neutron/db/models/flavor.py#L19\n\nproject-id or tenant-id are not in the API definition either:\n\nhttps://docs.openstack.org/api-ref/network/v2/index.html#create-flavor\n\nSo in this case, the openstack client behavior is the correct one","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   .. code-block:: console"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"      $ openstack router create router-of-user-defined-flavor --external-gateway public --flavor-id ccb1099a-672a-4505-888d-ac31f69b5c56 --max-width 100"},{"line_number":77,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":78,"context_line":"      | Field                   | Value                                                                  |"},{"line_number":79,"context_line":"      +-------------------------+------------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"792f8615_12be0a21","line":76,"range":{"start_line":76,"start_character":100,"end_line":76,"end_character":136},"updated":"2023-12-01 15:33:37.000000000","message":"I don\u0027t see this uuid previously here","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c547192b44d248c7a9710bb61d9892384a617274","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   .. code-block:: console"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"      $ openstack router create router-of-user-defined-flavor --external-gateway public --flavor-id ccb1099a-672a-4505-888d-ac31f69b5c56 --max-width 100"},{"line_number":77,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":78,"context_line":"      | Field                   | Value                                                                  |"},{"line_number":79,"context_line":"      +-------------------------+------------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"c9dc6f57_1cb2b312","line":76,"range":{"start_line":76,"start_character":100,"end_line":76,"end_character":136},"in_reply_to":"6e1f448d_309096c7","updated":"2023-12-05 13:07:52.000000000","message":"quick fix for flavor id:\nhttps://review.opendev.org/c/openstack/python-openstackclient/+/902654","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"311bf12a71650e3f4470b056d261ea4b6fd977a8","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   .. code-block:: console"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"      $ openstack router create router-of-user-defined-flavor --external-gateway public --flavor-id ccb1099a-672a-4505-888d-ac31f69b5c56 --max-width 100"},{"line_number":77,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":78,"context_line":"      | Field                   | Value                                                                  |"},{"line_number":79,"context_line":"      +-------------------------+------------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"6e1f448d_309096c7","line":76,"range":{"start_line":76,"start_character":100,"end_line":76,"end_character":136},"in_reply_to":"792f8615_12be0a21","updated":"2023-12-05 12:57:49.000000000","message":"+1\nIt should be name also but it fails at the moment","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   .. code-block:: console"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"      $ openstack router create router-of-user-defined-flavor --external-gateway public --flavor-id ccb1099a-672a-4505-888d-ac31f69b5c56 --max-width 100"},{"line_number":77,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":78,"context_line":"      | Field                   | Value                                                                  |"},{"line_number":79,"context_line":"      +-------------------------+------------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"6a6e3b57_67e59c9e","line":76,"range":{"start_line":76,"start_character":100,"end_line":76,"end_character":136},"in_reply_to":"c9dc6f57_1cb2b312","updated":"2023-12-15 17:04:36.000000000","message":"Fixed the uuid.\n \nThanks for the OSC patch @lajoskatona!","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7a873bde16bce66f53617fe3dce9cc3d91a6ae16","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   .. code-block:: console"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"      $ openstack router create router-of-user-defined-flavor --external-gateway public --flavor-id ccb1099a-672a-4505-888d-ac31f69b5c56 --max-width 100"},{"line_number":77,"context_line":"      +-------------------------+------------------------------------------------------------------------+"},{"line_number":78,"context_line":"      | Field                   | Value                                                                  |"},{"line_number":79,"context_line":"      +-------------------------+------------------------------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":70,"id":"8ed2f3dc_97a0ad11","line":76,"range":{"start_line":76,"start_character":100,"end_line":76,"end_character":136},"in_reply_to":"c9dc6f57_1cb2b312","updated":"2024-01-17 16:10:55.000000000","message":"This uuid is still the same, is it supposed to be e47c1c5c-629b-4c48-b49a-78abe6ac7696 ?","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"        # in the case of router ports we also need to"},{"line_number":693,"context_line":"        # track the creation and update of the LRP OVN objects"},{"line_number":694,"context_line":"        if ovn_utils.is_lsp_router_port(port):"},{"line_number":695,"context_line":"            if self._is_ovn_router_flavor_port(context, port):"},{"line_number":696,"context_line":"                ovn_revision_numbers_db.create_initial_revision("},{"line_number":697,"context_line":"                    context.plugin_context, port[\u0027id\u0027],"},{"line_number":698,"context_line":"                    ovn_const.TYPE_ROUTER_PORTS,"}],"source_content_type":"text/x-python","patch_set":80,"id":"236f78ed_d3356298","line":695,"range":{"start_line":694,"start_character":8,"end_line":695,"end_character":62},"updated":"2023-12-21 15:20:12.000000000","message":"we can combine both conditions","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":false,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"        # in the case of router ports we also need to"},{"line_number":693,"context_line":"        # track the creation and update of the LRP OVN objects"},{"line_number":694,"context_line":"        if ovn_utils.is_lsp_router_port(port):"},{"line_number":695,"context_line":"            if self._is_ovn_router_flavor_port(context, port):"},{"line_number":696,"context_line":"                ovn_revision_numbers_db.create_initial_revision("},{"line_number":697,"context_line":"                    context.plugin_context, port[\u0027id\u0027],"},{"line_number":698,"context_line":"                    ovn_const.TYPE_ROUTER_PORTS,"}],"source_content_type":"text/x-python","patch_set":80,"id":"1d6b41c8_2a67fbe0","line":695,"range":{"start_line":694,"start_character":8,"end_line":695,"end_character":62},"in_reply_to":"236f78ed_d3356298","updated":"2023-12-27 00:27:04.000000000","message":"Done","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":837,"context_line":"            self._insert_port_provisioning_block(context.plugin_context,"},{"line_number":838,"context_line":"                                                 port[\u0027id\u0027])"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"        if ovn_utils.is_lsp_router_port(port):"},{"line_number":841,"context_line":"            if self._is_ovn_router_flavor_port(context, port):"},{"line_number":842,"context_line":"                # handle the case when an existing port is added to a"},{"line_number":843,"context_line":"                # logical router so we need to track the creation of the lrp"},{"line_number":844,"context_line":"                if not ovn_utils.is_lsp_router_port(original_port):"}],"source_content_type":"text/x-python","patch_set":80,"id":"633c5dd6_7aa0014d","line":841,"range":{"start_line":840,"start_character":8,"end_line":841,"end_character":62},"updated":"2023-12-21 15:20:12.000000000","message":"nit: we can combine both conditions","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":false,"context_lines":[{"line_number":837,"context_line":"            self._insert_port_provisioning_block(context.plugin_context,"},{"line_number":838,"context_line":"                                                 port[\u0027id\u0027])"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"        if ovn_utils.is_lsp_router_port(port):"},{"line_number":841,"context_line":"            if self._is_ovn_router_flavor_port(context, port):"},{"line_number":842,"context_line":"                # handle the case when an existing port is added to a"},{"line_number":843,"context_line":"                # logical router so we need to track the creation of the lrp"},{"line_number":844,"context_line":"                if not ovn_utils.is_lsp_router_port(original_port):"}],"source_content_type":"text/x-python","patch_set":80,"id":"ddf03bcc_3d7424b7","line":841,"range":{"start_line":840,"start_character":8,"end_line":841,"end_character":62},"in_reply_to":"633c5dd6_7aa0014d","updated":"2023-12-27 00:27:04.000000000","message":"Done","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":436,"context_line":"    def _create_lrouter_port(self, context, port):"},{"line_number":437,"context_line":"        router_id \u003d port[\u0027device_id\u0027]"},{"line_number":438,"context_line":"        iface_info \u003d self._ovn_client._l3_plugin._add_neutron_router_interface("},{"line_number":439,"context_line":"            context, router_id, {\u0027port_id\u0027: port[\u0027id\u0027]})"},{"line_number":440,"context_line":"        self._ovn_client.create_router_port(context, router_id, iface_info)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _check_subnet_global_dhcp_opts(self):"}],"source_content_type":"text/x-python","patch_set":70,"id":"32809cf7_235c968d","line":439,"updated":"2023-12-01 15:33:37.000000000","message":"Reminder to verify dropping may_exist\u003dTrue is Ok here","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":436,"context_line":"    def _create_lrouter_port(self, context, port):"},{"line_number":437,"context_line":"        router_id \u003d port[\u0027device_id\u0027]"},{"line_number":438,"context_line":"        iface_info \u003d self._ovn_client._l3_plugin._add_neutron_router_interface("},{"line_number":439,"context_line":"            context, router_id, {\u0027port_id\u0027: port[\u0027id\u0027]})"},{"line_number":440,"context_line":"        self._ovn_client.create_router_port(context, router_id, iface_info)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _check_subnet_global_dhcp_opts(self):"}],"source_content_type":"text/x-python","patch_set":70,"id":"fcfede86_4ee0c22b","line":439,"in_reply_to":"32809cf7_235c968d","updated":"2023-12-15 17:04:36.000000000","message":"Yes, it is OK. The may_exist argument was needed when _add_neutron_router_interface was called both from here and from https://review.opendev.org/c/openstack/neutron/+/883988/70/neutron/services/ovn_l3/plugin.py#b250. In the latter case, may_exist was not explicitly passed, so it took its default value of False and _add_neutron_router_interface raised an exception if the port already existed. Now, _add_neutron_router_interface is only called from here and an exception will never be raised if the port already exists. As a consequence, I removed the may_exist argument from _add_neutron_router_interface, because we don\u0027t need it anymore","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":184,"context_line":"            context, router_id, ovn_const.TYPE_ROUTERS,"},{"line_number":185,"context_line":"            std_attr_id\u003drouter_db.standard_attr.id)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def create_router(self, context, router):"},{"line_number":188,"context_line":"        router \u003d super(OVNL3RouterPlugin, self).create_router(context, router)"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            self._ovn_client.create_router(context, router)"},{"line_number":191,"context_line":"        except Exception:"},{"line_number":192,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":193,"context_line":"                # Delete the logical router"}],"source_content_type":"text/x-python","patch_set":80,"id":"271b3c64_aadc5433","side":"PARENT","line":190,"range":{"start_line":187,"start_character":4,"end_line":190,"end_character":59},"updated":"2023-12-21 15:20:12.000000000","message":"Just to be sure: this method is now in OvnDriver, using the \"@registry.receives(resources.ROUTER, [events.AFTER_CREATE])\". Right?","commit_id":"ef3089547b5d5d141a0432f43172e9211bbe2118"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":true,"context_lines":[{"line_number":184,"context_line":"            context, router_id, ovn_const.TYPE_ROUTERS,"},{"line_number":185,"context_line":"            std_attr_id\u003drouter_db.standard_attr.id)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def create_router(self, context, router):"},{"line_number":188,"context_line":"        router \u003d super(OVNL3RouterPlugin, self).create_router(context, router)"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            self._ovn_client.create_router(context, router)"},{"line_number":191,"context_line":"        except Exception:"},{"line_number":192,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":193,"context_line":"                # Delete the logical router"}],"source_content_type":"text/x-python","patch_set":80,"id":"d3b257ab_b82cede5","side":"PARENT","line":190,"range":{"start_line":187,"start_character":4,"end_line":190,"end_character":59},"in_reply_to":"271b3c64_aadc5433","updated":"2023-12-27 00:27:04.000000000","message":"Correct","commit_id":"ef3089547b5d5d141a0432f43172e9211bbe2118"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":196,"context_line":"                                                             router[\u0027id\u0027])"},{"line_number":197,"context_line":"        return router"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def update_router(self, context, id, router):"},{"line_number":200,"context_line":"        original_router \u003d self.get_router(context, id)"},{"line_number":201,"context_line":"        result \u003d super(OVNL3RouterPlugin, self).update_router(context, id,"},{"line_number":202,"context_line":"                                                              router)"}],"source_content_type":"text/x-python","patch_set":80,"id":"b9c5ee98_e708c933","side":"PARENT","line":199,"range":{"start_line":199,"start_character":5,"end_line":199,"end_character":49},"updated":"2023-12-21 15:20:12.000000000","message":"ditto","commit_id":"ef3089547b5d5d141a0432f43172e9211bbe2118"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":true,"context_lines":[{"line_number":196,"context_line":"                                                             router[\u0027id\u0027])"},{"line_number":197,"context_line":"        return router"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def update_router(self, context, id, router):"},{"line_number":200,"context_line":"        original_router \u003d self.get_router(context, id)"},{"line_number":201,"context_line":"        result \u003d super(OVNL3RouterPlugin, self).update_router(context, id,"},{"line_number":202,"context_line":"                                                              router)"}],"source_content_type":"text/x-python","patch_set":80,"id":"ce2bae0e_37794fd9","side":"PARENT","line":199,"range":{"start_line":199,"start_character":5,"end_line":199,"end_character":49},"in_reply_to":"b9c5ee98_e708c933","updated":"2023-12-27 00:27:04.000000000","message":"Correct","commit_id":"ef3089547b5d5d141a0432f43172e9211bbe2118"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":211,"context_line":"                                                             revert_router)"},{"line_number":212,"context_line":"        return result"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def delete_router(self, context, id):"},{"line_number":215,"context_line":"        original_router \u003d self.get_router(context, id)"},{"line_number":216,"context_line":"        super(OVNL3RouterPlugin, self).delete_router(context, id)"},{"line_number":217,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":80,"id":"9d8e7a36_40b3d07c","side":"PARENT","line":214,"range":{"start_line":214,"start_character":4,"end_line":214,"end_character":41},"updated":"2023-12-21 15:20:12.000000000","message":"ditto","commit_id":"ef3089547b5d5d141a0432f43172e9211bbe2118"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":true,"context_lines":[{"line_number":211,"context_line":"                                                             revert_router)"},{"line_number":212,"context_line":"        return result"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def delete_router(self, context, id):"},{"line_number":215,"context_line":"        original_router \u003d self.get_router(context, id)"},{"line_number":216,"context_line":"        super(OVNL3RouterPlugin, self).delete_router(context, id)"},{"line_number":217,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":80,"id":"d64a1844_52a888a2","side":"PARENT","line":214,"range":{"start_line":214,"start_character":4,"end_line":214,"end_character":41},"in_reply_to":"9d8e7a36_40b3d07c","updated":"2023-12-27 00:27:04.000000000","message":"Correct","commit_id":"ef3089547b5d5d141a0432f43172e9211bbe2118"}],"neutron/services/ovn_l3/service_providers/driver_controller.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        # loads up the OVN provider automatically and sets it as default."},{"line_number":57,"context_line":"        super(_OvnPlusProviderConfiguration, self).__init__("},{"line_number":58,"context_line":"            svc_type\u003dplugin_constants.L3)"},{"line_number":59,"context_line":"        path \u003d \u0027neutron.services.ovn_l3.service_providers.ovn.OvnDriver\u0027"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.add_provider({\u0027service_type\u0027: plugin_constants.L3,"},{"line_number":62,"context_line":"                               \u0027name\u0027: \u0027ovn\u0027, \u0027driver\u0027: path, \u0027default\u0027: True})"}],"source_content_type":"text/x-python","patch_set":80,"id":"17059b58_12c47ec1","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":2},"updated":"2023-12-21 15:20:12.000000000","message":"Why don\u0027t we have a configuration \"entry_point\" for the OVN L3 service providers? Pointing to this default value.","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        # loads up the OVN provider automatically and sets it as default."},{"line_number":57,"context_line":"        super(_OvnPlusProviderConfiguration, self).__init__("},{"line_number":58,"context_line":"            svc_type\u003dplugin_constants.L3)"},{"line_number":59,"context_line":"        path \u003d \u0027neutron.services.ovn_l3.service_providers.ovn.OvnDriver\u0027"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.add_provider({\u0027service_type\u0027: plugin_constants.L3,"},{"line_number":62,"context_line":"                               \u0027name\u0027: \u0027ovn\u0027, \u0027driver\u0027: path, \u0027default\u0027: True})"}],"source_content_type":"text/x-python","patch_set":80,"id":"6a13c479_e629999f","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":2},"in_reply_to":"17059b58_12c47ec1","updated":"2023-12-27 00:27:04.000000000","message":"Please my response to https://review.opendev.org/c/openstack/neutron/+/883988/80/doc/source/admin/config-router-flavor-ovn.rst#19. So for now, it is outside the scope of this patch, but I\u0027ll do it in an upcoming one","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"}],"neutron/services/ovn_l3/service_providers/ovn.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":90,"context_line":"            self.l3plugin._ovn_client.update_router(context, updated, original)"},{"line_number":91,"context_line":"        except Exception:"},{"line_number":92,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":93,"context_line":"                LOG.exception(\u0027Unable to update lrouter for %s\u0027, router_id)"},{"line_number":94,"context_line":"                revert_router \u003d {\u0027router\u0027: original}"},{"line_number":95,"context_line":"                self.l3plugin.update_router(context, router_id, revert_router)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":70,"id":"2c3cb5aa_364477a1","line":93,"range":{"start_line":93,"start_character":56,"end_line":93,"end_character":59},"updated":"2023-12-01 15:33:37.000000000","message":"Can remove \u0027for\u0027","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.l3plugin._ovn_client.update_router(context, updated, original)"},{"line_number":91,"context_line":"        except Exception:"},{"line_number":92,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":93,"context_line":"                LOG.exception(\u0027Unable to update lrouter for %s\u0027, router_id)"},{"line_number":94,"context_line":"                revert_router \u003d {\u0027router\u0027: original}"},{"line_number":95,"context_line":"                self.l3plugin.update_router(context, router_id, revert_router)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":70,"id":"71af6b49_958def02","line":93,"range":{"start_line":93,"start_character":56,"end_line":93,"end_character":59},"in_reply_to":"2c3cb5aa_364477a1","updated":"2023-12-15 17:04:36.000000000","message":"Done","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91e2c56e03ebc98c5379ff7d6552397aad749024","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"@registry.has_registry_receivers"},{"line_number":40,"context_line":"class OvnDriver(base.L3ServiceProvider):"},{"line_number":41,"context_line":"    ha_support \u003d base.MANDATORY"},{"line_number":42,"context_line":"    dvr_support \u003d base.MANDATORY"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"7a26b1df_1bdf1816","line":40,"range":{"start_line":40,"start_character":21,"end_line":40,"end_character":38},"updated":"2023-12-21 15:20:12.000000000","message":"for debate: I\u0027m wondering if we should provide an API class for the OVN providers, creating the interfaces for \"_process_router_create_precommit\", \"_process_router_create\", etc...","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dd5b2dbd3d8151cc341c9e9958fd440490ca29b1","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"@registry.has_registry_receivers"},{"line_number":40,"context_line":"class OvnDriver(base.L3ServiceProvider):"},{"line_number":41,"context_line":"    ha_support \u003d base.MANDATORY"},{"line_number":42,"context_line":"    dvr_support \u003d base.MANDATORY"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9feb711b_dbdf292c","line":40,"range":{"start_line":40,"start_character":21,"end_line":40,"end_character":38},"in_reply_to":"7a26b1df_1bdf1816","updated":"2023-12-27 00:27:04.000000000","message":"I think what you meant is \"provide an API class for the service type providers (aka router flavor drivers)\". I don\u0027t see users defining drivers, beyond the one who requested this. So maybe it is not justified. But if you or another team member feel strongly about it, I\u0027ll be happy to add it","commit_id":"683dd7ef73e16911f663fd0060806fd96eccc6cf"}],"neutron/services/ovn_l3/service_providers/user_defined.py":[{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"d3442029814715cedc4f4ee99bf673eb326528ae","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        LOG.debug(\u0027Got request to associate a router to user defined flavor \u0027"},{"line_number":64,"context_line":"                  \u0027%s\u0027, router)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @registry.receives(resources.ROUTER, [events.AFTER_CREATE])"},{"line_number":67,"context_line":"    def _process_router_create(self, resource, event, trigger, payload\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"14eb5c17_7d302433","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":30},"updated":"2023-08-22 17:05:23.000000000","message":"Maybe it was supposed to be router_id? like in _process_router_update\nsince I get object memory address shown in log","commit_id":"13988cc43ea6978bb7a2c26e8cf9d033eeda569c"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"79fd91f778ab40a677e0c08661436b65bba8d2ad","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        LOG.debug(\u0027Got request to associate a router to user defined flavor \u0027"},{"line_number":64,"context_line":"                  \u0027%s\u0027, router)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @registry.receives(resources.ROUTER, [events.AFTER_CREATE])"},{"line_number":67,"context_line":"    def _process_router_create(self, resource, event, trigger, payload\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"56243043_6a79412f","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":30},"in_reply_to":"14eb5c17_7d302433","updated":"2023-08-22 17:19:54.000000000","message":"Noticed also router details after it, never mind.","commit_id":"13988cc43ea6978bb7a2c26e8cf9d033eeda569c"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"d3442029814715cedc4f4ee99bf673eb326528ae","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":71,"context_line":"            return"},{"line_number":72,"context_line":"        LOG.debug(\u0027Got request to create a router of user defined flavor %s\u0027,"},{"line_number":73,"context_line":"                  router)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @registry.receives(resources.ROUTER, [events.AFTER_UPDATE])"},{"line_number":76,"context_line":"    def _process_router_update(self, resource, event, trigger, payload\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"d2feeea8_4fcafbae","line":73,"range":{"start_line":73,"start_character":18,"end_line":73,"end_character":24},"updated":"2023-08-22 17:05:23.000000000","message":"Maybe it was supposed to be router_id? like in _process_router_update\nsince I get object memory address shown in log","commit_id":"13988cc43ea6978bb7a2c26e8cf9d033eeda569c"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"79fd91f778ab40a677e0c08661436b65bba8d2ad","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":71,"context_line":"            return"},{"line_number":72,"context_line":"        LOG.debug(\u0027Got request to create a router of user defined flavor %s\u0027,"},{"line_number":73,"context_line":"                  router)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @registry.receives(resources.ROUTER, [events.AFTER_UPDATE])"},{"line_number":76,"context_line":"    def _process_router_update(self, resource, event, trigger, payload\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5d29f8f8_6a815952","line":73,"range":{"start_line":73,"start_character":18,"end_line":73,"end_character":24},"in_reply_to":"d2feeea8_4fcafbae","updated":"2023-08-22 17:19:54.000000000","message":"Noticed also router details after it, never mind.","commit_id":"13988cc43ea6978bb7a2c26e8cf9d033eeda569c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        context \u003d payload.context"},{"line_number":61,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        LOG.debug(\u0027Got request to associate a router to user defined flavor \u0027"},{"line_number":64,"context_line":"                  \u0027%s\u0027, router)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @registry.receives(resources.ROUTER, [events.AFTER_CREATE])"}],"source_content_type":"text/x-python","patch_set":70,"id":"f42f3c52_5af3c2f5","line":63,"range":{"start_line":63,"start_character":56,"end_line":63,"end_character":68},"updated":"2023-12-01 15:33:37.000000000","message":"nit: user-defined\n\nAnd another generic nit is when I first read the string I thought the \"%s\" would be printing the flavor ID, but it\u0027s actually the router ID. Some of the strings below use \u0027id\u0027 so maybe just a small tweak?\n\n\u0027Got request to associate a user-defined flavor to router with id %s\u0027 ?","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        context \u003d payload.context"},{"line_number":61,"context_line":"        if not self._is_user_defined_provider(context, router):"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        LOG.debug(\u0027Got request to associate a router to user defined flavor \u0027"},{"line_number":64,"context_line":"                  \u0027%s\u0027, router)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @registry.receives(resources.ROUTER, [events.AFTER_CREATE])"}],"source_content_type":"text/x-python","patch_set":70,"id":"1bf39d1e_2b1fe21d","line":63,"range":{"start_line":63,"start_character":56,"end_line":63,"end_character":68},"in_reply_to":"f42f3c52_5af3c2f5","updated":"2023-12-15 17:04:36.000000000","message":"Done","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":668,"context_line":"        # status as up, triggering only a LogicalSwitchPortUpdateUpEvent."},{"line_number":669,"context_line":"        self._create_router_port(portbindings.VNIC_DIRECT)"},{"line_number":670,"context_line":"        self.assertEqual(test_down_event.get_count(), 0)"},{"line_number":671,"context_line":"        time.sleep(1)"},{"line_number":672,"context_line":"        self.assertEqual(test_up_event.get_count(), 1)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"    def test_external_port_create_vnic_direct(self):"}],"source_content_type":"text/x-python","patch_set":70,"id":"4ab04729_3a4b4579","line":671,"updated":"2023-12-01 15:33:37.000000000","message":"Q: would it be better to do a \"wait until\" type loop here? A sleep seems arbitrary","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":false,"context_lines":[{"line_number":668,"context_line":"        # status as up, triggering only a LogicalSwitchPortUpdateUpEvent."},{"line_number":669,"context_line":"        self._create_router_port(portbindings.VNIC_DIRECT)"},{"line_number":670,"context_line":"        self.assertEqual(test_down_event.get_count(), 0)"},{"line_number":671,"context_line":"        time.sleep(1)"},{"line_number":672,"context_line":"        self.assertEqual(test_up_event.get_count(), 1)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"    def test_external_port_create_vnic_direct(self):"}],"source_content_type":"text/x-python","patch_set":70,"id":"5d044202_3d505b90","line":671,"in_reply_to":"4ab04729_3a4b4579","updated":"2023-12-15 17:04:36.000000000","message":"Done","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4b3abef2794967753f480e6a68efafd9229ae950","unresolved":true,"context_lines":[{"line_number":2225,"context_line":""},{"line_number":2226,"context_line":"    @mock.patch(\u0027neutron.objects.router.Router.get_object\u0027)"},{"line_number":2227,"context_line":"    def test_requested_fixed_ip_address_v6_slaac_router_iface(self, gr):"},{"line_number":2228,"context_line":"        gr.return_value \u003d {\u0027flavor_id\u0027: \u0027\u0027}"},{"line_number":2229,"context_line":"        with self.subnet(gateway_ip\u003d\u0027fe80::1\u0027,"},{"line_number":2230,"context_line":"                         cidr\u003d\u0027fe80::/64\u0027,"},{"line_number":2231,"context_line":"                         ip_version\u003dconstants.IP_VERSION_6,"}],"source_content_type":"text/x-python","patch_set":70,"id":"e724e6dd_ee510d19","line":2228,"updated":"2023-12-01 15:33:37.000000000","message":"Q: so is there a new call to get a router object that needs to be mocked at a higher level? Just seems a little strange to return a dict that has a single key in it.","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f731387177958ef94e62873afb9f3409c879a315","unresolved":true,"context_lines":[{"line_number":2225,"context_line":""},{"line_number":2226,"context_line":"    @mock.patch(\u0027neutron.objects.router.Router.get_object\u0027)"},{"line_number":2227,"context_line":"    def test_requested_fixed_ip_address_v6_slaac_router_iface(self, gr):"},{"line_number":2228,"context_line":"        gr.return_value \u003d {\u0027flavor_id\u0027: \u0027\u0027}"},{"line_number":2229,"context_line":"        with self.subnet(gateway_ip\u003d\u0027fe80::1\u0027,"},{"line_number":2230,"context_line":"                         cidr\u003d\u0027fe80::/64\u0027,"},{"line_number":2231,"context_line":"                         ip_version\u003dconstants.IP_VERSION_6,"}],"source_content_type":"text/x-python","patch_set":70,"id":"fb8e7dbe_f2ffc64d","line":2228,"in_reply_to":"e724e6dd_ee510d19","updated":"2023-12-15 17:04:36.000000000","message":"This mock enables the execution of this method https://review.opendev.org/c/openstack/neutron/+/883988/76/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py#701, which uses precisely neutron.objects.router.Router.get_object to get the router. Why would we want to mock something else?","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7a873bde16bce66f53617fe3dce9cc3d91a6ae16","unresolved":true,"context_lines":[{"line_number":2225,"context_line":""},{"line_number":2226,"context_line":"    @mock.patch(\u0027neutron.objects.router.Router.get_object\u0027)"},{"line_number":2227,"context_line":"    def test_requested_fixed_ip_address_v6_slaac_router_iface(self, gr):"},{"line_number":2228,"context_line":"        gr.return_value \u003d {\u0027flavor_id\u0027: \u0027\u0027}"},{"line_number":2229,"context_line":"        with self.subnet(gateway_ip\u003d\u0027fe80::1\u0027,"},{"line_number":2230,"context_line":"                         cidr\u003d\u0027fe80::/64\u0027,"},{"line_number":2231,"context_line":"                         ip_version\u003dconstants.IP_VERSION_6,"}],"source_content_type":"text/x-python","patch_set":70,"id":"1fc8404d_68dbba89","line":2228,"in_reply_to":"fb8e7dbe_f2ffc64d","updated":"2024-01-17 16:10:55.000000000","message":"It just seemed like there would have been a router object (or self.router()) and you needed to add the flavor ID to it. But this is fine since we\u0027re in the port test class here.","commit_id":"2df526651345ba60df02f14c17be00f748cd7b84"}]}
