)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Roberto Bartzen Acosta \u003crbartzen@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-05-28 09:35:50 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2/OVN] Add external_ids key for Static Routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch updates the method for creating static routes in OVN backend"},{"line_number":10,"context_line":"and updates previously created static routes rules to include the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dac9c7cd_0fbf3654","line":7,"range":{"start_line":7,"start_character":14,"end_line":7,"end_character":26},"updated":"2024-07-08 15:02:48.000000000","message":"What you are adding is the key ``external_ids.neutron:is_static_route`` in the Static Routes.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Roberto Bartzen Acosta \u003crbartzen@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-05-28 09:35:50 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2/OVN] Add external_ids key for Static Routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch updates the method for creating static routes in OVN backend"},{"line_number":10,"context_line":"and updates previously created static routes rules to include the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"23a61bec_b4c551f7","line":7,"range":{"start_line":7,"start_character":14,"end_line":7,"end_character":26},"in_reply_to":"dac9c7cd_0fbf3654","updated":"2024-08-21 22:00:59.000000000","message":"Done","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2/OVN] Add external_ids key for Static Routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch updates the method for creating static routes in OVN backend"},{"line_number":10,"context_line":"and updates previously created static routes rules to include the"},{"line_number":11,"context_line":"Neutron\u0027s owner key. This static route update task runs only once"},{"line_number":12,"context_line":"during the maintenance task, and if all entries are already configured,"},{"line_number":13,"context_line":"no action is performed."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9067bfb9_e96e2e80","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":19},"updated":"2024-07-08 15:02:48.000000000","message":"This is not explaining the purpose of this patch. Something like: \"The Neutron owned Static Routes created in the OVN database are marked with the external_ids key ``neutron:is_static_route``. This mark will be used by the OVN DB sync tool to distinguish the Neutron created Static Routes from those added externally; the second ones should no be altered during the sync process\"","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2/OVN] Add external_ids key for Static Routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch updates the method for creating static routes in OVN backend"},{"line_number":10,"context_line":"and updates previously created static routes rules to include the"},{"line_number":11,"context_line":"Neutron\u0027s owner key. This static route update task runs only once"},{"line_number":12,"context_line":"during the maintenance task, and if all entries are already configured,"},{"line_number":13,"context_line":"no action is performed."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"16652793_a7589182","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":19},"in_reply_to":"9067bfb9_e96e2e80","updated":"2024-08-21 22:00:59.000000000","message":"Done","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3c0423e7_9d189a30","updated":"2024-02-20 15:36:46.000000000","message":"Thanks for your review Brian ;)","commit_id":"1592e465c31f834cddc29a924f4a433a9191f8b0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d7fab026e3d075d2d87edb197a843c8cc048ca5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"bfcf3522_8ece3c85","updated":"2024-02-22 23:14:24.000000000","message":"Not sure why the tests failed, seems unrelated","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"69d8d50a276678bfbc9459d9f63a332561d9347c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"dd3ed00d_ff015abb","updated":"2024-02-23 16:31:57.000000000","message":"recheck, https://review.opendev.org/c/openstack/neutron/+/909998 merged","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e16acbf00a477cce64257fe6ff4bd671b364541d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0eb8759c_5ec7c561","updated":"2024-03-25 00:29:44.000000000","message":"Needs a manual rebase","commit_id":"5b5d081c6913119819fcb7e511ce9ec5b2c92feb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c1181225_9df6df12","updated":"2024-07-08 15:02:48.000000000","message":"There are some issues in the functional testing","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"neutron/common/ovn/constants.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"568bc0efe1bc803faa6864d7c9b4bfe08d856d92","unresolved":true,"context_lines":[{"line_number":56,"context_line":"METADATA_LIVENESS_CHECK_EXT_ID_KEY \u003d \u0027neutron:metadata_liveness_check_at\u0027"},{"line_number":57,"context_line":"OVN_PORT_BINDING_PROFILE \u003d portbindings.PROFILE"},{"line_number":58,"context_line":"OVN_HOST_ID_EXT_ID_KEY \u003d \u0027neutron:host_id\u0027"},{"line_number":59,"context_line":"OVN_ROUTER_IS_STATIC_ROUTE \u003d \u0027neutron:is_static_route\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MIGRATING_ATTR \u003d \u0027migrating_to\u0027"},{"line_number":62,"context_line":"OVN_ROUTER_PORT_OPTION_KEYS \u003d [\u0027router-port\u0027, \u0027nat-addresses\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"51d4857b_a2dc65b9","line":59,"updated":"2024-02-22 17:25:59.000000000","message":"This should have EXT_ID_KEY in it, right?","commit_id":"9f2ca21461bd12bf4be5a297e25ec2b354bf0e5f"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e3ab1584e323b023143852a728c9b4f40c3a71e9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"METADATA_LIVENESS_CHECK_EXT_ID_KEY \u003d \u0027neutron:metadata_liveness_check_at\u0027"},{"line_number":57,"context_line":"OVN_PORT_BINDING_PROFILE \u003d portbindings.PROFILE"},{"line_number":58,"context_line":"OVN_HOST_ID_EXT_ID_KEY \u003d \u0027neutron:host_id\u0027"},{"line_number":59,"context_line":"OVN_ROUTER_IS_STATIC_ROUTE \u003d \u0027neutron:is_static_route\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MIGRATING_ATTR \u003d \u0027migrating_to\u0027"},{"line_number":62,"context_line":"OVN_ROUTER_PORT_OPTION_KEYS \u003d [\u0027router-port\u0027, \u0027nat-addresses\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"b67a15e7_f36f5959","line":59,"in_reply_to":"51d4857b_a2dc65b9","updated":"2024-02-22 18:08:07.000000000","message":"I think so, I\u0027ll review the name of this macro so it doesn\u0027t become huge with the inclusion of the EXT_ID_KEY suffix. Thanks","commit_id":"9f2ca21461bd12bf4be5a297e25ec2b354bf0e5f"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/commands.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class SetStaticRouteCommand(command.BaseCommand):"},{"line_number":616,"context_line":"    def __init__(self, api, sroute, **columns):"},{"line_number":617,"context_line":"        super(SetStaticRouteCommand, self).__init__(api)"},{"line_number":618,"context_line":"        self.sroute \u003d sroute"},{"line_number":619,"context_line":"        self.columns \u003d columns"},{"line_number":620,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7389cce3_1eadba1a","line":617,"updated":"2024-02-15 03:11:59.000000000","message":"Should use the new style:\n\nsuper().__init__(api)","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class SetStaticRouteCommand(command.BaseCommand):"},{"line_number":616,"context_line":"    def __init__(self, api, sroute, **columns):"},{"line_number":617,"context_line":"        super(SetStaticRouteCommand, self).__init__(api)"},{"line_number":618,"context_line":"        self.sroute \u003d sroute"},{"line_number":619,"context_line":"        self.columns \u003d columns"},{"line_number":620,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ccda88d0_022cb379","line":617,"in_reply_to":"7389cce3_1eadba1a","updated":"2024-02-20 15:36:46.000000000","message":"Done","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        except idlutils.RowNotFound:"},{"line_number":627,"context_line":"            msg \u003d _(\"Logical Router Static Route %s does not exist\") % \\"},{"line_number":628,"context_line":"                self.sroute"},{"line_number":629,"context_line":"            raise RuntimeError(msg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"17af0297_6a567c79","line":628,"updated":"2024-02-15 03:11:59.000000000","message":"I\u0027m always a nitpicker for not using \\ - see L853.","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        except idlutils.RowNotFound:"},{"line_number":627,"context_line":"            msg \u003d _(\"Logical Router Static Route %s does not exist\") % \\"},{"line_number":628,"context_line":"                self.sroute"},{"line_number":629,"context_line":"            raise RuntimeError(msg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e8b7e006_3b3719ae","line":628,"in_reply_to":"17af0297_6a567c79","updated":"2024-02-20 15:36:46.000000000","message":"Done","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e16acbf00a477cce64257fe6ff4bd671b364541d","unresolved":true,"context_lines":[{"line_number":626,"context_line":"        except idlutils.RowNotFound:"},{"line_number":627,"context_line":"            msg \u003d (_(\u0027Logical Router Static Route %s does not exist\u0027)"},{"line_number":628,"context_line":"                   % self.sroute)"},{"line_number":629,"context_line":"            raise RuntimeError(msg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"class UpdateObjectExtIdsCommand(command.BaseCommand):"}],"source_content_type":"text/x-python","patch_set":7,"id":"55964e9f_2051eaa9","line":629,"updated":"2024-03-25 00:29:44.000000000","message":"I\u0027m confused with this whole block. In AddStaticRouteCommand() above, we lookup a logical router, then add a value to its static route row. What exactly are we adding to here?","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"064f0b87e0aaffabeee1a8a7cd8e38a4f45e48af","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        except idlutils.RowNotFound:"},{"line_number":627,"context_line":"            msg \u003d (_(\u0027Logical Router Static Route %s does not exist\u0027)"},{"line_number":628,"context_line":"                   % self.sroute)"},{"line_number":629,"context_line":"            raise RuntimeError(msg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"class UpdateObjectExtIdsCommand(command.BaseCommand):"}],"source_content_type":"text/x-python","patch_set":7,"id":"21383cf8_71dd407e","line":629,"in_reply_to":"363e8808_d24be2b4","updated":"2024-04-15 14:58:22.000000000","message":"In this block we are just defining values for columns to an existent Logical_Router_Static_Route entry. For example, the SetNATRuleInLRouterCommand method is similar to this but for NAT rules.  We have no intention of adding a new table row, so the setattr for columns is just what we need.","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"81fa713896fa31b76317ba520b167309fa88463a","unresolved":true,"context_lines":[{"line_number":626,"context_line":"        except idlutils.RowNotFound:"},{"line_number":627,"context_line":"            msg \u003d (_(\u0027Logical Router Static Route %s does not exist\u0027)"},{"line_number":628,"context_line":"                   % self.sroute)"},{"line_number":629,"context_line":"            raise RuntimeError(msg)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"class UpdateObjectExtIdsCommand(command.BaseCommand):"}],"source_content_type":"text/x-python","patch_set":7,"id":"363e8808_d24be2b4","line":629,"in_reply_to":"55964e9f_2051eaa9","updated":"2024-03-25 00:32:36.000000000","message":"This might have been an old comment from an old PS that I never discarded.","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14322cf1835e7fb4b879ea56413a5b6513ac1e84","unresolved":true,"context_lines":[{"line_number":704,"context_line":"            route.delete()"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"class SetStaticRouteCommand(command.BaseCommand):"},{"line_number":708,"context_line":"    def __init__(self, api, sroute, **columns):"},{"line_number":709,"context_line":"        super().__init__(api)"},{"line_number":710,"context_line":"        self.sroute \u003d sroute"}],"source_content_type":"text/x-python","patch_set":12,"id":"76bf84ff_9bd40173","line":707,"range":{"start_line":707,"start_character":6,"end_line":707,"end_character":27},"updated":"2024-06-10 13:46:29.000000000","message":"This method should be tested in the functional job.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"1294e0dcf7a45d43ae16921b4b70a534ce9ed8fd","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            route.delete()"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"class SetStaticRouteCommand(command.BaseCommand):"},{"line_number":708,"context_line":"    def __init__(self, api, sroute, **columns):"},{"line_number":709,"context_line":"        super().__init__(api)"},{"line_number":710,"context_line":"        self.sroute \u003d sroute"}],"source_content_type":"text/x-python","patch_set":12,"id":"f7fb0da0_0d21d234","line":707,"range":{"start_line":707,"start_character":6,"end_line":707,"end_character":27},"in_reply_to":"76bf84ff_9bd40173","updated":"2024-06-10 17:55:20.000000000","message":"This method is tested by the `test_static_routes_with_external_ids` methon in funtional job. The test_maintenance calls the periodic function which in turn calls impl_idl_ovn.set_static_route -\u003e `SetStaticRouteCommand` to update the external_ids as programmed in the test, otherwise the test would fail.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":704,"context_line":"            route.delete()"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"class SetStaticRouteCommand(command.BaseCommand):"},{"line_number":708,"context_line":"    def __init__(self, api, sroute, **columns):"},{"line_number":709,"context_line":"        super().__init__(api)"},{"line_number":710,"context_line":"        self.sroute \u003d sroute"}],"source_content_type":"text/x-python","patch_set":12,"id":"fc4026ce_b7ef6efd","line":707,"range":{"start_line":707,"start_character":6,"end_line":707,"end_character":27},"in_reply_to":"f7fb0da0_0d21d234","updated":"2024-07-08 15:02:48.000000000","message":"No no, ``test_static_routes_with_external_ids`` is testing the maintenance task (that is using this method). But you need to implement a specific (and most probably smaller) test for this new command in ``test_impl_idl``. The maintenance task would be removed eventually.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            route.delete()"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"class SetStaticRouteCommand(command.BaseCommand):"},{"line_number":708,"context_line":"    def __init__(self, api, sroute, **columns):"},{"line_number":709,"context_line":"        super().__init__(api)"},{"line_number":710,"context_line":"        self.sroute \u003d sroute"}],"source_content_type":"text/x-python","patch_set":12,"id":"91dd1838_98745ad7","line":707,"range":{"start_line":707,"start_character":6,"end_line":707,"end_character":27},"in_reply_to":"fc4026ce_b7ef6efd","updated":"2024-08-21 22:00:59.000000000","message":"Sure, I included a new one for this. Thanks","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14322cf1835e7fb4b879ea56413a5b6513ac1e84","unresolved":true,"context_lines":[{"line_number":713,"context_line":"    def run_idl(self, txn):"},{"line_number":714,"context_line":"        try:"},{"line_number":715,"context_line":"            for col, val in self.columns.items():"},{"line_number":716,"context_line":"                setattr(self.sroute, col, val)"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        except idlutils.RowNotFound:"},{"line_number":719,"context_line":"            msg \u003d (_(\u0027Logical Router Static Route %s does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dba6fa4c_15737cbc","line":716,"range":{"start_line":716,"start_character":23,"end_line":716,"end_character":35},"updated":"2024-06-10 13:46:29.000000000","message":"Is this ``self.sroute`` a ``row`` object? I think you are missing here the search of the ``Logical_Router_Static_Route`` row.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"1294e0dcf7a45d43ae16921b4b70a534ce9ed8fd","unresolved":false,"context_lines":[{"line_number":713,"context_line":"    def run_idl(self, txn):"},{"line_number":714,"context_line":"        try:"},{"line_number":715,"context_line":"            for col, val in self.columns.items():"},{"line_number":716,"context_line":"                setattr(self.sroute, col, val)"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        except idlutils.RowNotFound:"},{"line_number":719,"context_line":"            msg \u003d (_(\u0027Logical Router Static Route %s does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"79efe5c6_f52f81ce","line":716,"range":{"start_line":716,"start_character":23,"end_line":716,"end_character":35},"in_reply_to":"dba6fa4c_15737cbc","updated":"2024-06-10 17:55:20.000000000","message":"Yes, self.sroute is a row to make the lookup easier. I didn\u0027t forget the search for Logical_Router_Static_Route but to make the maintenance task more efficient, the `get_all_logical_routers_static_routes` method returns the list of static route rows associated with a logical router, and the external_ids update occurs on the same row already received in the previous function, as it is the same element. Otherwise, we would spend a few more operations to fetch the row from the Logical_Router_Static_Route table using ip_prefix end/or nexthop fields, since this table doesn\u0027t have an index to relate as a primary key and what Logical_router table has information about this relationship is the LRSR UUID.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        result \u003d []"},{"line_number":379,"context_line":"        for lrouter in self._tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":380,"context_line":"            if ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY not in ("},{"line_number":381,"context_line":"                    lrouter.external_ids):"},{"line_number":382,"context_line":"                continue"},{"line_number":383,"context_line":"            result.append({\u0027name\u0027: lrouter.name.replace(\u0027neutron-\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"e577cc14_3e42d6aa","line":380,"range":{"start_line":380,"start_character":59,"end_line":380,"end_character":60},"updated":"2024-02-15 03:11:59.000000000","message":"I guess this works, but logically () should be around entire statement","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        result \u003d []"},{"line_number":379,"context_line":"        for lrouter in self._tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":380,"context_line":"            if ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY not in ("},{"line_number":381,"context_line":"                    lrouter.external_ids):"},{"line_number":382,"context_line":"                continue"},{"line_number":383,"context_line":"            result.append({\u0027name\u0027: lrouter.name.replace(\u0027neutron-\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a459d06_442fd317","line":380,"range":{"start_line":380,"start_character":59,"end_line":380,"end_character":60},"in_reply_to":"e577cc14_3e42d6aa","updated":"2024-02-20 15:36:46.000000000","message":"Done","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cc40e038a312b0ee6200d1a4b613166dc4d86b74","unresolved":true,"context_lines":[{"line_number":334,"context_line":"        result \u003d []"},{"line_number":335,"context_line":"        for lrouter in self._tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":336,"context_line":"            if (ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY not in"},{"line_number":337,"context_line":"                    lrouter.external_ids):"},{"line_number":338,"context_line":"                continue"},{"line_number":339,"context_line":"            lrports \u003d {lrport.name.replace(\u0027lrp-\u0027, \u0027\u0027): lrport.networks"},{"line_number":340,"context_line":"                       for lrport in getattr(lrouter, \u0027ports\u0027, [])}"}],"source_content_type":"text/x-python","patch_set":6,"id":"f8973291_2d56ecb1","line":337,"updated":"2024-02-22 17:09:12.000000000","message":"Sigh, now I see why the code below is like it is, was just copied. I guess just leave them both the same if you want to change this one back.","commit_id":"9f2ca21461bd12bf4be5a297e25ec2b354bf0e5f"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e3ab1584e323b023143852a728c9b4f40c3a71e9","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        result \u003d []"},{"line_number":335,"context_line":"        for lrouter in self._tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":336,"context_line":"            if (ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY not in"},{"line_number":337,"context_line":"                    lrouter.external_ids):"},{"line_number":338,"context_line":"                continue"},{"line_number":339,"context_line":"            lrports \u003d {lrport.name.replace(\u0027lrp-\u0027, \u0027\u0027): lrport.networks"},{"line_number":340,"context_line":"                       for lrport in getattr(lrouter, \u0027ports\u0027, [])}"}],"source_content_type":"text/x-python","patch_set":6,"id":"61b560c4_d0a230bb","line":337,"in_reply_to":"f8973291_2d56ecb1","updated":"2024-02-22 18:08:07.000000000","message":"yep, but you were right in the first comment, the () should be around entire statement. I will change the bottom one to look like this one.","commit_id":"9f2ca21461bd12bf4be5a297e25ec2b354bf0e5f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":334,"context_line":"        \"\"\""},{"line_number":335,"context_line":"        result \u003d []"},{"line_number":336,"context_line":"        for lrouter in self._tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":337,"context_line":"            if (ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY not in"},{"line_number":338,"context_line":"                    lrouter.external_ids):"},{"line_number":339,"context_line":"                continue"},{"line_number":340,"context_line":"            lrports \u003d {lrport.name.replace(\u0027lrp-\u0027, \u0027\u0027): lrport.networks"}],"source_content_type":"text/x-python","patch_set":12,"id":"2c482925_ad276cfd","line":337,"range":{"start_line":337,"start_character":15,"end_line":337,"end_character":16},"updated":"2024-07-08 15:02:48.000000000","message":"nit: why this change?","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        \"\"\""},{"line_number":335,"context_line":"        result \u003d []"},{"line_number":336,"context_line":"        for lrouter in self._tables[\u0027Logical_Router\u0027].rows.values():"},{"line_number":337,"context_line":"            if (ovn_const.OVN_ROUTER_NAME_EXT_ID_KEY not in"},{"line_number":338,"context_line":"                    lrouter.external_ids):"},{"line_number":339,"context_line":"                continue"},{"line_number":340,"context_line":"            lrports \u003d {lrport.name.replace(\u0027lrp-\u0027, \u0027\u0027): lrport.networks"}],"source_content_type":"text/x-python","patch_set":12,"id":"01ed07c7_d454445f","line":337,"range":{"start_line":337,"start_character":15,"end_line":337,"end_character":16},"in_reply_to":"2c482925_ad276cfd","updated":"2024-08-21 22:00:59.000000000","message":"Done","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"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":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":1163,"context_line":"                # Skip Static Routes that are already configured with an"},{"line_number":1164,"context_line":"                # external_id key"},{"line_number":1165,"context_line":"                if ovn_const.OVN_ROUTER_IS_STATIC_ROUTE not in \\"},{"line_number":1166,"context_line":"                        sroute.external_ids.keys():"},{"line_number":1167,"context_line":"                    sroute_update.append({\u0027sroute\u0027: sroute,"},{"line_number":1168,"context_line":"                                          \u0027name\u0027: router[\u0027name\u0027]})"},{"line_number":1169,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0adf07ca_991eca6e","line":1166,"updated":"2024-02-15 03:11:59.000000000","message":"Same \\ nit","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"                # Skip Static Routes that are already configured with an"},{"line_number":1164,"context_line":"                # external_id key"},{"line_number":1165,"context_line":"                if ovn_const.OVN_ROUTER_IS_STATIC_ROUTE not in \\"},{"line_number":1166,"context_line":"                        sroute.external_ids.keys():"},{"line_number":1167,"context_line":"                    sroute_update.append({\u0027sroute\u0027: sroute,"},{"line_number":1168,"context_line":"                                          \u0027name\u0027: router[\u0027name\u0027]})"},{"line_number":1169,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6f5db234_208512f5","line":1166,"in_reply_to":"0adf07ca_991eca6e","updated":"2024-02-20 15:36:46.000000000","message":"Done","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":1256,"context_line":"        raise periodics.NeverAgain()"},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"    @has_lock_periodic(spacing\u003d600, run_immediately\u003dTrue)"},{"line_number":1259,"context_line":"    def update_router_static_routes(self):"},{"line_number":1260,"context_line":"        \"\"\"Set external_ids column to any Neutron\u0027s owned static route."},{"line_number":1261,"context_line":"        \"\"\""},{"line_number":1262,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"99508a9d_ef8bb7ae","line":1259,"range":{"start_line":1259,"start_character":8,"end_line":1259,"end_character":35},"updated":"2024-07-08 15:02:48.000000000","message":"This method should have an expiration date. If in this patch we are always adding the \"tag\" neutron:is_static_route to the new LRSR, this method won\u0027t be needed in some releases.","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"        raise periodics.NeverAgain()"},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"    @has_lock_periodic(spacing\u003d600, run_immediately\u003dTrue)"},{"line_number":1259,"context_line":"    def update_router_static_routes(self):"},{"line_number":1260,"context_line":"        \"\"\"Set external_ids column to any Neutron\u0027s owned static route."},{"line_number":1261,"context_line":"        \"\"\""},{"line_number":1262,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3ede2169_500a96a5","line":1259,"range":{"start_line":1259,"start_character":8,"end_line":1259,"end_character":35},"in_reply_to":"99508a9d_ef8bb7ae","updated":"2024-08-21 22:00:59.000000000","message":"Done","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b9bd0d8e1082a1f948c53bb424c1717e6a0c9498","unresolved":true,"context_lines":[{"line_number":1298,"context_line":"                        \u0027output_port\u0027: utils.ovn_lrouter_port_name("},{"line_number":1299,"context_line":"                            gw_port[\u0027id\u0027]),"},{"line_number":1300,"context_line":"                    })"},{"line_number":1301,"context_line":"                txn.add(self._nb_idl.add_static_route("},{"line_number":1302,"context_line":"                    lrouter_name, ip_prefix\u003dgw_info.ip_prefix,"},{"line_number":1303,"context_line":"                    nexthop\u003dgw_info.gateway_ip,"},{"line_number":1304,"context_line":"                    maintain_bfd\u003drouter_default_route_bfd_enabled,"},{"line_number":1305,"context_line":"                    **columns))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        # 3. Add snat rules for tenant networks in lrouter if snat is enabled"},{"line_number":1308,"context_line":"        if utils.is_snat_enabled(router) and networks:"}],"source_content_type":"text/x-python","patch_set":12,"id":"f6aabb44_841c7e4e","line":1305,"range":{"start_line":1301,"start_character":16,"end_line":1305,"end_character":31},"updated":"2024-07-08 15:09:02.000000000","message":"Why are we not adding the tag here?","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":1298,"context_line":"                        \u0027output_port\u0027: utils.ovn_lrouter_port_name("},{"line_number":1299,"context_line":"                            gw_port[\u0027id\u0027]),"},{"line_number":1300,"context_line":"                    })"},{"line_number":1301,"context_line":"                txn.add(self._nb_idl.add_static_route("},{"line_number":1302,"context_line":"                    lrouter_name, ip_prefix\u003dgw_info.ip_prefix,"},{"line_number":1303,"context_line":"                    nexthop\u003dgw_info.gateway_ip,"},{"line_number":1304,"context_line":"                    maintain_bfd\u003drouter_default_route_bfd_enabled,"},{"line_number":1305,"context_line":"                    **columns))"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        # 3. Add snat rules for tenant networks in lrouter if snat is enabled"},{"line_number":1308,"context_line":"        if utils.is_snat_enabled(router) and networks:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f0aedb8_2afa3fec","line":1305,"range":{"start_line":1301,"start_character":16,"end_line":1305,"end_character":31},"in_reply_to":"f6aabb44_841c7e4e","updated":"2024-08-21 22:00:59.000000000","message":"Oh, my bad! I forgot this one because my first version of this patch was developed with another focus. I included it, thanks!","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_maintenance.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":1292,"context_line":"        # Call the maintenance task and check that the value has been"},{"line_number":1293,"context_line":"        # updated in the external_ids"},{"line_number":1294,"context_line":"        self.assertRaises(periodics.NeverAgain,"},{"line_number":1295,"context_line":"            self.maint.update_router_static_routes)"},{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"        sroutes \u003d self.nb_api.get_all_logical_routers_static_routes()[0]"},{"line_number":1298,"context_line":"        sroute_info \u003d sroutes[\u0027static_routes\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"0113790d_b32e4ad8","line":1295,"range":{"start_line":1295,"start_character":23,"end_line":1295,"end_character":50},"updated":"2024-07-08 15:02:48.000000000","message":"The method ``update_router_static_routes`` in this test is never calling ``set_static_route``","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"        # Call the maintenance task and check that the value has been"},{"line_number":1293,"context_line":"        # updated in the external_ids"},{"line_number":1294,"context_line":"        self.assertRaises(periodics.NeverAgain,"},{"line_number":1295,"context_line":"            self.maint.update_router_static_routes)"},{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"        sroutes \u003d self.nb_api.get_all_logical_routers_static_routes()[0]"},{"line_number":1298,"context_line":"        sroute_info \u003d sroutes[\u0027static_routes\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fd8181db_0c677960","line":1295,"range":{"start_line":1295,"start_character":23,"end_line":1295,"end_character":50},"in_reply_to":"0113790d_b32e4ad8","updated":"2024-08-21 22:00:59.000000000","message":"Done","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d0475abf33751c7138c6c0af1553c7aa0510654","unresolved":true,"context_lines":[{"line_number":1298,"context_line":"        sroute_info \u003d sroutes[\u0027static_routes\u0027]"},{"line_number":1299,"context_line":"        for route in sroute_info:"},{"line_number":1300,"context_line":"            if route.ip_prefix.startswith(\u002710.\u0027):"},{"line_number":1301,"context_line":"                self.assertEqual({ovn_const.OVN_LRSR_EXT_ID_KEY: \u0027true\u0027},"},{"line_number":1302,"context_line":"                                 route.external_ids)"},{"line_number":1303,"context_line":"            # Check if the OVN static route remains without the Neutron key"},{"line_number":1304,"context_line":"            if route.ip_prefix \u003d\u003d \u002720.0.0.0/24\u0027:"},{"line_number":1305,"context_line":"                self.assertEqual({}, route.external_ids)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3c6517a5_87553d18","line":1302,"range":{"start_line":1301,"start_character":16,"end_line":1302,"end_character":52},"updated":"2024-07-08 15:02:48.000000000","message":"This check is never happening","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"01e73a40f63a80841a5fe5934edfc894274e4734","unresolved":false,"context_lines":[{"line_number":1298,"context_line":"        sroute_info \u003d sroutes[\u0027static_routes\u0027]"},{"line_number":1299,"context_line":"        for route in sroute_info:"},{"line_number":1300,"context_line":"            if route.ip_prefix.startswith(\u002710.\u0027):"},{"line_number":1301,"context_line":"                self.assertEqual({ovn_const.OVN_LRSR_EXT_ID_KEY: \u0027true\u0027},"},{"line_number":1302,"context_line":"                                 route.external_ids)"},{"line_number":1303,"context_line":"            # Check if the OVN static route remains without the Neutron key"},{"line_number":1304,"context_line":"            if route.ip_prefix \u003d\u003d \u002720.0.0.0/24\u0027:"},{"line_number":1305,"context_line":"                self.assertEqual({}, route.external_ids)"}],"source_content_type":"text/x-python","patch_set":12,"id":"530765b3_d3b54c08","line":1302,"range":{"start_line":1301,"start_character":16,"end_line":1302,"end_character":52},"in_reply_to":"3c6517a5_87553d18","updated":"2024-08-21 22:00:59.000000000","message":"Done","commit_id":"d4f83ca6e2437216cfbdac7fe3f801bbc520f8f1"}],"neutron/tests/unit/services/ovn_l3/test_plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d7fab026e3d075d2d87edb197a843c8cc048ca5f","unresolved":true,"context_lines":[{"line_number":113,"context_line":"                            \u0027routes\u0027: [{\u0027destination\u0027: \u00271.1.1.0/24\u0027,"},{"line_number":114,"context_line":"                                        \u0027nexthop\u0027: \u002710.0.0.2\u0027,"},{"line_number":115,"context_line":"                                        \u0027external_ids\u0027:"},{"line_number":116,"context_line":"                                        {\u0027neutron:is_static_route\u0027: \u0027true\u0027}}]}"},{"line_number":117,"context_line":"        self.fake_router_interface_info \u003d {"},{"line_number":118,"context_line":"            \u0027port_id\u0027: \u0027router-port-id\u0027,"},{"line_number":119,"context_line":"            \u0027device_id\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"58ae79bf_c08f8530","line":116,"updated":"2024-02-22 23:14:24.000000000","message":"You should be able to use the constant here as well.","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"bd4e64dd32f850e03171da1a360af891225a1722","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                            \u0027routes\u0027: [{\u0027destination\u0027: \u00271.1.1.0/24\u0027,"},{"line_number":114,"context_line":"                                        \u0027nexthop\u0027: \u002710.0.0.2\u0027,"},{"line_number":115,"context_line":"                                        \u0027external_ids\u0027:"},{"line_number":116,"context_line":"                                        {\u0027neutron:is_static_route\u0027: \u0027true\u0027}}]}"},{"line_number":117,"context_line":"        self.fake_router_interface_info \u003d {"},{"line_number":118,"context_line":"            \u0027port_id\u0027: \u0027router-port-id\u0027,"},{"line_number":119,"context_line":"            \u0027device_id\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7418d9ad_ddd4a099","line":116,"in_reply_to":"58ae79bf_c08f8530","updated":"2024-03-04 18:05:36.000000000","message":"Done","commit_id":"ca4d3212ba3b8757de5a35388ffd8d95e10e9a10"}],"releasenotes/notes/add-external-ids-key-for-static-routes-9d9bc3d7c2c4361f.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The OVN ML2 mechanism driver for static route rules only include the"},{"line_number":4,"context_line":"    Neutron key in the external_ids register for external gw router ports."},{"line_number":5,"context_line":"    The static routes associated with logical routers do not have information"},{"line_number":6,"context_line":"    about Neutron\u0027s ownership in the OVN Northbound database."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5ec5c121_e3774be2","line":3,"range":{"start_line":3,"start_character":61,"end_line":3,"end_character":68},"updated":"2024-02-15 03:11:59.000000000","message":"s/includes","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The OVN ML2 mechanism driver for static route rules only include the"},{"line_number":4,"context_line":"    Neutron key in the external_ids register for external gw router ports."},{"line_number":5,"context_line":"    The static routes associated with logical routers do not have information"},{"line_number":6,"context_line":"    about Neutron\u0027s ownership in the OVN Northbound database."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"86e68b5c_060d4efa","line":3,"range":{"start_line":3,"start_character":61,"end_line":3,"end_character":68},"in_reply_to":"5ec5c121_e3774be2","updated":"2024-02-20 15:36:46.000000000","message":"Done","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The OVN ML2 mechanism driver for static route rules only include the"},{"line_number":4,"context_line":"    Neutron key in the external_ids register for external gw router ports."},{"line_number":5,"context_line":"    The static routes associated with logical routers do not have information"},{"line_number":6,"context_line":"    about Neutron\u0027s ownership in the OVN Northbound database."},{"line_number":7,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"c05cc5b1_fee0f938","line":4,"range":{"start_line":4,"start_character":58,"end_line":4,"end_character":60},"updated":"2024-02-15 03:11:59.000000000","message":"s/gateway","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The OVN ML2 mechanism driver for static route rules only include the"},{"line_number":4,"context_line":"    Neutron key in the external_ids register for external gw router ports."},{"line_number":5,"context_line":"    The static routes associated with logical routers do not have information"},{"line_number":6,"context_line":"    about Neutron\u0027s ownership in the OVN Northbound database."},{"line_number":7,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"97188ab5_8e7dbfdd","line":4,"range":{"start_line":4,"start_character":58,"end_line":4,"end_character":60},"in_reply_to":"c05cc5b1_fee0f938","updated":"2024-02-20 15:36:46.000000000","message":"Done","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0213cc2cf16d3901f03989d06a38576b3c4f968","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    The static routes associated with logical routers do not have information"},{"line_number":6,"context_line":"    about Neutron\u0027s ownership in the OVN Northbound database."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The static routes start writing the external_ids key"},{"line_number":10,"context_line":"    `neutron:is_static_route` in the creation process. So, Neutron can have"},{"line_number":11,"context_line":"    information about the ownership of this resource in the OVN database."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"06df3159_67b81864","line":8,"updated":"2024-02-15 03:11:59.000000000","message":"The below note will be separate from the above, so we will need to mention OVN in it somewhere. I\u0027m usually inclined to just use a single section so we just have one block if possible. So maybe just have a features section with something like:\n\nThe OVN ML2 mechanism driver for static routes will now include the key ``neutron:is_static_route`` in the external_ids register for external gateway router ports. This is required so Neutron can determine ownership of this resource in the OVN database. Previously created static route rules will be updated only once during the maintenance task to include the ``neutron:is_static_route`` key in the external_ids register. In case all static route entries are already configured using this key, no maintenance action will be performed.","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"e2af49a9d3f1a03da4456831a81cc3a7b28fd1df","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    The static routes associated with logical routers do not have information"},{"line_number":6,"context_line":"    about Neutron\u0027s ownership in the OVN Northbound database."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The static routes start writing the external_ids key"},{"line_number":10,"context_line":"    `neutron:is_static_route` in the creation process. So, Neutron can have"},{"line_number":11,"context_line":"    information about the ownership of this resource in the OVN database."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"d133197d_31793180","line":8,"in_reply_to":"06df3159_67b81864","updated":"2024-02-20 15:36:46.000000000","message":"Sounds good, thanks!","commit_id":"cf25d760ce797ca616314c926b73ba2f8a98688b"}]}
