)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"26e3f689e7743f6a41ccaaf3b883f358a294da7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f34e244c_d471c438","updated":"2026-09-17 09:21:39.000000000","message":"Please, open a LP bug describing the issue.\n\nAlso limit the commit message line size to 72 chars, just to format them well in gerrit","commit_id":"cc8ee99d4267c49e4b5be0d205b4060f2c8d7fa6"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"139fef2a22d429808d5c1e9c3b0f75694d1f0578","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e252ff33_85f86fc9","updated":"2026-10-15 10:21:24.000000000","message":"check experimental","commit_id":"11f8639927b61844cb921bd9ce25b14b7be5ec88"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"e11c653467dbb4701eab411be8a2dd42ef16f191","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"af3ddd75_dc8214bd","updated":"2026-10-14 11:11:47.000000000","message":"recheck neutron-ovn-grenade-multinode","commit_id":"11f8639927b61844cb921bd9ce25b14b7be5ec88"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"9fd1ca86305a4def602a7f16a558b80ef0932bd3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"35636044_2cc6373c","updated":"2026-10-12 16:09:56.000000000","message":"recheck neutron-tempest-plugin-openvswitch neutron-ovs-tempest-multinode-full neutron-ovs-tempest-dvr-ha-multinode-full","commit_id":"11f8639927b61844cb921bd9ce25b14b7be5ec88"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"7307c616db809652c4518fe36dc2500c9fdf5235","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b8c37535_36e13d3f","updated":"2026-10-15 14:21:10.000000000","message":"check experimental","commit_id":"2c04f272d1b08476bb03537060c5c8bd487dcdba"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1f3aea09b9ae0c38c2503be7aae6a1d201509141","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"117763d3_331297fd","updated":"2026-10-16 15:07:57.000000000","message":"check experimental","commit_id":"4957ac63cd563dd59d68dc3395b1bc4801d1affd"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"f4ff11d8f9371f76b2a82fa4183ed4f2d8fbd104","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c1ae8ba1_a8968dc6","updated":"2026-10-19 14:23:56.000000000","message":"recheck\n\nHeat nested-stack cleanup was still DELETE_IN_PROGRESS. Unrelated to this patch.","commit_id":"4957ac63cd563dd59d68dc3395b1bc4801d1affd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"559662a51c165abe422cedbdf3cca0526f87d6d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"cc4f5317_2713c502","updated":"2026-10-19 14:18:27.000000000","message":"recheck openstacksdk-functional-devstack","commit_id":"4957ac63cd563dd59d68dc3395b1bc4801d1affd"}],"neutron/common/ovn/constants.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"150c7b3fe5ccfe3deb6f64f1ea5b2695508f7b2e","unresolved":true,"context_lines":[{"line_number":78,"context_line":"OVN_NAME_PREFIX \u003d \u0027neutron-\u0027"},{"line_number":79,"context_line":"OVN_HA_CH_GROUP_EXTPORT_PREFIX \u003d \u0027neutron-extport-\u0027"},{"line_number":80,"context_line":"OVN_METADATA_PREFIX \u003d \u0027ovnmeta-\u0027"},{"line_number":81,"context_line":"OVN_LSP_TRANSACTION \u003d \u0027ovn-lsp-transaction\u0027"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"OVN_DATAPATH_TYPE \u003d \u0027datapath-type\u0027"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7051017d_bc391ad6","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":19},"updated":"2026-10-06 07:52:20.000000000","message":"I think we should have an independent section for this, with a similar title to `neutron_lib.callbacks.events`:\n```\n# String literals representing events associated to data store operations\n```\n\nI also think we should have the equivalent to the DB transactions. Here we should have `OVN_PRECOMMIT_CREATE` and `OVN_PRECOMMIT_UPDATE`, because you are calling it during the `create_port` and `update_port` transactions.","commit_id":"e7a841ac086821e2f41a971d48458e2b1a7784ea"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"9fd1ca86305a4def602a7f16a558b80ef0932bd3","unresolved":false,"context_lines":[{"line_number":78,"context_line":"OVN_NAME_PREFIX \u003d \u0027neutron-\u0027"},{"line_number":79,"context_line":"OVN_HA_CH_GROUP_EXTPORT_PREFIX \u003d \u0027neutron-extport-\u0027"},{"line_number":80,"context_line":"OVN_METADATA_PREFIX \u003d \u0027ovnmeta-\u0027"},{"line_number":81,"context_line":"OVN_LSP_TRANSACTION \u003d \u0027ovn-lsp-transaction\u0027"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"OVN_DATAPATH_TYPE \u003d \u0027datapath-type\u0027"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"8bbd125b_309924ae","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":19},"in_reply_to":"7051017d_bc391ad6","updated":"2026-10-12 16:09:56.000000000","message":"Done","commit_id":"e7a841ac086821e2f41a971d48458e2b1a7784ea"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"497b800c608c0cd5ae625e45470f4b408673bf19","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            if utils.is_ovn_metadata_port(port):"},{"line_number":487,"context_line":"                options[bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE] \u003d ("},{"line_number":488,"context_line":"                    \u0027false\u0027)"},{"line_number":489,"context_line":"            addresses \u003d []"},{"line_number":490,"context_line":"            port_security, new_macs \u003d ("},{"line_number":491,"context_line":"                self._get_allowed_addresses_from_port(port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"b19651a5_d25e5585","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":28},"updated":"2026-09-17 14:10:38.000000000","message":"Is there a way to set this in the EVPN Service Plugin in neutron/services/evpn/ ?  Neutron\u0027s behavior should not change if EVPN Service Plugin is not enabled.","commit_id":"0f3fc51d5627a87a503104c4077de68bcf536f41"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"924ef73c9bbec0d30a223b5f2c6decc7a717d372","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            if utils.is_ovn_metadata_port(port):"},{"line_number":487,"context_line":"                options[bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE] \u003d ("},{"line_number":488,"context_line":"                    \u0027false\u0027)"},{"line_number":489,"context_line":"            addresses \u003d []"},{"line_number":490,"context_line":"            port_security, new_macs \u003d ("},{"line_number":491,"context_line":"                self._get_allowed_addresses_from_port(port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"c61b9b1a_595ae3b2","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":28},"in_reply_to":"73e72a68_cc43893c","updated":"2026-09-17 18:09:43.000000000","message":"After further consulting, please model your code after this: https://review.opendev.org/c/openstack/neutron/+/1005961/1/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py#151","commit_id":"0f3fc51d5627a87a503104c4077de68bcf536f41"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"0d91a4f4e662c4160bb62300d10a3e0ce31ded5e","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            if utils.is_ovn_metadata_port(port):"},{"line_number":487,"context_line":"                options[bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE] \u003d ("},{"line_number":488,"context_line":"                    \u0027false\u0027)"},{"line_number":489,"context_line":"            addresses \u003d []"},{"line_number":490,"context_line":"            port_security, new_macs \u003d ("},{"line_number":491,"context_line":"                self._get_allowed_addresses_from_port(port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dbba07ac_3774264d","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":28},"in_reply_to":"b19651a5_d25e5585","updated":"2026-09-17 14:50:20.000000000","message":"Thanks Helen. I looked at putting this only in the EVPN plugin. The metadata IP is on the LSP, and OVN ML2 replaces the whole options map from _get_port_options() on port update. If EVPN setkeys dynamic-routing-advertise\u003dfalse and a later Neutron update rebuilds options without that key, OVN falls back to default true and the metadata address is advertised again.\n\nWould it work for you if we keep the write in _get_port_options(), gated with directory.get_plugin(plugin_constants.EVPN), so we set \u0027false\u0027 only when the EVPN plugin is enabled? Happy to adjust if you would rather scope it more tightly (for example only networks with --advertise-host).","commit_id":"0f3fc51d5627a87a503104c4077de68bcf536f41"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"68609fb7da89a5ebe9f8ada6f477fbe7cd268297","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            if utils.is_ovn_metadata_port(port):"},{"line_number":487,"context_line":"                options[bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE] \u003d ("},{"line_number":488,"context_line":"                    \u0027false\u0027)"},{"line_number":489,"context_line":"            addresses \u003d []"},{"line_number":490,"context_line":"            port_security, new_macs \u003d ("},{"line_number":491,"context_line":"                self._get_allowed_addresses_from_port(port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"331c856b_96ead2fa","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":28},"in_reply_to":"bc76876d_548040a9","updated":"2026-10-02 14:20:34.000000000","message":"Done","commit_id":"0f3fc51d5627a87a503104c4077de68bcf536f41"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"46c28dbf1a25ea0ccb38d53642be6ec96ae325c3","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            if utils.is_ovn_metadata_port(port):"},{"line_number":487,"context_line":"                options[bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE] \u003d ("},{"line_number":488,"context_line":"                    \u0027false\u0027)"},{"line_number":489,"context_line":"            addresses \u003d []"},{"line_number":490,"context_line":"            port_security, new_macs \u003d ("},{"line_number":491,"context_line":"                self._get_allowed_addresses_from_port(port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"bc76876d_548040a9","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":28},"in_reply_to":"c61b9b1a_595ae3b2","updated":"2026-09-18 08:26:41.000000000","message":"Thanks for the feedback Helen, I’ll move this out of plugins and into services/evpn/commands.py.","commit_id":"0f3fc51d5627a87a503104c4077de68bcf536f41"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"07e7f71ed0aea5f988d7172de0b9ae9cd967da2f","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            if utils.is_ovn_metadata_port(port):"},{"line_number":487,"context_line":"                options[bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE] \u003d ("},{"line_number":488,"context_line":"                    \u0027false\u0027)"},{"line_number":489,"context_line":"            addresses \u003d []"},{"line_number":490,"context_line":"            port_security, new_macs \u003d ("},{"line_number":491,"context_line":"                self._get_allowed_addresses_from_port(port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"73e72a68_cc43893c","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":28},"in_reply_to":"dbba07ac_3774264d","updated":"2026-09-17 15:26:50.000000000","message":"Ideally we would like to keep EVPN code in neutron/services/evpn/ .  Would finding this port in evpn/commands.py be a reasonable alternative?","commit_id":"0f3fc51d5627a87a503104c4077de68bcf536f41"}],"neutron/services/evpn/plugin.py":[{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"52fa3be31b701844b680f43f5c0afb00732505fc","unresolved":true,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @registry.receives(resources.PORT, [ovn_const.OVN_LSP_TRANSACTION])"},{"line_number":246,"context_line":"    def _process_metadata_port(self, resource, event, trigger, payload):"},{"line_number":247,"context_line":"        \"\"\"Set dynamic-routing-advertise\u003dfalse on a metadata LSP."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        Called from ovn_client while the NB transaction is still open,"},{"line_number":250,"context_line":"        after the LSP create or the full options replace."}],"source_content_type":"text/x-python","patch_set":4,"id":"95873b29_836a87be","line":247,"range":{"start_line":247,"start_character":11,"end_line":247,"end_character":64},"updated":"2026-10-02 16:57:51.000000000","message":"Should dynamic-routing-advertise\u003dfalse be unset when the logical switch where this port is, is no longer connected to an EVPN router?","commit_id":"e936662e876027b1682eac9a0cdaa045ea400bb1"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"d2835bbcad22f48ca96e82813536534992cf3cdd","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @registry.receives(resources.PORT, [ovn_const.OVN_LSP_TRANSACTION])"},{"line_number":246,"context_line":"    def _process_metadata_port(self, resource, event, trigger, payload):"},{"line_number":247,"context_line":"        \"\"\"Set dynamic-routing-advertise\u003dfalse on a metadata LSP."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        Called from ovn_client while the NB transaction is still open,"},{"line_number":250,"context_line":"        after the LSP create or the full options replace."}],"source_content_type":"text/x-python","patch_set":4,"id":"d5b5fa47_49e67807","line":247,"range":{"start_line":247,"start_character":11,"end_line":247,"end_character":64},"in_reply_to":"95873b29_836a87be","updated":"2026-10-05 13:54:50.000000000","message":"Hi Helen, I added the cleanup we discussed. When the router interface is removed, _process_router_interface_delete() drops the evpn_networks row and RestoreMetadataAdvertiseCommand deletes dynamic-routing-advertise from the metadata LSP. With the key gone, OVN\u0027s default of true applies again.","commit_id":"e936662e876027b1682eac9a0cdaa045ea400bb1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"150c7b3fe5ccfe3deb6f64f1ea5b2695508f7b2e","unresolved":true,"context_lines":[{"line_number":218,"context_line":"        if not interface_info.get(evpn_apidef.ADVERTISE_HOST):"},{"line_number":219,"context_line":"            return"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        port \u003d payload.metadata[\u0027port\u0027]"},{"line_number":222,"context_line":"        port_id \u003d port[\u0027id\u0027]"},{"line_number":223,"context_line":"        network_id \u003d port[\u0027network_id\u0027]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        core_plugin \u003d directory.get_plugin()"}],"source_content_type":"text/x-python","patch_set":5,"id":"8cd54ca9_51f359e8","line":222,"range":{"start_line":221,"start_character":8,"end_line":222,"end_character":28},"updated":"2026-10-06 07:52:20.000000000","message":"nit: I don\u0027t understand this change from\n```\nport_id \u003d payload.metadata[\u0027port\u0027][\u0027id\u0027]\n```","commit_id":"e7a841ac086821e2f41a971d48458e2b1a7784ea"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"9fd1ca86305a4def602a7f16a558b80ef0932bd3","unresolved":true,"context_lines":[{"line_number":218,"context_line":"        if not interface_info.get(evpn_apidef.ADVERTISE_HOST):"},{"line_number":219,"context_line":"            return"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        port \u003d payload.metadata[\u0027port\u0027]"},{"line_number":222,"context_line":"        port_id \u003d port[\u0027id\u0027]"},{"line_number":223,"context_line":"        network_id \u003d port[\u0027network_id\u0027]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        core_plugin \u003d directory.get_plugin()"}],"source_content_type":"text/x-python","patch_set":5,"id":"798f25b3_4d2e6158","line":222,"range":{"start_line":221,"start_character":8,"end_line":222,"end_character":28},"in_reply_to":"8cd54ca9_51f359e8","updated":"2026-10-12 16:09:56.000000000","message":"We now read both id and network_id from payload.metadata[\u0027port\u0027],\nso I bound that dict to port. The same pattern is already used in\n_process_router_interface_create(). Happy to switch to the form\nbelow if you prefer it:\n\nport_id \u003d payload.metadata[\u0027port\u0027][\u0027id\u0027]\nnetwork_id \u003d payload.metadata[\u0027port\u0027][\u0027network_id\u0027]","commit_id":"e7a841ac086821e2f41a971d48458e2b1a7784ea"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"150c7b3fe5ccfe3deb6f64f1ea5b2695508f7b2e","unresolved":true,"context_lines":[{"line_number":223,"context_line":"        network_id \u003d port[\u0027network_id\u0027]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        core_plugin \u003d directory.get_plugin()"},{"line_number":226,"context_line":"        distributed_ports \u003d core_plugin.get_ports("},{"line_number":227,"context_line":"            payload.context.elevated(),"},{"line_number":228,"context_line":"            filters\u003d{"},{"line_number":229,"context_line":"                \u0027network_id\u0027: [network_id],"},{"line_number":230,"context_line":"                \u0027device_owner\u0027: [n_const.DEVICE_OWNER_DISTRIBUTED],"},{"line_number":231,"context_line":"            })"},{"line_number":232,"context_line":"        metadata_ports \u003d ["},{"line_number":233,"context_line":"            p for p in distributed_ports if ovn_utils.is_ovn_metadata_port(p)"},{"line_number":234,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"7e0ace46_f797b138","line":231,"range":{"start_line":226,"start_character":8,"end_line":231,"end_character":14},"updated":"2026-10-06 07:52:20.000000000","message":"To create a Port OVO is expensive. I would implement something like `get_gateway_port_ids_by_network`, but in this case `get_metadata_port_ids_by_network`. This method will return only the port ID and the query will be much faster.","commit_id":"e7a841ac086821e2f41a971d48458e2b1a7784ea"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"9fd1ca86305a4def602a7f16a558b80ef0932bd3","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        network_id \u003d port[\u0027network_id\u0027]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        core_plugin \u003d directory.get_plugin()"},{"line_number":226,"context_line":"        distributed_ports \u003d core_plugin.get_ports("},{"line_number":227,"context_line":"            payload.context.elevated(),"},{"line_number":228,"context_line":"            filters\u003d{"},{"line_number":229,"context_line":"                \u0027network_id\u0027: [network_id],"},{"line_number":230,"context_line":"                \u0027device_owner\u0027: [n_const.DEVICE_OWNER_DISTRIBUTED],"},{"line_number":231,"context_line":"            })"},{"line_number":232,"context_line":"        metadata_ports \u003d ["},{"line_number":233,"context_line":"            p for p in distributed_ports if ovn_utils.is_ovn_metadata_port(p)"},{"line_number":234,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a90f153_a441cae9","line":231,"range":{"start_line":226,"start_character":8,"end_line":231,"end_character":14},"in_reply_to":"7e0ace46_f797b138","updated":"2026-10-12 16:09:56.000000000","message":"Done","commit_id":"e7a841ac086821e2f41a971d48458e2b1a7784ea"}],"neutron/tests/functional/services/evpn/test_commands.py":[{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"b415f14f76158291b68f9cae8a7a511f9ce850c1","unresolved":true,"context_lines":[{"line_number":381,"context_line":"                bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE))"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"class SuppressMetadataAdvertiseCommandTestCase(bgp_base.BaseBgpNbIdlTestCase):"},{"line_number":385,"context_line":"    def setUp(self):"},{"line_number":386,"context_line":"        super().setUp()"},{"line_number":387,"context_line":"        self.ls_name \u003d func_base.get_unique_name(\"ls\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ef6c6fa_d0cdf982","line":384,"updated":"2026-10-16 14:56:45.000000000","message":"Should RestoreMetadataAdvertiseCommand also be tested?","commit_id":"2c04f272d1b08476bb03537060c5c8bd487dcdba"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"fa79c592a014b56311de292e39b7597b8b804a19","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                bgp_const.LRP_OPTIONS_DYNAMIC_ROUTING_ADVERTISE))"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"class SuppressMetadataAdvertiseCommandTestCase(bgp_base.BaseBgpNbIdlTestCase):"},{"line_number":385,"context_line":"    def setUp(self):"},{"line_number":386,"context_line":"        super().setUp()"},{"line_number":387,"context_line":"        self.ls_name \u003d func_base.get_unique_name(\"ls\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"027c7a07_1d1b6b5f","line":384,"in_reply_to":"5ef6c6fa_d0cdf982","updated":"2026-10-16 15:08:17.000000000","message":"Done","commit_id":"2c04f272d1b08476bb03537060c5c8bd487dcdba"}]}
