)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6f31fab65babad478049457607995a57077d0eff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"e56b4b6a_52f7b690","updated":"2026-06-01 21:12:21.000000000","message":"recheck failure of neutron.tests.unit.test_worker.WorkerLifecycleProbeTestCase.test_maintenance_worker_idle_methods_return doesn\u0027t seem related to patch","commit_id":"f1d6eda5f1138bcb349a0e24ea038a69333993e7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"491e1bff2f32506cb8c16705d568060684fc1f14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"68ca6c54_47f2ef78","updated":"2026-07-08 14:50:27.000000000","message":"recheck. Installation errors in several jobs not related to change","commit_id":"a0eaa53622626f16cc0fc9342d53fb37e1ce8169"}],"neutron/agent/ovn/extensions/segment_bridge.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f868ea4444481180f956753fe7106cc9ae9a4651","unresolved":true,"context_lines":[{"line_number":26,"context_line":"EXT_NAME \u003d \u0027segment_bridge\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def parse_ovn_bridge_mappings(mappings_value):"},{"line_number":30,"context_line":"    \"\"\"Parse ovn-bridge-mappings string into list[(physnet, bridge)]."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Example:"}],"source_content_type":"text/x-python","patch_set":1,"id":"573e56c6_5caae62f","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":29},"updated":"2026-03-25 09:06:19.000000000","message":"We have this method redundantly implemented in:\n* `neutron.agent.ovn.extensions.bgp.events._get_ovn_bridge_mappings`\n* `neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.extensions.placement._parse_bridge_mappings`\n\nWe should implement it once only in `neutron.common.ovn.utils`","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"164f637afb1763077232cedf079f4c0938a75168","unresolved":false,"context_lines":[{"line_number":26,"context_line":"EXT_NAME \u003d \u0027segment_bridge\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def parse_ovn_bridge_mappings(mappings_value):"},{"line_number":30,"context_line":"    \"\"\"Parse ovn-bridge-mappings string into list[(physnet, bridge)]."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Example:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ef6f27b_1d4d812c","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":29},"in_reply_to":"3cdb0643_b798fab5","updated":"2026-03-27 23:28:59.000000000","message":"Done","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"790ac4fc73b0b61b614ccf199c493b590d1a70a2","unresolved":true,"context_lines":[{"line_number":26,"context_line":"EXT_NAME \u003d \u0027segment_bridge\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def parse_ovn_bridge_mappings(mappings_value):"},{"line_number":30,"context_line":"    \"\"\"Parse ovn-bridge-mappings string into list[(physnet, bridge)]."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Example:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3cdb0643_b798fab5","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":29},"in_reply_to":"573e56c6_5caae62f","updated":"2026-03-27 23:26:24.000000000","message":"In reality, neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.extensions.placement._parse_bridge_mappings produces an output different to what I am looking for. But it calls https://github.com/openstack/neutron-lib/blob/master/neutron_lib/utils/helpers.py#L29, which fits my purposes pretty well.","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f868ea4444481180f956753fe7106cc9ae9a4651","unresolved":true,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def desired_specs_from_mappings(mappings_value, prefixes):"},{"line_number":89,"context_line":"    \"\"\"Build desired specs list from ovn-bridge-mappings and configured"},{"line_number":90,"context_line":"    prefixes."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Returns list[dict] with keys: physnet, bridge, trunk_bridge, vlan, prefix."},{"line_number":93,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"75d688b7_215987cb","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":12},"updated":"2026-03-25 09:06:19.000000000","message":"nit: that will be enforced in future versions of pep8 checks, titles should have 1 line only","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"790ac4fc73b0b61b614ccf199c493b590d1a70a2","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def desired_specs_from_mappings(mappings_value, prefixes):"},{"line_number":89,"context_line":"    \"\"\"Build desired specs list from ovn-bridge-mappings and configured"},{"line_number":90,"context_line":"    prefixes."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Returns list[dict] with keys: physnet, bridge, trunk_bridge, vlan, prefix."},{"line_number":93,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"d45c6ee7_9ca53cf3","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":12},"in_reply_to":"75d688b7_215987cb","updated":"2026-03-27 23:26:24.000000000","message":"Done","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f868ea4444481180f956753fe7106cc9ae9a4651","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @property"},{"line_number":129,"context_line":"    def ovs_idl_events(self):"},{"line_number":130,"context_line":"        return []"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @property"},{"line_number":133,"context_line":"    def nb_idl_tables(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9b1416c6_e1499a7d","line":130,"updated":"2026-03-25 09:06:19.000000000","message":"I know this is a WIP patch. I was expecting some event at least here. But as I said, I know this is still in progress.","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"790ac4fc73b0b61b614ccf199c493b590d1a70a2","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @property"},{"line_number":129,"context_line":"    def ovs_idl_events(self):"},{"line_number":130,"context_line":"        return []"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @property"},{"line_number":133,"context_line":"    def nb_idl_tables(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0498e9d0_853c207f","line":130,"in_reply_to":"9b1416c6_e1499a7d","updated":"2026-03-27 23:26:24.000000000","message":"Yes, you saw a very early version of the WIP","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3938630a5da33b75d0839a1d4162cdd6a6bd8bb3","unresolved":true,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def vlan_from_bridge_name(bridge_name, prefix):"},{"line_number":64,"context_line":"    \"\"\"Extract VLAN ID from \u0027\u003cprefix\u003e-\u003cvlan\u003e\u0027 bridge name.\"\"\""},{"line_number":65,"context_line":"    if not bridge_name.startswith(prefix):"},{"line_number":66,"context_line":"        return None"},{"line_number":67,"context_line":"    if len(bridge_name) \u003c\u003d len(prefix):"},{"line_number":68,"context_line":"        return None"},{"line_number":69,"context_line":"    if bridge_name[len(prefix)] !\u003d \u0027-\u0027:"},{"line_number":70,"context_line":"        return None"},{"line_number":71,"context_line":"    suffix \u003d bridge_name[len(prefix) + 1:]"},{"line_number":72,"context_line":"    if not re.fullmatch(r\u0027\\d+\u0027, suffix or \u0027\u0027):"},{"line_number":73,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":18,"id":"3791ef7d_7af8cee0","line":70,"range":{"start_line":65,"start_character":4,"end_line":70,"end_character":19},"updated":"2026-06-26 08:52:21.000000000","message":"I\u0027m not regex expert but can\u0027t all those ifs be replaced with regex like e.g. ``prefix-\\d+`` ?\n\nYou can even do something like: `re.compile(r\"prefix-(\\d+)\")` and then you will only have one match and if it will match you will have your suffix in the `groups()[0]`:\n\n    r \u003d re.compile(r\"prefix-(\\d+)\")\n    r.match(\"prefix-123\").groups()[0]","commit_id":"b9b00ffd4ede4724ab7466d8714300d50216ad1e"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1267b6ae572d8fad418bd02f7f2368a58a42f44a","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def vlan_from_bridge_name(bridge_name, prefix):"},{"line_number":64,"context_line":"    \"\"\"Extract VLAN ID from \u0027\u003cprefix\u003e-\u003cvlan\u003e\u0027 bridge name.\"\"\""},{"line_number":65,"context_line":"    if not bridge_name.startswith(prefix):"},{"line_number":66,"context_line":"        return None"},{"line_number":67,"context_line":"    if len(bridge_name) \u003c\u003d len(prefix):"},{"line_number":68,"context_line":"        return None"},{"line_number":69,"context_line":"    if bridge_name[len(prefix)] !\u003d \u0027-\u0027:"},{"line_number":70,"context_line":"        return None"},{"line_number":71,"context_line":"    suffix \u003d bridge_name[len(prefix) + 1:]"},{"line_number":72,"context_line":"    if not re.fullmatch(r\u0027\\d+\u0027, suffix or \u0027\u0027):"},{"line_number":73,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":18,"id":"009f16ec_a534d28c","line":70,"range":{"start_line":65,"start_character":4,"end_line":70,"end_character":19},"in_reply_to":"3791ef7d_7af8cee0","updated":"2026-07-08 00:04:53.000000000","message":"Done","commit_id":"b9b00ffd4ede4724ab7466d8714300d50216ad1e"}],"neutron/conf/agent/ovn/ovn_neutron_agent/config.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f868ea4444481180f956753fe7106cc9ae9a4651","unresolved":true,"context_lines":[{"line_number":37,"context_line":"SEGMENT_BRIDGE_OPTS \u003d ["},{"line_number":38,"context_line":"    cfg.ListOpt("},{"line_number":39,"context_line":"        \u0027segment_bridge_prefixes\u0027,"},{"line_number":40,"context_line":"        default\u003d[\u0027br-ex-\u0027],"},{"line_number":41,"context_line":"        help\u003d_(\u0027List of segment bridge prefixes managed by the OVN agent \u0027"},{"line_number":42,"context_line":"               \u0027segment-bridge extension. For a prefix ending with \"-\", \u0027"},{"line_number":43,"context_line":"               \u0027the trunk bridge name is derived by removing the trailing \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"5667c3cb_89af81d8","line":40,"range":{"start_line":40,"start_character":18,"end_line":40,"end_character":24},"updated":"2026-03-25 09:06:19.000000000","message":"Why instead of forcing the second dash in `br-ex-`, we don\u0027t enforce it in the code? I mean, it is easier for any admin just to add `br-ex` or `br-phys`, same as in other configurations. Then, the code will add the trailing `-`.\n\nThis is just a suggestion.","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"790ac4fc73b0b61b614ccf199c493b590d1a70a2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"SEGMENT_BRIDGE_OPTS \u003d ["},{"line_number":38,"context_line":"    cfg.ListOpt("},{"line_number":39,"context_line":"        \u0027segment_bridge_prefixes\u0027,"},{"line_number":40,"context_line":"        default\u003d[\u0027br-ex-\u0027],"},{"line_number":41,"context_line":"        help\u003d_(\u0027List of segment bridge prefixes managed by the OVN agent \u0027"},{"line_number":42,"context_line":"               \u0027segment-bridge extension. For a prefix ending with \"-\", \u0027"},{"line_number":43,"context_line":"               \u0027the trunk bridge name is derived by removing the trailing \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"60982e04_c5a45873","line":40,"range":{"start_line":40,"start_character":18,"end_line":40,"end_character":24},"in_reply_to":"5667c3cb_89af81d8","updated":"2026-03-27 23:26:24.000000000","message":"This is a very good suggestion. Thanks. Done","commit_id":"259adb33d50a93932880855ea850bce298bacaf2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3938630a5da33b75d0839a1d4162cdd6a6bd8bb3","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        default\u003d60,"},{"line_number":51,"context_line":"        min\u003d0,"},{"line_number":52,"context_line":"        help\u003d_(\u0027Reconcile interval in seconds for segment bridge desired \u0027"},{"line_number":53,"context_line":"               \u0027state. Set to 0 to disable periodic reconciliation.\u0027)),"},{"line_number":54,"context_line":"]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"f11dc04e_641b00ef","line":53,"updated":"2026-06-26 08:52:21.000000000","message":"why do user may want to disable it? Is it \"invasive\" in any way or can be resource heavy? I\u0027m just not sure if we need to give users control over this internal machanism","commit_id":"b9b00ffd4ede4724ab7466d8714300d50216ad1e"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1267b6ae572d8fad418bd02f7f2368a58a42f44a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        default\u003d60,"},{"line_number":51,"context_line":"        min\u003d0,"},{"line_number":52,"context_line":"        help\u003d_(\u0027Reconcile interval in seconds for segment bridge desired \u0027"},{"line_number":53,"context_line":"               \u0027state. Set to 0 to disable periodic reconciliation.\u0027)),"},{"line_number":54,"context_line":"]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"410c7bbc_00896d7c","line":53,"in_reply_to":"f11dc04e_641b00ef","updated":"2026-07-08 00:04:53.000000000","message":"You are probably right. This extension just creates OVS bridges, so I don\u0027t anticipate to be resource heavy. There is no good reason to disable it. I am removing this possibility","commit_id":"b9b00ffd4ede4724ab7466d8714300d50216ad1e"}],"pyproject.toml":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"40b0b6ea469c79668d9afaec6961f6baab2cbabd","unresolved":true,"context_lines":[{"line_number":175,"context_line":"testing \u003d \"neutron.tests.functional.agent.ovn.agent.fake_ovn_agent_extension:FakeOVNAgentExtension\""},{"line_number":176,"context_line":"ovn-bgp \u003d \"neutron.agent.ovn.extensions.bgp:BGPAgentExtension\""},{"line_number":177,"context_line":"ovn-evpn \u003d \"neutron.agent.ovn.extensions.evpn:EVPNAgentExtension\""},{"line_number":178,"context_line":"segment_bridge \u003d \"neutron.agent.ovn.extensions.segment_bridge:SegmentBridgeExtension\""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"[project.entry-points.\"neutron.services.logapi.drivers\"]"},{"line_number":181,"context_line":"ovs \u003d \"neutron.services.logapi.drivers.openvswitch.ovs_firewall_log:OVSFirewallLoggingDriver\""}],"source_content_type":"text/x-toml","patch_set":17,"id":"b3adbba1_9524066b","line":178,"range":{"start_line":178,"start_character":0,"end_line":178,"end_character":85},"updated":"2026-06-22 08:28:18.000000000","message":"Do you plan zuul yaml changes also to enable this for CI? Or do we need new job with some special settings?","commit_id":"b8f4d1be1ca3be3f58e2f50bba38eb6029417e12"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1267b6ae572d8fad418bd02f7f2368a58a42f44a","unresolved":false,"context_lines":[{"line_number":175,"context_line":"testing \u003d \"neutron.tests.functional.agent.ovn.agent.fake_ovn_agent_extension:FakeOVNAgentExtension\""},{"line_number":176,"context_line":"ovn-bgp \u003d \"neutron.agent.ovn.extensions.bgp:BGPAgentExtension\""},{"line_number":177,"context_line":"ovn-evpn \u003d \"neutron.agent.ovn.extensions.evpn:EVPNAgentExtension\""},{"line_number":178,"context_line":"segment_bridge \u003d \"neutron.agent.ovn.extensions.segment_bridge:SegmentBridgeExtension\""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"[project.entry-points.\"neutron.services.logapi.drivers\"]"},{"line_number":181,"context_line":"ovs \u003d \"neutron.services.logapi.drivers.openvswitch.ovs_firewall_log:OVSFirewallLoggingDriver\""}],"source_content_type":"text/x-toml","patch_set":17,"id":"c26684d3_6b689a5f","line":178,"range":{"start_line":178,"start_character":0,"end_line":178,"end_character":85},"in_reply_to":"b3adbba1_9524066b","updated":"2026-07-08 00:04:53.000000000","message":"I will propose a CI job as a follow up.","commit_id":"b8f4d1be1ca3be3f58e2f50bba38eb6029417e12"}]}
