)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1307243f0e9893a53b6bfd96546c8b4d8089b6da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9ce5021b_bb69cce9","updated":"2026-10-23 16:13:33.000000000","message":"Finally got through this, seems Ok, really only nits.","commit_id":"ce323d18f81b10610368f2a97e66659e6a6fc322"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a32b311fe53759f45910e1af7bd7c24ef7cd52d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"80bfba3b_2aa779fc","updated":"2026-10-26 13:58:03.000000000","message":"recheck neutron-ovs-rally-task","commit_id":"9bdccd93e3add56b00a94af05364298a9543fec9"}],"neutron/db/segments_db.py":[{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"1b3ba39a19856c367ffaff033913ae88033f76c0","unresolved":true,"context_lines":[{"line_number":98,"context_line":"                                 context, resource_id\u003dnetseg_obj.id,"},{"line_number":99,"context_line":"                                 states\u003d(netseg_obj,)))"},{"line_number":100,"context_line":"            segment[\u0027id\u0027] \u003d netseg_obj.id"},{"line_number":101,"context_line":"    except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":102,"context_line":"        if is_dynamic:"},{"line_number":103,"context_line":"            raise"},{"line_number":104,"context_line":"        _raise_segment_in_use(network_type, physical_network, segmentation_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ee86173b_239209e8","line":101,"updated":"2026-10-28 11:21:17.000000000","message":"With Claude\u0027s assistance: this conversion turns a retriable exception into a non-retriable one — `is_retriable()` recognizes `NeutronDbObjectDuplicateEntry` but not `VlanIdInUse`/`TunnelIdInUse`. So on the partial allocation path, the loser of a concurrent race now gets a hard 409 instead of being retried with a fresh ID.\n\nCould we keep the conversion only for the fully-specified path?","commit_id":"9bdccd93e3add56b00a94af05364298a9543fec9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5555cdb22065b16823330d5a43abdc022688dd32","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                 context, resource_id\u003dnetseg_obj.id,"},{"line_number":99,"context_line":"                                 states\u003d(netseg_obj,)))"},{"line_number":100,"context_line":"            segment[\u0027id\u0027] \u003d netseg_obj.id"},{"line_number":101,"context_line":"    except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":102,"context_line":"        if is_dynamic:"},{"line_number":103,"context_line":"            raise"},{"line_number":104,"context_line":"        _raise_segment_in_use(network_type, physical_network, segmentation_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"67d5d7df_ea450933","line":101,"in_reply_to":"ee86173b_239209e8","updated":"2026-10-28 12:00:13.000000000","message":"You are right: the segment creation path needs a retriable exception. I\u0027ve proposed https://review.opendev.org/c/openstack/neutron/+/1012688","commit_id":"9bdccd93e3add56b00a94af05364298a9543fec9"}],"neutron/objects/plugins/ml2/vlanallocation.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"812f970c9cf528c12bea6424908691781cb523a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Intel Corporation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"90607106_47d77666","line":1,"updated":"2026-09-29 13:27:44.000000000","message":"pep8: H104: File contains nothing but comments","commit_id":"4a14d3955c17fb01f89612a58756d32800dd0783"}],"neutron/plugins/ml2/drivers/helpers.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"18cfe3fc2a66b9c427191b26e88976c771bf50ce","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    duplicate allocations at the DB level."},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self):"},{"line_number":63,"context_line":"        super().__init__()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _get_used_segmentation_ids(self, context, physical_network,"}],"source_content_type":"text/x-python","patch_set":4,"id":"d9226f0b_34c03615","line":62,"updated":"2026-10-10 17:20:49.000000000","message":"pep8: W0246: Useless parent or super() delegation in method \u0027__init__\u0027 (useless-parent-delegation)","commit_id":"3c0d23acd3777f65cb8386c66ae1ba6578272ad6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"18cfe3fc2a66b9c427191b26e88976c771bf50ce","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        computation when random probing fails."},{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        max_attempts \u003d 100"},{"line_number":106,"context_line":"        intervals \u003d [(lo, hi) for lo, hi in ranges]"},{"line_number":107,"context_line":"        total \u003d sum(hi - lo + 1 for lo, hi in intervals)"},{"line_number":108,"context_line":"        if total \u003c\u003d 0:"},{"line_number":109,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"14f17556_d95902d3","line":106,"updated":"2026-10-10 17:20:49.000000000","message":"pep8: R1721: Unnecessary use of a comprehension, use list(ranges) instead. (unnecessary-comprehension)","commit_id":"3c0d23acd3777f65cb8386c66ae1ba6578272ad6"}],"neutron/plugins/ml2/drivers/type_tunnel.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"18cfe3fc2a66b9c427191b26e88976c771bf50ce","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class _TunnelTypeDriverBase(helpers.SegmentTypeDriver, metaclass\u003dabc.ABCMeta):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self):"},{"line_number":43,"context_line":"        super().__init__()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"3302ba15_dce2f854","line":42,"updated":"2026-10-10 17:20:49.000000000","message":"pep8: W0246: Useless parent or super() delegation in method \u0027__init__\u0027 (useless-parent-delegation)","commit_id":"3c0d23acd3777f65cb8386c66ae1ba6578272ad6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"18cfe3fc2a66b9c427191b26e88976c771bf50ce","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        ``NETWORK_SEGMENT_RANGE`` service plugin is enabled. Otherwise,"},{"line_number":190,"context_line":"        they will be loaded from the host config file - `ml2_conf.ini`."},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        from neutron_lib.plugins import constants as plugin_constants"},{"line_number":193,"context_line":"        from neutron_lib.plugins import directory"},{"line_number":194,"context_line":"        ranges \u003d self._tunnel_ranges"},{"line_number":195,"context_line":"        if directory.get_plugin(plugin_constants.NETWORK_SEGMENT_RANGE):"}],"source_content_type":"text/x-python","patch_set":4,"id":"4804fd49_eb2628d3","line":192,"updated":"2026-10-10 17:20:49.000000000","message":"pep8: C0415: Import outside toplevel (neutron_lib.plugins.constants) (import-outside-toplevel)","commit_id":"3c0d23acd3777f65cb8386c66ae1ba6578272ad6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"18cfe3fc2a66b9c427191b26e88976c771bf50ce","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        they will be loaded from the host config file - `ml2_conf.ini`."},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        from neutron_lib.plugins import constants as plugin_constants"},{"line_number":193,"context_line":"        from neutron_lib.plugins import directory"},{"line_number":194,"context_line":"        ranges \u003d self._tunnel_ranges"},{"line_number":195,"context_line":"        if directory.get_plugin(plugin_constants.NETWORK_SEGMENT_RANGE):"},{"line_number":196,"context_line":"            ranges \u003d self._get_network_segment_ranges_from_db()"}],"source_content_type":"text/x-python","patch_set":4,"id":"32663692_0404e2a9","line":193,"updated":"2026-10-10 17:20:49.000000000","message":"pep8: C0415: Import outside toplevel (neutron_lib.plugins.directory) (import-outside-toplevel)","commit_id":"3c0d23acd3777f65cb8386c66ae1ba6578272ad6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1307243f0e9893a53b6bfd96546c8b4d8089b6da","unresolved":true,"context_lines":[{"line_number":225,"context_line":"            seg_id \u003d segment.get(api.SEGMENTATION_ID)"},{"line_number":226,"context_line":"            self._ensure_segmentation_id_available("},{"line_number":227,"context_line":"                context, \u0027\u0027, seg_id,"},{"line_number":228,"context_line":"                exclude_segment_id\u003d(filters or {}).get(\u0027segment_id\u0027))"},{"line_number":229,"context_line":"        return {api.NETWORK_TYPE: self.get_type(),"},{"line_number":230,"context_line":"                api.PHYSICAL_NETWORK: \u0027\u0027,"},{"line_number":231,"context_line":"                api.SEGMENTATION_ID: seg_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"0140ed95_82d2811a","line":228,"range":{"start_line":228,"start_character":36,"end_line":228,"end_character":49},"updated":"2026-10-23 16:13:33.000000000","message":"L211 should have initialized this","commit_id":"ce323d18f81b10610368f2a97e66659e6a6fc322"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"139185789348d85c0ae32fb0ab21ce43071e3546","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            seg_id \u003d segment.get(api.SEGMENTATION_ID)"},{"line_number":226,"context_line":"            self._ensure_segmentation_id_available("},{"line_number":227,"context_line":"                context, \u0027\u0027, seg_id,"},{"line_number":228,"context_line":"                exclude_segment_id\u003d(filters or {}).get(\u0027segment_id\u0027))"},{"line_number":229,"context_line":"        return {api.NETWORK_TYPE: self.get_type(),"},{"line_number":230,"context_line":"                api.PHYSICAL_NETWORK: \u0027\u0027,"},{"line_number":231,"context_line":"                api.SEGMENTATION_ID: seg_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ee253b3d_8d0691a8","line":228,"range":{"start_line":228,"start_character":36,"end_line":228,"end_character":49},"in_reply_to":"0140ed95_82d2811a","updated":"2026-10-26 11:48:20.000000000","message":"Done","commit_id":"ce323d18f81b10610368f2a97e66659e6a6fc322"}],"neutron/plugins/ml2/drivers/type_vlan.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"422bad2295333127d11bed857f48132ba5048af4","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        filters \u003d {\u0027network_type\u0027: p_const.TYPE_VLAN}"},{"line_number":106,"context_line":"        if default is not None:"},{"line_number":107,"context_line":"            filters[\u0027default\u0027] \u003d default"},{"line_number":108,"context_line":"        ranges \u003d collections.defaultdict(list)"},{"line_number":109,"context_line":"        for obj in range_obj.NetworkSegmentRange.get_objects(ctx, **filters):"},{"line_number":110,"context_line":"            ranges[obj[\u0027physical_network\u0027]].append("}],"source_content_type":"text/x-python","patch_set":2,"id":"9f4a7446_23bae625","line":107,"updated":"2026-10-06 16:25:34.000000000","message":"pep8: F821 undefined name \u0027collections\u0027","commit_id":"ccab6bd382e012b129947c340b1679bad03766ca"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"422bad2295333127d11bed857f48132ba5048af4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if not previous_default_ranges:"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        effective_ranges \u003d self._network_segment_ranges(ctx)"},{"line_number":139,"context_line":"        orphaned \u003d collections.defaultdict(set)"},{"line_number":140,"context_line":"        allocations \u003d vlanalloc.VlanAllocation.get_objects("},{"line_number":141,"context_line":"            ctx, allocated\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a4e692da_4ecd6883","line":138,"updated":"2026-10-06 16:25:34.000000000","message":"pep8: F821 undefined name \u0027collections\u0027","commit_id":"ccab6bd382e012b129947c340b1679bad03766ca"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1307243f0e9893a53b6bfd96546c8b4d8089b6da","unresolved":true,"context_lines":[{"line_number":272,"context_line":"            seg_id \u003d segment.get(api.SEGMENTATION_ID)"},{"line_number":273,"context_line":"            self._ensure_segmentation_id_available("},{"line_number":274,"context_line":"                context, physical_network, seg_id,"},{"line_number":275,"context_line":"                exclude_segment_id\u003d(filters or {}).get(\u0027segment_id\u0027))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        return {api.NETWORK_TYPE: p_const.TYPE_VLAN,"},{"line_number":278,"context_line":"                api.PHYSICAL_NETWORK: physical_network,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa6cd40f_ec55ab4d","line":275,"range":{"start_line":275,"start_character":36,"end_line":275,"end_character":49},"updated":"2026-10-23 16:13:33.000000000","message":"L241 should have initialized this","commit_id":"ce323d18f81b10610368f2a97e66659e6a6fc322"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"139185789348d85c0ae32fb0ab21ce43071e3546","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            seg_id \u003d segment.get(api.SEGMENTATION_ID)"},{"line_number":273,"context_line":"            self._ensure_segmentation_id_available("},{"line_number":274,"context_line":"                context, physical_network, seg_id,"},{"line_number":275,"context_line":"                exclude_segment_id\u003d(filters or {}).get(\u0027segment_id\u0027))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        return {api.NETWORK_TYPE: p_const.TYPE_VLAN,"},{"line_number":278,"context_line":"                api.PHYSICAL_NETWORK: physical_network,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3c0a4a2a_60a305ac","line":275,"range":{"start_line":275,"start_character":36,"end_line":275,"end_character":49},"in_reply_to":"fa6cd40f_ec55ab4d","updated":"2026-10-26 11:48:20.000000000","message":"Done","commit_id":"ce323d18f81b10610368f2a97e66659e6a6fc322"}],"neutron/plugins/ml2/managers.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b5d923377ce7b137dde66c7c673f8fa013990194","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        try:"},{"line_number":360,"context_line":"            with db_api.CONTEXT_WRITER.using(context):"},{"line_number":361,"context_line":"                driver \u003d self.drivers.get(segment.get(api.NETWORK_TYPE))"},{"line_number":362,"context_line":"                if isinstance(driver.obj, api.TypeDriver):"},{"line_number":363,"context_line":"                    dynamic_segment \u003d driver.obj.reserve_provider_segment("},{"line_number":364,"context_line":"                        context.session, segment)"},{"line_number":365,"context_line":"                else:"},{"line_number":366,"context_line":"                    dynamic_segment \u003d driver.obj.reserve_provider_segment("},{"line_number":367,"context_line":"                        context, segment)"},{"line_number":368,"context_line":"                segments_db.add_network_segment(context, network_id,"},{"line_number":369,"context_line":"                                                dynamic_segment,"},{"line_number":370,"context_line":"                                                is_dynamic\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"a7951cd0_8ad760ce","line":367,"range":{"start_line":362,"start_character":16,"end_line":367,"end_character":41},"updated":"2026-10-28 09:55:46.000000000","message":"no action needed here: do we still need this \"if..else..\"? Wasn\u0027t it added long time ago to keep backward compatibility with old type drivers or something like that?","commit_id":"9bdccd93e3add56b00a94af05364298a9543fec9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2812c08c686368c1097b7b771df54d5a135c96fb","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        try:"},{"line_number":360,"context_line":"            with db_api.CONTEXT_WRITER.using(context):"},{"line_number":361,"context_line":"                driver \u003d self.drivers.get(segment.get(api.NETWORK_TYPE))"},{"line_number":362,"context_line":"                if isinstance(driver.obj, api.TypeDriver):"},{"line_number":363,"context_line":"                    dynamic_segment \u003d driver.obj.reserve_provider_segment("},{"line_number":364,"context_line":"                        context.session, segment)"},{"line_number":365,"context_line":"                else:"},{"line_number":366,"context_line":"                    dynamic_segment \u003d driver.obj.reserve_provider_segment("},{"line_number":367,"context_line":"                        context, segment)"},{"line_number":368,"context_line":"                segments_db.add_network_segment(context, network_id,"},{"line_number":369,"context_line":"                                                dynamic_segment,"},{"line_number":370,"context_line":"                                                is_dynamic\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"b74d804c_ca3d6238","line":367,"range":{"start_line":362,"start_character":16,"end_line":367,"end_character":41},"in_reply_to":"a7951cd0_8ad760ce","updated":"2026-10-28 10:11:58.000000000","message":"I\u0027m pushing a follow-up patch right now.","commit_id":"9bdccd93e3add56b00a94af05364298a9543fec9"}],"neutron/tests/unit/plugins/ml2/drivers/test_type_vlan.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"422bad2295333127d11bed857f48132ba5048af4","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        # stop Neutron from starting: they could not reach the API to undo it"},{"line_number":417,"context_line":"        obj_network_segment_range.NetworkSegmentRange("},{"line_number":418,"context_line":"            self.context, network_type\u003dp_const.TYPE_VLAN,"},{"line_number":419,"context_line":"            physical_network\u003dUNCONFIGURED_NET, minimum\u003dVLAN_MIN,"},{"line_number":420,"context_line":"            maximum\u003dVLAN_MAX, default\u003dFalse, shared\u003dTrue).create()"},{"line_number":421,"context_line":"        self._allocate(UNCONFIGURED_NET, VLAN_MIN)"},{"line_number":422,"context_line":"        self.driver._network_vlan_ranges \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"f167c22d_a9366976","line":419,"updated":"2026-10-06 16:25:34.000000000","message":"pep8: F821 undefined name \u0027UNCONFIGURED_NET\u0027","commit_id":"ccab6bd382e012b129947c340b1679bad03766ca"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"422bad2295333127d11bed857f48132ba5048af4","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            self.context, network_type\u003dp_const.TYPE_VLAN,"},{"line_number":419,"context_line":"            physical_network\u003dUNCONFIGURED_NET, minimum\u003dVLAN_MIN,"},{"line_number":420,"context_line":"            maximum\u003dVLAN_MAX, default\u003dFalse, shared\u003dTrue).create()"},{"line_number":421,"context_line":"        self._allocate(UNCONFIGURED_NET, VLAN_MIN)"},{"line_number":422,"context_line":"        self.driver._network_vlan_ranges \u003d {"},{"line_number":423,"context_line":"            PROVIDER_NET: [(p_const.MIN_VLAN_TAG, p_const.MAX_VLAN_TAG)],"},{"line_number":424,"context_line":"            TENANT_NET: [(VLAN_MIN, VLAN_MAX)]}"}],"source_content_type":"text/x-python","patch_set":2,"id":"89d518b4_35009cf4","line":421,"updated":"2026-10-06 16:25:34.000000000","message":"pep8: F821 undefined name \u0027UNCONFIGURED_NET\u0027","commit_id":"ccab6bd382e012b129947c340b1679bad03766ca"}]}
