)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85ebba98bb45b58eaac5dbef8d7bc9dc18a23a10","unresolved":true,"context_lines":[{"line_number":15,"context_line":"2. Removes the default route for the deleted subnet\u0027s gateway IP"},{"line_number":16,"context_line":"3. Updates the OVN logical router port to sync with the current port state"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"https://bugs.launchpad.net/neutron/+bug/2099982"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Closes-Bug: #2099982"},{"line_number":21,"context_line":"Change-Id: If72bfb2b4ca6e2f98e693f6150fa0caa7d3c5f80"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"b0f67d22_b159dad7","line":18,"updated":"2026-03-03 03:16:19.000000000","message":"Don\u0027t need this as below is enough","commit_id":"27d636167cc5f951063519002bcada2e9f450ee0"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0ed67bfc5b04df6cf1d9d4b44f2910604e09f6a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"adb6793a_ba6938ce","updated":"2026-02-04 19:51:41.000000000","message":"And just to be pedantic you shouldn\u0027t +1 your own patches.","commit_id":"d5625b9ec22c70ce516c352051f6e84d2c3a86bd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85ebba98bb45b58eaac5dbef8d7bc9dc18a23a10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8edf2789_9caf585d","updated":"2026-03-03 03:16:19.000000000","message":"Sorry, this review fell between the cracks, just had some minor nits","commit_id":"27d636167cc5f951063519002bcada2e9f450ee0"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0ed67bfc5b04df6cf1d9d4b44f2910604e09f6a5","unresolved":true,"context_lines":[{"line_number":417,"context_line":"            router_id \u003d port[\u0027device_id\u0027]"},{"line_number":418,"context_line":"            try:"},{"line_number":419,"context_line":"                router \u003d l3plugin.get_router(context, router_id)"},{"line_number":420,"context_line":"                if utils.is_ovn_provider_router(router):"},{"line_number":421,"context_line":"                    router_ids.add(router_id)"},{"line_number":422,"context_line":"                    router_gw_ports.setdefault(router_id, []).append(port)"},{"line_number":423,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e089610a_1465b624","line":420,"updated":"2026-02-04 19:51:41.000000000","message":"This code can be outside of try/except","commit_id":"d5625b9ec22c70ce516c352051f6e84d2c3a86bd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0ed67bfc5b04df6cf1d9d4b44f2910604e09f6a5","unresolved":true,"context_lines":[{"line_number":420,"context_line":"                if utils.is_ovn_provider_router(router):"},{"line_number":421,"context_line":"                    router_ids.add(router_id)"},{"line_number":422,"context_line":"                    router_gw_ports.setdefault(router_id, []).append(port)"},{"line_number":423,"context_line":"            except Exception as e:"},{"line_number":424,"context_line":"                # Router may have been deleted concurrently"},{"line_number":425,"context_line":"                LOG.debug(\"Could not get router %s during subnet delete \""},{"line_number":426,"context_line":"                          \"processing: %s\", router_id, e)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b16bc918_cb704264","line":423,"updated":"2026-02-04 19:51:41.000000000","message":"Should catch the specific \"not found\" exception, something like:\n\nfrom neutron_lib.exceptions import l3 as l3_exc\nl3_exc.RouterNotFound","commit_id":"d5625b9ec22c70ce516c352051f6e84d2c3a86bd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0ed67bfc5b04df6cf1d9d4b44f2910604e09f6a5","unresolved":true,"context_lines":[{"line_number":423,"context_line":"            except Exception as e:"},{"line_number":424,"context_line":"                # Router may have been deleted concurrently"},{"line_number":425,"context_line":"                LOG.debug(\"Could not get router %s during subnet delete \""},{"line_number":426,"context_line":"                          \"processing: %s\", router_id, e)"},{"line_number":427,"context_line":"                continue"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        if not router_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e26fae56_2e850c41","line":426,"updated":"2026-02-04 19:51:41.000000000","message":"Should be consistent in log message, something like this copied from elsewhere:\n\nLOG.debug(\"Router %(id)s was concurrently deleted while \"\n          \"updating GW port for subnet %(s)s\",\n          {\u0027id\u0027: router_id, \u0027s\u0027: subnet})","commit_id":"d5625b9ec22c70ce516c352051f6e84d2c3a86bd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85ebba98bb45b58eaac5dbef8d7bc9dc18a23a10","unresolved":true,"context_lines":[{"line_number":388,"context_line":"        from the OVN logical router port and remove the default route"},{"line_number":389,"context_line":"        that was using the deleted subnet\u0027s gateway."},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        Related-Bug: #2099981"},{"line_number":392,"context_line":"        \"\"\""},{"line_number":393,"context_line":"        l3plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":394,"context_line":"        if not l3plugin:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3b46a51d_795b2811","line":391,"updated":"2026-03-03 03:16:19.000000000","message":"nit: don\u0027t really need this line","commit_id":"27d636167cc5f951063519002bcada2e9f450ee0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85ebba98bb45b58eaac5dbef8d7bc9dc18a23a10","unresolved":true,"context_lines":[{"line_number":398,"context_line":"        subnet \u003d payload.latest_state"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # Get the subnet\u0027s gateway IP for route removal"},{"line_number":401,"context_line":"        gateway_ip \u003d subnet.get(\u0027gateway_ip\u0027)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        # Find all gateway ports on this network"},{"line_number":404,"context_line":"        # Note: We cannot filter by subnet_id here because the fixed_ips"}],"source_content_type":"text/x-python","patch_set":3,"id":"9eefc854_fdf37605","line":401,"updated":"2026-03-03 03:16:19.000000000","message":"nit: should maybe be right before it\u0027s used around L434 as we might return early","commit_id":"27d636167cc5f951063519002bcada2e9f450ee0"}],"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":"85ebba98bb45b58eaac5dbef8d7bc9dc18a23a10","unresolved":true,"context_lines":[{"line_number":2293,"context_line":"            resource_id\u003ddeleted_subnet[\u0027id\u0027],"},{"line_number":2294,"context_line":"            states\u003d(deleted_subnet,))"},{"line_number":2295,"context_line":""},{"line_number":2296,"context_line":"        # Mock the l3plugin._plugin.get_ports and _update_lrouter_port"},{"line_number":2297,"context_line":"        with mock.patch.object("},{"line_number":2298,"context_line":"                self.l3_inst._plugin, \u0027get_ports\u0027,"},{"line_number":2299,"context_line":"                return_value\u003d[fake_gw_port]), \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"4a70e610_d82fa7b4","line":2296,"updated":"2026-03-03 03:16:19.000000000","message":"nit: don\u0027t really need the comment","commit_id":"27d636167cc5f951063519002bcada2e9f450ee0"}]}
