)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd800caf1d309930a70fed4ca5d3f5c05d505780","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Chen \u003cichen@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-10-31 14:30:39 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix bug/2100294 to update IPv6 gateway in OVN"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change correctly updates an IPv6 subnet\u0027s gateway, both in"},{"line_number":10,"context_line":"openstack and in OVN.  When openstack subnet\u0027s gateway is updated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"37d2d4b0_95f51b92","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":15},"updated":"2025-11-13 12:00:25.000000000","message":"nit: the commit message should describe briefly the patch, there is no need (we never do this) add the LP number there (it is already at the end of the commit message)","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"c600d54279b72d8c862a514008772a0ce8d130a8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Chen \u003cichen@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-10-31 14:30:39 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix bug/2100294 to update IPv6 gateway in OVN"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change correctly updates an IPv6 subnet\u0027s gateway, both in"},{"line_number":10,"context_line":"openstack and in OVN.  When openstack subnet\u0027s gateway is updated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"66e41c67_8b6b325f","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":15},"in_reply_to":"37d2d4b0_95f51b92","updated":"2025-11-13 14:09:10.000000000","message":"Done","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"18a820c3939734f2054c038fca788b524ba46b37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7a342505_c322062d","updated":"2025-10-01 19:09:30.000000000","message":"that fix looks really reasonable to me. Thanks for looking into that!","commit_id":"9482fd8166dab139b0825ac9597a6a2957b3489f"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"aebbcb47a639650dc3e03d8f5656b2e7dfd47956","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7e6273cd_308a2f1a","updated":"2025-10-06 14:38:23.000000000","message":"recheck\nfunctional timeout is not related","commit_id":"14528d6668427b1138d6ad07481f8c729dcbee19"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"a5b1f308a8ada6f3395fd628f0b8ac0b6b2b7baa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"03fa3382_939dba7b","updated":"2025-10-06 08:36:22.000000000","message":"recheck - likely intermittent","commit_id":"14528d6668427b1138d6ad07481f8c729dcbee19"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"14e94e5f27d1d3c9b12805815e475324f5edc832","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"758e113a_0c145200","updated":"2025-10-29 18:34:14.000000000","message":"Recheck functional test that error is unrelated.  It passed in my local setup.","commit_id":"4c382f8bf8d7be2241f973bde1ff57d6d1a8517c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"950611260f06ca1bf5d9c72de8b145cd618c1f68","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"05e545f4_9ee86714","updated":"2025-10-30 20:41:56.000000000","message":"I noticed one more test thing.","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"7aba37064375e6bc3d606306bda0a86c8cb4df20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2d92d098_1569c606","updated":"2025-10-30 14:18:53.000000000","message":"Recheck due to third-party arista failure.","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6bc84fb6c23d88283538e89883fe7279b5ac0f8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"702fcb75_611931ea","updated":"2025-10-30 17:07:16.000000000","message":"recheck timed out openstack-tox-py310 .  No output from Zulu.","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd800caf1d309930a70fed4ca5d3f5c05d505780","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2cff24e9_1d42974b","updated":"2025-11-13 12:00:25.000000000","message":"I manually tested the patch using the following commands:\n`openstack network create --provider-network-type vlan --provider-physical-network public --external public2\nopenstack subnet create --subnet-range 2001:db8::/64 --ip-version 6 --network public2 --allocation-pool start\u003d2001:db8::100,end\u003d2001:db8::ffff spublic2\nopenstack router create r1\nopenstack router set --external-gateway public2 r1\n`\n\nThe logical-router-static-route is correct:\n`\n_uuid               : 809de8ff-9c3f-40be-b05e-7f2d69fa4ff6\nbfd                 : []\nexternal_ids        : {\"neutron:is_ext_gw\"\u003d\"true\", \"neutron:is_static_route\"\u003d\"true\", \"neutron:subnet_id\"\u003d\"8e34962a-f2cd-4e3d-b796-0906049a36df\"}\nip_prefix           : \"::/0\"\nnexthop             : \"2001:db8::\"\noptions             : {}\noutput_port         : []\npolicy              : []\nroute_table         : \"\"\n`\n\nHowever, when I change the GW IP of the subnet, a new route is created and the old one is not removed: https://paste.opendev.org/show/bMHrpj9gzPloIW2g8ImD/","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"f7b56afa0bc2e811c60d646555cb31f1806d5dac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"56d38065_71300338","updated":"2025-11-03 02:56:18.000000000","message":"Recheck that functional test failure is not related.  Bug 2130541 for the failed functional test has been filed.","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"58046c80827025a3f86bcccc7fd1ff9aaba7bfb4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3e6f9ca8_0ed71bed","updated":"2025-11-10 09:05:27.000000000","message":"let\u0027s see if functional passes","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b9e28e81783713db74f80558a554bc41569e21d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"959e7ee1_f981ef66","updated":"2025-11-10 09:02:05.000000000","message":"recheck\nfunctional failure seems to be not related (even opensearch shows the test failed for other changes also)","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"09017d4e2441993b43c1b26312439b68c26cd5fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c6966b02_fadfffb7","in_reply_to":"2cff24e9_1d42974b","updated":"2025-11-13 12:29:19.000000000","message":"My bad (again). My dev system had two instances of Neutron API and the non-updated one was replying. \n\nI tested again and works fine. Thanks!","commit_id":"078b92ffc5e6a02a72728dc3505ea0d152bd3cf2"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"fe2b3d17fcc6dd7e57eeb7c3744243fa68f8b2d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"989eb9aa_dc17ef85","updated":"2025-11-13 16:23:39.000000000","message":"failure due to https://bugs.launchpad.net/neutron/+bug/2131024","commit_id":"5e23d87690d4459dfab2ae19a90c1e5c7d14c297"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"1bfe564e09206bc4c4655cca719d46f06667190a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0d9f1511_8ff2e854","updated":"2025-11-17 19:19:31.000000000","message":"recheck due to https://bugs.launchpad.net/neutron/+bug/2131694","commit_id":"5e23d87690d4459dfab2ae19a90c1e5c7d14c297"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"41e9aec7295df30a6ce05320243574c0c98d535e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8f9f8fb1_4f3cf40d","updated":"2025-11-16 20:08:07.000000000","message":"recheck now that a fix for 2131024 is pushed","commit_id":"5e23d87690d4459dfab2ae19a90c1e5c7d14c297"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"bbe9a3a0a6d5b37fd42d3be7f1c6d8d5dee13151","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c7b55b44_b81b994a","updated":"2025-11-24 10:24:52.000000000","message":"thanks","commit_id":"5e23d87690d4459dfab2ae19a90c1e5c7d14c297"}],"neutron/common/ovn/utils.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3d8195027c7fc30c65707d2de99080ac0194adb3","unresolved":true,"context_lines":[{"line_number":1148,"context_line":"    # Chassis Group per external port, otherwise do it at the network level"},{"line_number":1149,"context_line":"    candidates \u003d _filter_candidates_for_ha_chassis_group(hcg_info)"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"    # Always create the HA Chassis Group with may_exist\u003dTrue, in case a delete"},{"line_number":1152,"context_line":"    # operation had already been queued ahead of this add operation"},{"line_number":1153,"context_line":"    ha_ch_grp \u003d nb_idl.lookup(\u0027HA_Chassis_Group\u0027, hcg_info.group_name,"},{"line_number":1154,"context_line":"                              default\u003dNone)"},{"line_number":1155,"context_line":"    ha_ch_grp_cmd \u003d txn.add(nb_idl.ha_chassis_group_add("}],"source_content_type":"text/x-python","patch_set":5,"id":"f66a9627_510b0119","line":1152,"range":{"start_line":1151,"start_character":4,"end_line":1152,"end_character":67},"updated":"2025-11-11 11:15:56.000000000","message":"That\u0027s an issue: if we update the HCG when we have traffic, the new HCG would most probably have a high priority `HA_Chassis` assigned to another chassis.\n\nBut the biggest problem is the logic behind these lines. We have different logic if we have a HCG or not. If during the call of this method we first find `hcg_info.group_name` and the its deleted, this method won\u0027t operate correctly.\n\nWe need a way, if possible, to keep the previous existing HCG, added by the first `set --external-gateway` operation. Or maybe just prevent that with tunnelled networks, because this is a feature actually not tested with tunnelled networks.","commit_id":"94ab932ad6e1544c10b7874b442b0270b7200db6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd800caf1d309930a70fed4ca5d3f5c05d505780","unresolved":false,"context_lines":[{"line_number":1148,"context_line":"    # Chassis Group per external port, otherwise do it at the network level"},{"line_number":1149,"context_line":"    candidates \u003d _filter_candidates_for_ha_chassis_group(hcg_info)"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"    # Always create the HA Chassis Group with may_exist\u003dTrue, in case a delete"},{"line_number":1152,"context_line":"    # operation had already been queued ahead of this add operation"},{"line_number":1153,"context_line":"    ha_ch_grp \u003d nb_idl.lookup(\u0027HA_Chassis_Group\u0027, hcg_info.group_name,"},{"line_number":1154,"context_line":"                              default\u003dNone)"},{"line_number":1155,"context_line":"    ha_ch_grp_cmd \u003d txn.add(nb_idl.ha_chassis_group_add("}],"source_content_type":"text/x-python","patch_set":5,"id":"e76e6c27_2382e7a3","line":1152,"range":{"start_line":1151,"start_character":4,"end_line":1152,"end_character":67},"in_reply_to":"0c428037_e75ba329","updated":"2025-11-13 12:00:25.000000000","message":"My bad, I don\u0027t know why I was reviewing an old version.","commit_id":"94ab932ad6e1544c10b7874b442b0270b7200db6"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"46383f8eded5427f688776df641548185c8c5109","unresolved":false,"context_lines":[{"line_number":1148,"context_line":"    # Chassis Group per external port, otherwise do it at the network level"},{"line_number":1149,"context_line":"    candidates \u003d _filter_candidates_for_ha_chassis_group(hcg_info)"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"    # Always create the HA Chassis Group with may_exist\u003dTrue, in case a delete"},{"line_number":1152,"context_line":"    # operation had already been queued ahead of this add operation"},{"line_number":1153,"context_line":"    ha_ch_grp \u003d nb_idl.lookup(\u0027HA_Chassis_Group\u0027, hcg_info.group_name,"},{"line_number":1154,"context_line":"                              default\u003dNone)"},{"line_number":1155,"context_line":"    ha_ch_grp_cmd \u003d txn.add(nb_idl.ha_chassis_group_add("}],"source_content_type":"text/x-python","patch_set":5,"id":"0c428037_e75ba329","line":1152,"range":{"start_line":1151,"start_character":4,"end_line":1152,"end_character":67},"in_reply_to":"f66a9627_510b0119","updated":"2025-11-11 13:50:11.000000000","message":"The proposed change in the latest patch, patch 9, doesn\u0027t reuse update_router() and thus doesn\u0027t involve modifications to HCG.  Instead, it only manipulates the static route.  The proposed change only fixes the original bug, leaving the bug 2126637 unresolved.","commit_id":"94ab932ad6e1544c10b7874b442b0270b7200db6"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"55ae1f45224acf59b7207feefa214e2c643daa53","unresolved":true,"context_lines":[{"line_number":333,"context_line":"        current_gw_ip \u003d current[\u0027gateway_ip\u0027]"},{"line_number":334,"context_line":"        if orig_gw_ip \u003d\u003d current_gw_ip:"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":"        prefix \u003d n_const.IPv4_ANY if netaddr.IPAddress("},{"line_number":337,"context_line":"            orig_gw_ip).version \u003d\u003d 4 else n_const.IPv6_ANY"},{"line_number":338,"context_line":"        gw_ports \u003d l3plugin._plugin.get_ports(context, filters\u003d{"},{"line_number":339,"context_line":"            \u0027network_id\u0027: [orig[\u0027network_id\u0027]],"},{"line_number":340,"context_line":"            \u0027device_owner\u0027: [n_const.DEVICE_OWNER_ROUTER_GW],"}],"source_content_type":"text/x-python","patch_set":1,"id":"d08b3d8e_fe86d167","line":337,"range":{"start_line":336,"start_character":17,"end_line":337,"end_character":58},"updated":"2025-10-01 19:23:15.000000000","message":"nit: There is IP_ANY map for this case\n```\nprefix \u003d n_const.IP_ANY[netaddr.IPAddress(orig_gw_ip).version]\n```","commit_id":"9482fd8166dab139b0825ac9597a6a2957b3489f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"950611260f06ca1bf5d9c72de8b145cd618c1f68","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        current_gw_ip \u003d current[\u0027gateway_ip\u0027]"},{"line_number":334,"context_line":"        if orig_gw_ip \u003d\u003d current_gw_ip:"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":"        prefix \u003d n_const.IPv4_ANY if netaddr.IPAddress("},{"line_number":337,"context_line":"            orig_gw_ip).version \u003d\u003d 4 else n_const.IPv6_ANY"},{"line_number":338,"context_line":"        gw_ports \u003d l3plugin._plugin.get_ports(context, filters\u003d{"},{"line_number":339,"context_line":"            \u0027network_id\u0027: [orig[\u0027network_id\u0027]],"},{"line_number":340,"context_line":"            \u0027device_owner\u0027: [n_const.DEVICE_OWNER_ROUTER_GW],"}],"source_content_type":"text/x-python","patch_set":1,"id":"4283c458_0540b724","line":337,"range":{"start_line":336,"start_character":17,"end_line":337,"end_character":58},"in_reply_to":"d08b3d8e_fe86d167","updated":"2025-10-30 20:41:56.000000000","message":"Done","commit_id":"9482fd8166dab139b0825ac9597a6a2957b3489f"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"1150e85b9ac6fc35b748270605431930bcb010f9","unresolved":true,"context_lines":[{"line_number":348,"context_line":"               ] if current_gw_ip else []"},{"line_number":349,"context_line":"        with l3plugin._nb_ovn.transaction(check_error\u003dTrue) as txn:"},{"line_number":350,"context_line":"            for router_id in router_ids:"},{"line_number":351,"context_line":"                l3plugin._ovn_client.update_router_routes("},{"line_number":352,"context_line":"                    context, router_id, add, remove, txn\u003dtxn)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"0e28b449_513ecbce","line":351,"updated":"2025-10-10 13:54:47.000000000","message":"update_router_routes() call has undesirable side effects in OVN.\n\nupdate_router_routes() sets the route\u0027s external_ids to only neutron:is_static_route: true. https://opendev.org/openstack/neutron/src/commit/d032eaf11d0c414fd8acd09e4a49f8bf5ea6c08f/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py#L1411\n\nHowever, when the external gateway of a router is set using \"openstack router r set --gateway ...\", the external_ids are set to different values\n\nhttps://opendev.org/openstack/neutron/src/commit/d032eaf11d0c414fd8acd09e4a49f8bf5ea6c08f/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py#L1332","commit_id":"14528d6668427b1138d6ad07481f8c729dcbee19"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"c600d54279b72d8c862a514008772a0ce8d130a8","unresolved":false,"context_lines":[{"line_number":348,"context_line":"               ] if current_gw_ip else []"},{"line_number":349,"context_line":"        with l3plugin._nb_ovn.transaction(check_error\u003dTrue) as txn:"},{"line_number":350,"context_line":"            for router_id in router_ids:"},{"line_number":351,"context_line":"                l3plugin._ovn_client.update_router_routes("},{"line_number":352,"context_line":"                    context, router_id, add, remove, txn\u003dtxn)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7e3f0477_8aed8073","line":351,"in_reply_to":"0e28b449_513ecbce","updated":"2025-11-13 14:09:10.000000000","message":"Done","commit_id":"14528d6668427b1138d6ad07481f8c729dcbee19"}],"neutron/tests/functional/services/ovn_l3/test_plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"950611260f06ca1bf5d9c72de8b145cd618c1f68","unresolved":true,"context_lines":[{"line_number":967,"context_line":"        for route in routes:"},{"line_number":968,"context_line":"            if route.ip_prefix \u003d\u003d n_consts.IPv6_ANY:"},{"line_number":969,"context_line":"                self.assertNotEqual(\u0027fd00::1\u0027, route.nexthop,"},{"line_number":970,"context_line":"                                    \"Old gateway route should be removed\")"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    def test_update_subnet_gateway_ipv4(self):"},{"line_number":973,"context_line":"        \"\"\"Test updating IPv4 subnet gateway updates OVN routes correctly."}],"source_content_type":"text/x-python","patch_set":8,"id":"6c3b901f_8d05e72e","line":970,"updated":"2025-10-30 20:41:56.000000000","message":"Since \u0027routes\u0027 has not changed, this could technically be around L958, or we could remove the for() loop entirely and use:\n\n        self.assertNotEqual(\u0027fd00::1\u0027, updated_route.nexthop,\n                            \"Old gateway route should be removed\")\n\nas \u0027updated_route\u0027 is what we are really comparing.\n\nBut then L963 has already verified this since it\u0027s comparing the nexthop to the new gateway.\n\nSo it seems all this can just be removed since it will always be true.\n\nClaude maybe should have known that 😊","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbb49bc886ee429b8fb35709b6c0aa256b186363","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        for route in routes:"},{"line_number":968,"context_line":"            if route.ip_prefix \u003d\u003d n_consts.IPv6_ANY:"},{"line_number":969,"context_line":"                self.assertNotEqual(\u0027fd00::1\u0027, route.nexthop,"},{"line_number":970,"context_line":"                                    \"Old gateway route should be removed\")"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    def test_update_subnet_gateway_ipv4(self):"},{"line_number":973,"context_line":"        \"\"\"Test updating IPv4 subnet gateway updates OVN routes correctly."}],"source_content_type":"text/x-python","patch_set":8,"id":"5f606dd4_86456ed9","line":970,"in_reply_to":"6c3b901f_8d05e72e","updated":"2025-10-31 18:48:46.000000000","message":"Done","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"950611260f06ca1bf5d9c72de8b145cd618c1f68","unresolved":true,"context_lines":[{"line_number":1036,"context_line":"        for route in routes:"},{"line_number":1037,"context_line":"            if route.ip_prefix \u003d\u003d n_consts.IPv4_ANY:"},{"line_number":1038,"context_line":"                self.assertNotEqual(\u0027120.0.0.1\u0027, route.nexthop,"},{"line_number":1039,"context_line":"                                    \"Old gateway route should be removed\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"28c82baf_ee4d028d","line":1039,"updated":"2025-10-30 20:41:56.000000000","message":"Same comment here.","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbb49bc886ee429b8fb35709b6c0aa256b186363","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"        for route in routes:"},{"line_number":1037,"context_line":"            if route.ip_prefix \u003d\u003d n_consts.IPv4_ANY:"},{"line_number":1038,"context_line":"                self.assertNotEqual(\u0027120.0.0.1\u0027, route.nexthop,"},{"line_number":1039,"context_line":"                                    \"Old gateway route should be removed\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"2804edbd_15814940","line":1039,"in_reply_to":"28c82baf_ee4d028d","updated":"2025-10-31 18:48:46.000000000","message":"Done","commit_id":"d1f33fefd60bce393463c694b4ceb04cdabb1340"}],"neutron/tests/unit/services/ovn_l3/test_plugin.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"7a9e2f30d64dabefc8aaca0b21167fcb7e0c9f98","unresolved":true,"context_lines":[{"line_number":2253,"context_line":"            test_update_subnet_gateway_for_external_net()"},{"line_number":2254,"context_line":""},{"line_number":2255,"context_line":"        # Get the subnet_id from the gateway port created by the parent test"},{"line_number":2256,"context_line":"        from neutron_lib import context as n_context"},{"line_number":2257,"context_line":"        ctx \u003d n_context.get_admin_context()"},{"line_number":2258,"context_line":"        gw_ports \u003d self.l3_inst._plugin.get_ports("},{"line_number":2259,"context_line":"            ctx, filters\u003d{"}],"source_content_type":"text/x-python","patch_set":6,"id":"76a9f416_804bb25c","line":2256,"range":{"start_line":2256,"start_character":8,"end_line":2256,"end_character":52},"updated":"2025-10-29 08:16:33.000000000","message":"please move this import to the top of the file where all other imports can be found","commit_id":"170c29e3162994e74fd20505035c7ecbb8036f8d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"950611260f06ca1bf5d9c72de8b145cd618c1f68","unresolved":false,"context_lines":[{"line_number":2253,"context_line":"            test_update_subnet_gateway_for_external_net()"},{"line_number":2254,"context_line":""},{"line_number":2255,"context_line":"        # Get the subnet_id from the gateway port created by the parent test"},{"line_number":2256,"context_line":"        from neutron_lib import context as n_context"},{"line_number":2257,"context_line":"        ctx \u003d n_context.get_admin_context()"},{"line_number":2258,"context_line":"        gw_ports \u003d self.l3_inst._plugin.get_ports("},{"line_number":2259,"context_line":"            ctx, filters\u003d{"}],"source_content_type":"text/x-python","patch_set":6,"id":"62d784ef_4caf8a0a","line":2256,"range":{"start_line":2256,"start_character":8,"end_line":2256,"end_character":52},"in_reply_to":"76a9f416_804bb25c","updated":"2025-10-30 20:41:56.000000000","message":"Done","commit_id":"170c29e3162994e74fd20505035c7ecbb8036f8d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"bb678827410bed7a2c26a193590661faa55c7514","unresolved":true,"context_lines":[{"line_number":2260,"context_line":"                \u0027device_owner\u0027: [constants.DEVICE_OWNER_ROUTER_GW],"},{"line_number":2261,"context_line":"                \u0027device_id\u0027: [\u0027fake_device\u0027]"},{"line_number":2262,"context_line":"            })"},{"line_number":2263,"context_line":"        subnet_id \u003d gw_ports[0][\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027] if gw_ports else None"},{"line_number":2264,"context_line":""},{"line_number":2265,"context_line":"        self.l3_inst._nb_ovn.add_static_route.assert_called_once_with("},{"line_number":2266,"context_line":"            \u0027neutron-fake_device\u0027, ip_prefix\u003dconstants.IPv4_ANY,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3b5362d4_78080e9e","line":2263,"updated":"2025-10-29 21:00:28.000000000","message":"This is over 80 chars wide and will cause a failure with a pep8 patch I have in flight. You can check locally with:\n\n$ tox -e pep8 -- HEAD~1\n...\nneutron/tests/unit/services/ovn_l3/test_plugin.py:2263:0: C0301: Line too long (82/79) (line-too-long)","commit_id":"4c382f8bf8d7be2241f973bde1ff57d6d1a8517c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"950611260f06ca1bf5d9c72de8b145cd618c1f68","unresolved":false,"context_lines":[{"line_number":2260,"context_line":"                \u0027device_owner\u0027: [constants.DEVICE_OWNER_ROUTER_GW],"},{"line_number":2261,"context_line":"                \u0027device_id\u0027: [\u0027fake_device\u0027]"},{"line_number":2262,"context_line":"            })"},{"line_number":2263,"context_line":"        subnet_id \u003d gw_ports[0][\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027] if gw_ports else None"},{"line_number":2264,"context_line":""},{"line_number":2265,"context_line":"        self.l3_inst._nb_ovn.add_static_route.assert_called_once_with("},{"line_number":2266,"context_line":"            \u0027neutron-fake_device\u0027, ip_prefix\u003dconstants.IPv4_ANY,"}],"source_content_type":"text/x-python","patch_set":7,"id":"13c97b28_323c9fed","line":2263,"in_reply_to":"3b5362d4_78080e9e","updated":"2025-10-30 20:41:56.000000000","message":"Done","commit_id":"4c382f8bf8d7be2241f973bde1ff57d6d1a8517c"}]}
